大侠
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.
 
 
 

589 lines
18 KiB

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)
}
}