You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
AdLike2048/tools/wechat-only/Sdk30rWechat.ts

121 lines
3.0 KiB

/**
* 微信 DataNexus / 30r。仅 wechatgame 构建时由扩展拷入 assets/script/sdk。
* 官方 SDK 放到 node_modules/@dn-sdk,或把 js 放本目录命名为 dn-sdk.js。
*/
/** createSdk30r 入参 */
export type Sdk30rCreateOpts = {
/** 腾讯广告 user_action_set_id */
user_action_set_id: number;
/** 密钥 */
secret_key: string;
/** 微信 appid */
appid: string;
};
/** 官方 SDK 最小面 */
type DnSdkLike = {
init?: (opts: Sdk30rCreateOpts) => { inited?: boolean } | void;
track?: (event: string, msg: unknown) => void;
setOpenId?: (uid: string) => void;
onTutorialFinish?: () => void;
onRegister?: () => void;
};
/**
* 微信 30r 运行时(SDKManager.require 入口为 createSdk30r)。
*/
export class Sdk30rWechat {
private _sdk: DnSdkLike | null = null;
private _inited = false;
/**
* 加载官方 SDK 并初始化
* @param opts 广告账号参数
*/
static create(opts: Sdk30rCreateOpts): Sdk30rWechat {
const ins = new Sdk30rWechat();
ins._boot(opts);
return ins;
}
/**
* 上报事件
* @param event 事件名
* @param msg 属性
*/
track(event: string, msg: unknown): void {
this._sdk?.track?.(event, msg);
}
/** 新手引导完成 */
onTutorialFinish(): void {
this._sdk?.onTutorialFinish?.();
}
/** 注册完成 */
onRegister(): void {
this._sdk?.onRegister?.();
}
/**
* 绑定 openid
* @param uid 用户 id
*/
setOpenId(uid: string): void {
this._sdk?.setOpenId?.(String(uid ?? ''));
}
/** 初始化结果 */
getInitResult(): { inited: boolean } {
return { inited: this._inited };
}
/** 载入并 init 官方 SDK */
private _boot(opts: Sdk30rCreateOpts): void {
const mod = this._loadDnSdk();
if (!mod) {
console.error('[Sdk30rWechat] 未找到 @dn-sdk / dn-sdk.js');
return;
}
this._sdk = mod;
if (typeof mod.init !== 'function') {
this._inited = true;
return;
}
const ret = mod.init(opts);
this._inited = ret == null || ret.inited !== false;
}
/** 优先 npm @dn-sdk,其次同目录 dn-sdk.js */
private _loadDnSdk(): DnSdkLike | null {
try {
return this._unwrap(require('@dn-sdk'));
} catch {
/* 再试 vendor */
}
try {
return this._unwrap(require('./dn-sdk'));
} catch {
return null;
}
}
/**
* 解开 default 导出
* @param raw require 结果
*/
private _unwrap(raw: unknown): DnSdkLike | null {
if (!raw || typeof raw !== 'object') return null;
const rec = raw as { default?: DnSdkLike };
return rec.default ?? (raw as DnSdkLike);
}
}
/**
* SDKManager 动态 require 入口
* @param opts 初始化参数
*/
export function createSdk30r(opts: Sdk30rCreateOpts): Sdk30rWechat {
return Sdk30rWechat.create(opts);
}