import { sys } from 'cc'; /** * 微信分享配置 */ export interface WxShareConfig { /** 分享标题 */ title: string; /** 分享图片 URL 或本地路径 */ imageUrl?: string; /** 查询字符串,从这条转发消息进入后,可通过 wx.getLaunchOptionsSync 或 wx.onShow 获取 */ query?: string; } /** * 微信朋友圈分享配置 */ export interface WxShareTimelineConfig { /** 分享标题 */ title: string; /** 分享图片 URL 或本地路径 */ imageUrl?: string; /** 查询字符串 */ query?: string; } /** * 微信小游戏 SDK 工具类 * 封装微信平台相关 API,非微信环境下静默降级 */ export class WxSDK { /** * 是否处于微信小游戏环境 */ static isWechat(): boolean { return sys.platform === sys.Platform.WECHAT_GAME; } /** * 获取 wx 全局对象(仅微信环境下可用) */ private static getWx(): any { if (!WxSDK.isWechat()) return null; return typeof wx !== 'undefined' ? wx : null; } // ==================== 分享相关 ==================== /** * 开启转发/分享菜单 * 调用后用户可通过右上角菜单进行转发 * @param withShareTicket 是否带 shareTicket,用于获取群信息 */ static showShareMenu(withShareTicket: boolean = true): void { const wxApi = WxSDK.getWx(); if (!wxApi) return; wxApi.showShareMenu({ withShareTicket, menus: ['shareAppMessage', 'shareTimeline'], success: () => { console.log('[WxSDK] showShareMenu 成功'); }, fail: (err: any) => { console.warn('[WxSDK] showShareMenu 失败', err); } }); } /** * 设置被动分享(右上角菜单 "转发给朋友")的内容 * 需要在页面加载后尽早调用,只需调用一次 * @param config 分享配置 */ static onShareAppMessage(config: WxShareConfig): void { const wxApi = WxSDK.getWx(); if (!wxApi) return; wxApi.onShareAppMessage(() => ({ title: config.title, imageUrl: config.imageUrl ?? '', query: config.query ?? '' })); console.log('[WxSDK] onShareAppMessage 已设置'); } /** * 设置分享到朋友圈的内容 * @param config 朋友圈分享配置 */ static onShareTimeline(config: WxShareTimelineConfig): void { const wxApi = WxSDK.getWx(); if (!wxApi) return; if (typeof wxApi.onShareTimeline !== 'function') { console.warn('[WxSDK] 当前微信版本不支持 onShareTimeline'); return; } wxApi.onShareTimeline(() => ({ title: config.title, imageUrl: config.imageUrl ?? '', query: config.query ?? '' })); console.log('[WxSDK] onShareTimeline 已设置'); } /** * 主动触发转发(拉起分享面板) * @param config 分享配置 */ static shareAppMessage(config: WxShareConfig): void { const wxApi = WxSDK.getWx(); if (!wxApi) return; wxApi.shareAppMessage({ title: config.title, imageUrl: config.imageUrl ?? '', query: config.query ?? '' }); console.log('[WxSDK] shareAppMessage 已触发'); } /** * 一键初始化分享功能 * 开启分享菜单 + 设置被动分享内容 + 设置朋友圈分享内容 * @param config 分享配置 */ static initShare(config: WxShareConfig): void { if (!WxSDK.isWechat()) { console.log('[WxSDK] 非微信环境,跳过分享初始化'); return; } WxSDK.showShareMenu(); WxSDK.onShareAppMessage(config); WxSDK.onShareTimeline({ title: config.title, imageUrl: config.imageUrl, query: config.query }); console.log('[WxSDK] 分享功能初始化完成'); } }