import { director, Director, sys } from "cc"; import { PREVIEW } from "cc/env"; import { SDK } from '../libs/dn-sdk-minigame/index.mjs'; import PlatformData from "../Platform/Data/PlatformData"; import LocalStorage from "../Mgr_LocalData/LocalStorage"; export enum WXSKDAction { // // 自定义 // CUSTOM = "CUSTOM", // // 页面访问 // PAGE_VIEW = "PAGE_VIEW", // // 注册 // REGISTER = "REGISTER", // // 搜索 // SEARCH = "SEARCH", // 收藏 ADD_TO_WISHLIST = "ADD_TO_WISHLIST", // // 评分 // RATE = "RATE", // 分享 SHARE = "SHARE", /**广告位展示 */ AD_PLACEMENT_SHOW = "AD_PLACEMENT_SHOW", /**广告位点击 */ AD_CLICK = "AD_CLICK", /**广告位播放结束 */ AD_VIDEO_FINISH = "AD_VIDEO_FINISH", /**广告位曝光 */ AD_IMPRESSION = 'AD_IMPRESSION', // // (游戏)创建角色 // CREATE_ROLE = "CREATE_ROLE", // // (游戏)授权 // AUTHORIZE = "AUTHORIZE", // // (游戏)完成新手教程 // TUTORIAL_FINISH = "TUTORIAL_FINISH", // // 加企业微信客服 // SCANCODE = "SCANCODE", // // App // ENTER_BACKGROUND = "ENTER_BACKGROUND", // // App 退到后台 // ENTER_FOREGROUND = "ENTER_FOREGROUND", // // 心跳维持 进入前台 // TICKET = "TICKET", // // 登录, 每分钟一次 // LOGIN = "LOGIN", // // 完成关键节点 // QUEST = "QUEST", // // 用户升级 // UPDATE_LEVEL = "UPDATE_LEVEL", // // 创建一个新的页面 // CREATE = "CREATE", // // 暂停页面, 页面可以是 Activity、Fragment、ViewController // PAUSE = "PAUSE", // // 恢复页面, 页面可以是 Activity、Fragment、ViewController // RESUME = "RESUME", // // 退出, 页面可以是 Activity、Fragment、ViewController // APP_QUIT = "APP_QUIT", // // 绑定社交账号 App // BIND_ACCOUNT = "BIND_ACCOUNT", // // 添加支付方式 // ADD_PAYMENT = "ADD_PAYMENT", // // 预授信 // PRE_CREDIT = "PRE_CREDIT", // // 授信 // CREDIT = "CREDIT", // // 提现 // WITHDRAW_DEPOSITS = "WITHDRAW_DEPOSITS", // // 落地页内点击 // LANDING_PAGE_CLICK = "LANDING_PAGE_CLICK", // // 选课 // SELECT_COURSE = "SELECT_COURSE", // // 退款 // RE_FUND = "RE_FUND", // // 平台落地页浏览 // PLATFORM_VIEW = "PLATFORM_VIEW", // // 次日留存 // ONE_DAY_LEAVE = "ONE_DAY_LEAVE", // // 商品详情页浏览 // PRODUCT_VIEW = "PRODUCT_VIEW", // // 会员购买 // PURCHASE_MEMBER_CARD = "PURCHASE_MEMBER_CARD", // // 网页咨询 // ONLINE_CONSULT = "ONLINE_CONSULT", // // 电话咨询 // MAKE_PHONE_CALL = "MAKE_PHONE_CALL", // // 关注 // FOLLOW = "FOLLOW", // // 加桌 // ADD_DESKTOP = "ADD_DESKTOP", // // 短时间内就返回客户端 // RETURN = "RETURN", // // 咨询留资, 用于下单的负向 // LEAVE_INFORMATION = "LEAVE_INFORMATION", // // 购券 // PURCHASE_COUPON = "PURCHASE_COUPON", // // 加群 // ADD_GROUP = "ADD_GROUP", // // 添加客户引导页面浏览 // ADD_CUSTOMER_PAGE_VIEW = "ADD_CUSTOMER_PAGE_VIEW", // // 添加客户引导页面互动 // ADD_CUSTOMER_PAGE_INTERACTIVE = "ADD_CUSTOMER_PAGE_INTERACTIVE", // // 客户活动页面浏览 // CUSTOMER_PROMOTION_PAGE_VIEW = "CUSTOMER_PROMOTION_PAGE_VIEW", // // 客户活动页面互动 // CUSTOMER_PROMOTION_PAGE_INTERACTIVE = "CUSTOMER_PROMOTION_PAGE_INTERACTIVE", // // 广告渠道带来,但客户认定异常的用户产生的转化行为 // ABNORMAL_ACTION = "ABNORMAL_ACTION", // // 观看直播 // LIVE_STREAM = "LIVE_STREAM", // // 长按扫码 // SCANCODE_WX = "SCANCODE_WX", // // 7 // STAY_PAY_7 = "STAY_PAY_7", // // 15 日内复购 // STAY_PAY_15 = "STAY_PAY_15", // // 30 日内复购 // STAY_PAY_30 = "STAY_PAY_30", // // 保险支付 日内复购 // INSURANCE_PAY = "INSURANCE_PAY", // // 用户意向表单 // RESERVATION_CHECK = "RESERVATION_CHECK", // // 低价课首次参课 // PARTICIPATED = "PARTICIPATED", // // 低价课完课 // COMPLETED = "COMPLETED", // // 正价课转化 // REGULAR_PRICE_COURSE = "REGULAR_PRICE_COURSE", // // 退课 // DROP_OUT = "DROP_OUT", // // 确认邮寄订单 // CONFIRM_DELIVERY_ORDER = "CONFIRM_DELIVERY_ORDER", // // 取消邮寄订单 // CANCEL_DELIVERY_ORDER = "CANCEL_DELIVERY_ORDER", // // 开户 // OPEN_ACCOUNT = "OPEN_ACCOUNT", // // 入金 // DEPOSIT = "DEPOSIT", // // 交易 // TRADE = "TRADE", // // 证券负向 // SECURITY_NEGATIVE = "SECURITY_NEGATIVE", // // 排程 // TRY_OUT_INTENTION = "TRY_OUT_INTENTION", // // 无效线索 // INEFFECTIVE_LEADS = "INEFFECTIVE_LEADS", // // 文章阅读 // READ_ARTICLE = "READ_ARTICLE", // // 评论 // COMMENT = "COMMENT", // // 卡片点击 // CARD_CLICK = "CARD_CLICK", // // 加企微后开口 // WECOM_CONSULT = "WECOM_CONSULT", // // 绑卡 // BIND_CARD = "BIND_CARD", // // 低价课转化 // LOW_PRICE_COURSE = "LOW_PRICE_COURSE", // // 添加个人企业微信成功 // ADD_WECHAT = "ADD_WECHAT", // // 预付定金 // PRE_PAY = "PRE_PAY", // // 退群 // QUIT_GROUP = "QUIT_GROUP", // // 电话联系完成 // PHONE_CONNECTED = "PHONE_CONNECTED", // 沉默唤起 RE_ACTIVE = "RE_ACTIVE", // // 领课 // CLAIM_COURSE = "CLAIM_COURSE", // // 拉新关键页面访问 // VIEW_ACQUISITION_CONTENT = "VIEW_ACQUISITION_CONTENT", // // 保险脱退 // TERMINATION = "TERMINATION", // // 保险续费 // RENEWAL = "RENEWAL", // // 开口后关键意向 // CONSULT_INTENTION = "CONSULT_INTENTION", // // App // APP_VIEW_SCREEN = "APP_VIEW_SCREEN", // // App 页面浏览 // APP_CLICK = "APP_CLICK", // // 发货无意向 元素点击 // CANCEL_DELIVER = "CANCEL_DELIVER", // // 加粉后负向 // ADD_WECHAT_NEGATIVE = "ADD_WECHAT_NEGATIVE", // // 线索被外呼 // LEADS_OUTBOUND = "LEADS_OUTBOUND", // // 线索被分配 // LEADS_DISTRIBUTED = "LEADS_DISTRIBUTED", // // 取消订单 // CANCEL_ORDER = "CANCEL_ORDER", // // 用户年化利率 // INTEREST_RATE = "INTEREST_RATE", // // 贷款多头 // LONGLOAN = "LONGLOAN", // // 还款逾期 // OVERDUE = "OVERDUE", // // 授信拒量 // CREDIT_LEAKAGE = "CREDIT_LEAKAGE", // // 本地到店领券核销 // COUPON_REDEMPTION = "COUPON_REDEMPTION", // // 观看短剧 // VIEW_DRAMA = "VIEW_DRAMA", // // 结束观看短剧 // EXIT_DRAMA = "EXIT_DRAMA", // // 充值解锁剧集 // UNLOCK_PAID_EPISODES = "UNLOCK_PAID_EPISODES", // // 创建游戏圈 // CREATE_GAME_CLUB = "CREATE_GAME_CLUB", // // 点击游戏圈 // TAP_GAME_CLUB = "TAP_GAME_CLUB", // // 创建游戏房间 // CREATE_GAME_ROOM = "CREATE_GAME_ROOM", // // 加入游戏房间 // JOIN_GAME_ROOM = "JOIN_GAME_ROOM", // // 开始支付 // START_PAY = "START_PAY", // // 完成支付(成功或失败) // FINISH_PAY = "FINISH_PAY", // // 页面离开(小程序) // PAGE_LEAVE = "PAGE_LEAVE", // // 追剧 // BINGE_VIEWING = "BINGE_VIEWING", // // 签到 // CHECK_IN = "CHECK_IN", // // 点赞 // LIKE = "LIKE", // // 开通 // UNDERWRITING = "UNDERWRITING", // // 借款 // FIRST_WITHDRAW = "FIRST_WITHDRAW", // // 授权低价险按月扣费 // LOW_PRICE_INSURANCE_PAYMENT = "LOW_PRICE_INSURANCE_PAYMENT", // // 授权正价险按月扣费 // STANDARD_PRICE_INSURANCE_PAYMENT = "STANDARD_PRICE_INSURANCE_PAYMENT", // // 计算停留类型 // COMPUTE_STAY_TIME = "COMPUTE_STAY_TIME", // // 先导课完课 // BRIDGING_COURSE_COMPLETED = "BRIDGING_COURSE_COMPLETED", // // 选择充值档位 // SELECT_RECHARGE_LEVEL = "SELECT_RECHARGE_LEVEL", // // 集合页浏览 // COLLECTION_PAGE_VIEW = "COLLECTION_PAGE_VIEW", // // 点击发弹幕 // POST_BULLET_SCREEN = "POST_BULLET_SCREEN", } const config = { // 数据源ID,数字,必填 user_action_set_id: 0, // 加密key,必填 secret_key: '', // 微信小游戏APPID,wx开头,必填 appid: '', openid: '', on_report_fail: null, auto_track: true, } interface waitSendData { name: string, data: any } export class TXSDKMgr { private static _ins: TXSDKMgr; public static get ins() { if (!this._ins) { this._ins = new TXSDKMgr(); } return this._ins; } private _TXSdk: SDK; isinit: boolean = false; isinitComplete: boolean = false; waitList: waitSendData[] = []; init(platData:PlatformData) { if (PREVIEW) { return }; if (window["ks"]) { return; } if (!window["wx"]) { return; } if (this.isinit) return; if (!platData.appId || !platData.user_action_set_id) { return console.error("微信SDK打点APPID错误"); } if (!platData.secret_key.length) { return console.error("微信SDK服务器secret_key错误") } director.on(Director.EVENT_AFTER_DRAW, this.loopSendEvent, this); this.isinit = true; config.user_action_set_id = platData.user_action_set_id; config.secret_key = platData.secret_key; config.appid = platData.appId; // 是否打开调试模式, 建议仅在调试期间开启。setDebug是引入类上方法,非实例化对象上方法。 //SDK.setDebug(true); config.on_report_fail = this.on_report_fail.bind(this); this._TXSdk = new SDK(config); // 获取初始化状态(以下可选) const initResult = this._TXSdk.getInitResult(); if (!initResult.inited) { // 上报到开发者内部监控平台,监测初始化失败的情况。 console.error("微信SDK服务器初始化失败", initResult.initErrMsg) return; } this._TXSdk.onAppStart(); window["wx"].onAddToFavorites(() => { console.log("触发收藏逻辑") this.onAddToWishlist(); this.onAddToFavorites(); }) } initInfo(openid: string) { if (PREVIEW) { return }; if (!this.isinit) return; if (this.isinitComplete) { return; } this._TXSdk.setOpenId(openid); let isRegisterUser = !LocalStorage.getItem("isRegisterUser") //上报注册行为,后台接口判断是否为注册用户 if (isRegisterUser) { this._TXSdk.onRegister(); LocalStorage.setItem("isRegisterUser", 1); LocalStorage.setItem("loginTime", Date.now()); } else { let lasttime = +LocalStorage.getItem("loginTime") || 0; let day = Math.floor((Date.now() - lasttime) / 1000) / (24 * 60 * 60); if (day >= 30) { this._TXSdk.track(WXSKDAction.RE_ACTIVE, { backFlowDay: 30 }); } else if (day >= 14) { this._TXSdk.track(WXSKDAction.RE_ACTIVE, { backFlowDay: 14 }); } else if (day >= 7) { this._TXSdk.track(WXSKDAction.RE_ACTIVE, { backFlowDay: 7 }); } LocalStorage.setItem("loginTime", Date.now()); } //发送事件 this.isinitComplete = true; } LOAD_FINISH() { if (!this.isinit) { return; } this._TXSdk.track('LOAD_FINISH', {}); } /**创建角色(CREATE_ROLE) */ onCreateRole( roleName:string) { } /**新手引导开始 */ onTutorial_start(){ if(!this.isinit){return;} this._TXSdk.track('TUTORIAL_START', {}); } /**完成新手引导 */ onTutorialFinish(){ if(!this.isinit){return;} this._TXSdk.onTutorialFinish(); } onLevel_Enter(data:{ /**关卡进度 */ enter_level_id?:number, /**游戏关卡名称 */ enter_level_name?:string, /**游戏模式 */ game_mode?:string, /**进入是关卡ID */ level_id:number, /**进入关卡时的章节ID */ chapter_id?:number, /**进入关卡时的金币数 */ coin_amount?:number, /**进入关卡时的体力值 */ stamina_value?:number, /**进入关卡时的等级值 */ level_value?:number, }){ if(!this.isinit){return;} this._TXSdk.track('LEVEL_ENTER', data); } onLevel_Exit(data:{ /**关卡进度 */ ad_cnt:number, /**游戏关卡名称 */ duration?:number, enter_level_id?:number, /**游戏模式 */ game_mode?:string, items?:string[], /**进入是关卡ID */ level_id:number, /**进入关卡时的章节ID */ chapter_id?:number, /**进入关卡时的金币数 */ coin_amount?:number, /**进入关卡时的体力值 */ stamina_value?:number, /**进入关卡时的等级值 */ level_value?:number, }){ if(!this.isinit){return;} this._TXSdk.track('LEVEL_EXIT', data); } onLevel_Lose(data:{ /**关卡进度 */ ad_cnt:number, /**游戏时长 */ duration:number, enter_level_id?:number, /**游戏模式 */ game_mode?:string, items?:string[], /**进入是关卡ID */ level_id:number, /**进入关卡时的章节ID */ chapter_id?:number, /**进入关卡时的金币数 */ coin_amount?:number, /**进入关卡时的体力值 */ stamina_value?:number, /**进入关卡时的等级值 */ level_value?:number, }){ if(!this.isinit){return;} this._TXSdk.track('LEVEL_LOSE', data); } onLevel_Pass(data:{ /**关卡进度 */ ad_cnt:number, /**用户游戏时长 */ duration:number, enter_level_id?:number, /**游戏模式 */ game_mode?:string, items?:string[], /**进入是关卡ID */ level_id:number, /**进入关卡时的章节ID */ chapter_id?:number, /**进入关卡时的金币数 */ coin_amount?:number, /**进入关卡时的体力值 */ stamina_value?:number, /**进入关卡时的等级值 */ level_value?:number, }){ if(!this.isinit){return;} this._TXSdk.track('LEVEL_PASS', data); } /**广告位展示 */ AD_UI_SHOW(ad_placement_name:number){ if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.AD_PLACEMENT_SHOW, { ad_placement_name:ad_placement_name, }); } /**广告位点击 */ AD_CLICK(ad_placement_name: number) { if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.AD_CLICK, { ad_placement_name: ad_placement_name, }); } /**广告位播放完成 */ AD_FINISH(ad_placement_name: number) { if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.AD_VIDEO_FINISH, { ad_placement_name: ad_placement_name, }); } /**其他广告位播放完成 */ AD_OTHER_FINISH(ad_placement_name: number) { if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.AD_VIDEO_FINISH, { ad_placement_name: ad_placement_name, }); } /** * * @param type 1 激励视频 2 插屏 3格子 4 横幅Banner * @returns */ AD_IMPRESSION(type:number){ if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.AD_IMPRESSION, { ad_type: type, }); } /**收藏小游戏 */ onAddToWishlist(){ if(!this.isinit){return;} this._TXSdk.onAddToWishlist && this._TXSdk.onAddToWishlist(); } /**付费(PURCHASE) @param value 人名币(单位 分)*/ onPurchase(value:number){ } /**收藏 */ onAddToFavorites(type:string = "default"){ if(!this.isinit){return;} this._TXSdk.track(WXSKDAction.ADD_TO_WISHLIST, { // 普通收藏(default) type: type, }); } /**1、转发给朋友 */ onShareAppMessage() { if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.SHARE, { target: 'APP_MESSAGE' }); } /**2、分享到朋友圈 */ onShareTimeline() { if (!this.isinit) { return; } this._TXSdk.track(WXSKDAction.SHARE, { target: 'TIME_LINE' }); } on_report_fail(err) { console.warn("微信SDK数据上报失败", err) } loopSendEvent() { if (this.isinit && this.isinitComplete && this.waitList.length > 0) { let eData = this.waitList.shift(); this.sendtrack(eData.name, eData.data); } } /**上报自定义事件 * @param name 事件名称 * @param data 事件参数 */ TrySendtrack(name: string, data: any) { let tempData = null; if (Array.isArray(data)) { let strList: string[] = []; for (let i = 0; i < data.length; i++) { const str = JSON.stringify(data[i]); strList.push(str); } tempData = { data: strList, } } else { tempData = data; } if (!this.isinit || !this.isinitComplete || this.waitList.length > 0) { this.waitList.push({ name: name, data: tempData }); return; } this.sendtrack(name, tempData); } /**上报自定义事件 * @param name 事件名称 * @param data 事件参数 */ private sendtrack(name: string, data: any) { console.log("wxSDK数据上报", name, data) var ret = this._TXSdk.track(name, data as any); console.log(ret) } }