188 lines
5.3 KiB
TypeScript
188 lines
5.3 KiB
TypeScript
import { _decorator, Component, sys, utils } from "cc";
|
|
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
|
import { PlatformHelper } from "./PlatformHelper";
|
|
import { IAdSDK } from "./core/IAdSDK";
|
|
import { IWalletSDK } from "./core/IWalletSDK";
|
|
import { IPlatformSDK } from "./core/IPlatformSDK";
|
|
import { IAnalyticsSDK } from "./core/IAnalyticsSDK";
|
|
import { WxPlatformSDK } from "./platform/WxPlatformSDK";
|
|
import { WxAdSDK } from "./ads/WxAdSDK";
|
|
import { LuffaWalletSDK } from "./wallet/LuffaWalletSDK";
|
|
import { UmaAnalyticsSDK } from "./analytics/UmaAnalyticsSDK";
|
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
// 渠道管理器
|
|
@ccclass('SDKManager')
|
|
export class SDKManager {
|
|
private static _I: SDKManager = null;
|
|
public static get I(): SDKManager {
|
|
if (!SDKManager._I) {
|
|
SDKManager._I = new SDKManager();
|
|
}
|
|
return SDKManager._I;
|
|
}
|
|
// 广告,分享
|
|
private adSDK: IAdSDK | null = null;
|
|
// 钱包
|
|
private walletSDK: IWalletSDK | null = null;
|
|
// 平台基础
|
|
private platformSDK: IPlatformSDK | null = null;
|
|
// 分析统计
|
|
private analyticsSDK: IAnalyticsSDK | null = null;
|
|
|
|
private constructor() {
|
|
|
|
}
|
|
|
|
// 初始化
|
|
public init(cb: Function = null) {
|
|
logger.info("SDKManager 初始化...");
|
|
// 检测平台
|
|
if (PlatformHelper.isKuaishou()) {
|
|
// 快手
|
|
|
|
} else if (PlatformHelper.isWechat()) {
|
|
// 微信
|
|
this.adSDK = new WxAdSDK();
|
|
this.platformSDK = new WxPlatformSDK();
|
|
} else if (PlatformHelper.isLuffa()) {
|
|
// Luffa
|
|
this.walletSDK = new LuffaWalletSDK();
|
|
} else if (PlatformHelper.isByteDance()) {
|
|
// 字节跳动
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
// 默认加载 UMA 分析
|
|
this.analyticsSDK = new UmaAnalyticsSDK();
|
|
|
|
// 初始化各模块
|
|
this.adSDK?.init();
|
|
this.walletSDK?.init();
|
|
this.platformSDK?.init();
|
|
this.analyticsSDK?.init();
|
|
|
|
// 回调
|
|
cb && cb();
|
|
}
|
|
|
|
/**
|
|
* 销毁所有 SDK
|
|
*
|
|
* - 逐个调用各 SDK 的 `destroy` 方法
|
|
* - 用于游戏退出、切换账号、切换平台时释放资源
|
|
* - 调用时机:游戏关闭 / 重新进入大厅 / SDK 切换
|
|
*/
|
|
public destroyAll() {
|
|
this.adSDK?.destroy?.();
|
|
this.adSDK = null;
|
|
this.walletSDK?.destroy?.();
|
|
this.walletSDK = null;
|
|
this.platformSDK?.destroy?.();
|
|
this.platformSDK = null;
|
|
this.analyticsSDK?.destroy?.();
|
|
this.analyticsSDK = null;
|
|
logger.log("所有 SDK 已销毁并清空引用");
|
|
}
|
|
|
|
/** --------------------------------------------------------- 广告,分享 --------------------------------------------------------- */
|
|
|
|
// 展示激励视频广告
|
|
public showRewardVideo(cb: (ok: boolean) => void): void {
|
|
if (!this.adSDK) return;
|
|
this.adSDK.showRewardVideo(cb)
|
|
}
|
|
|
|
// 展示插屏广告
|
|
public showInterstitial(): void {
|
|
if (!this.adSDK) return;
|
|
this.adSDK.showInterstitial()
|
|
}
|
|
|
|
// 展示 Banner 广告
|
|
public showBanner(): void {
|
|
if (!this.adSDK) return;
|
|
this.adSDK.showBanner()
|
|
}
|
|
|
|
// 隐藏 Banner 广告
|
|
public hideBanner(): void {
|
|
if (!this.adSDK) return;
|
|
this.adSDK.hideBanner()
|
|
}
|
|
|
|
// 主动拉起分享
|
|
public showShare(cb?: Function): void {
|
|
if (!this.adSDK) return;
|
|
this.adSDK.showShare(cb)
|
|
}
|
|
|
|
/** --------------------------------------------------------- 钱包 --------------------------------------------------------- */
|
|
|
|
// 获取当前钱包地址
|
|
public getWalletAddress(): string | null {
|
|
if (!this.walletSDK) return null;
|
|
return this.walletSDK.getWalletAddress()
|
|
}
|
|
|
|
/** --------------------------------------------------------- 平台基础 --------------------------------------------------------- */
|
|
|
|
// 登录
|
|
public login(cb?: Function): void {
|
|
if (!this.platformSDK) return;
|
|
this.platformSDK.login(cb)
|
|
}
|
|
|
|
// 获取用户信息
|
|
public getUserInfo(cb: (info: { nickName: string; avatarUrl: string }) => void): void {
|
|
if (!this.platformSDK) return;
|
|
this.platformSDK.getUserInfo(cb)
|
|
}
|
|
|
|
// 检查平台权限
|
|
public checkPermission(scope: string, cb: (granted: boolean) => void): void {
|
|
if (!this.platformSDK) return;
|
|
this.platformSDK.checkPermission(scope, cb)
|
|
}
|
|
|
|
// 复制文本到剪贴板
|
|
public copyToClipboard(text: string, cb?: Function): void {
|
|
if (!this.platformSDK) return;
|
|
this.platformSDK.copyToClipboard(text, cb);
|
|
}
|
|
|
|
// 客服功能是否可用
|
|
public kefuSupport(): boolean {
|
|
if (!this.platformSDK) return false;
|
|
return this.platformSDK.kefuSupport();
|
|
}
|
|
|
|
// 打开客服会话
|
|
public openKefu(): void {
|
|
if (!this.platformSDK) return;
|
|
this.platformSDK.openKefu();
|
|
}
|
|
|
|
// 获取设备分辨率
|
|
public getWindowSize(): { width: number, height: number } {
|
|
if (!this.platformSDK) return {width: 720, height: 1280};
|
|
return this.platformSDK.getWindowSize();
|
|
}
|
|
|
|
/** --------------------------------------------------------- 分析统计 --------------------------------------------------------- */
|
|
|
|
// 判断统计功能是否可用
|
|
public isAnalyticsEnabled(): boolean {
|
|
if (!this.analyticsSDK) return false;
|
|
return this.analyticsSDK.isAnalyticsEnabled();
|
|
}
|
|
|
|
// 上报事件
|
|
public trackEvent(eventName: string, value?: any): void {
|
|
if (!this.analyticsSDK) return;
|
|
return this.analyticsSDK.trackEvent(eventName, value);
|
|
}
|
|
} |