- 新增 WxSDK 微信SDK工具类 - 新增 PageLevel 关卡选择页面组件 - 将 prefabs 目录从 resources 移至根目录 - 更新 ViewManager 支持预制体属性引用 - 添加 BaseView 页面基类 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
149 lines
4.0 KiB
TypeScript
149 lines
4.0 KiB
TypeScript
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] 分享功能初始化完成');
|
||
}
|
||
}
|