import { screen } from "cc"; import { PlatformCommonDefine } from "../Common/PlatformCommonDefine"; import PlatformData from "../Data/PlatformData"; import PlatformManagerProxy from "../PlatformManagerProxy"; import DefaultRecordManager from "../Record/DefaultRecordManager"; import ShareManagerAKhgfawgsda from "../ShareManager"; import { EPlatformType } from "../T/EPlatformType"; import IPlatform from "../T/IPlatform"; import IRecordManager from "../T/IRecordManager"; import { ShareInfo } from "../T/ShareInfo"; import { TDAnalyticsMgr } from "../../Mgr_Ge/TDAnalyticsMgr"; import { Recommend } from "../Recommend/Recommend"; import { WXRecommend } from "../Recommend/WXRecommend"; import CsvMgr from "../../Mgr_CSV/CsvMgr"; import { PlatformEnum_WX } from "../Data/PlatformEnum"; import { MainConfig } from "db://assets/Launch/_MainConfig"; import PlatformManager from "../PlatformManager"; import { TXSDKMgr } from "../../Mgr_Ge/TXSDKMgr"; import LocalStorage from "../../Mgr_LocalData/LocalStorage"; import { GEData, GEType } from "../../Mgr_Ge/GeDifine"; import { Console } from "console"; import { GEAnalyticsMgr } from "../../Mgr_Ge/GEAnalyticsMgr"; /** * 微信平台实例 */ export default class WXPlatform implements IPlatform { isSliderBar: boolean; isAddShortcut: boolean; IsLeaderboardsEnable: boolean=false; base: any; platformData: PlatformData; onPause: Function; appId: string; platform: EPlatformType = EPlatformType.WX; safeArea: PlatformCommonDefine.SafeArea = null; lauchOption: PlatformCommonDefine.LaunchOption; loginState: PlatformCommonDefine.LoginState; onLoginEnd: Function; onResume: Function; recordManager: IRecordManager = new DefaultRecordManager(); systemInfo: any; loginCode: string = null; /** * 是否支持直接跳转到其他小程序 */ isSupportJumpOther: boolean = true; protected _data: PlatformData; protected _bannerAd; protected _rewardVideo; protected _intersitialAd; protected _isBannerLoaded: boolean = false; protected _isVideoLoaded: boolean = false; protected _isInterstitialLoaded: boolean = false; protected _videoFailedCount: number; protected _interstitalFailedCount: number; protected _rewardSuccessed: Function; protected _rewardSkipped: Function; protected loadFail: Function; protected _cacheScreenScale: number; protected _shareVideoBtn; protected _userInfoBtn; protected _base: any; protected _cacheVideoAD: boolean = true; protected openIDUrl:string = "https://game-api.lvzhouyouxi.com/getOpenId_line_wx"; protected clickId; /**推荐功能 */ mRecommend:Recommend; Init(platformData: PlatformData,callBack:Function) { this._base = window["wx"]; if (this._base == null) { console.warn("平台初始化错误", PlatformManagerProxy.platformStr); return; } this.platformData = platformData; this.isAddShortcut = true; this.recordManager.Platform = this; this.mRecommend = new WXRecommend(); switch (this.platformData.appId) { default: break; } this.mRecommend.init(platformData); this._InitLauchOption(); this._Login(callBack); this._InitShareInfo(); this._InitSystemInfo(); this._CreateBannerAd(); this._CreateVideoAd(); window["iplatform"] = this; } _InitABTest() { this._data = PlatformManager.instance.platData; ConsoleEx.Log("_InitABTest PlatformManager.instance.platData:",PlatformManager.instance.platData); let abtest = PlatformManager.instance.platData.ABTest; for(const type in abtest){ const key = abtest[type].key; const res = this._base.getExptInfoSync([key]); if(key === 'expt_1772086195'){ // if (res.expt_1772086195 === undefined || res.expt_1772086195 !== '1') { // abtest[type].v = 10; // } else if (res.expt_1772086195 == '1') { // /* 实验组1业务逻辑 */ // abtest[type].v = 10; // } abtest[type].v = 10; TDAnalyticsMgr.ins.userABSet(res.expt_1772086195); ConsoleEx.Com(`ABTest:${type},key:${key},state:${abtest[type].v}`); }else if(key === 'expt_1773922135'){ if (res.expt_1773922135 === undefined || res.expt_1773922135 == '0') { abtest[type].v = 0; } else { abtest[type].v = Number(res.expt_1773922135); } if(abtest[type].v > 3){ abtest[type].v = 0; } TDAnalyticsMgr.ins.userABSet(res.expt_1773922135); } } } /**AB测试生成 */ _CheckUpdate() { let updateManager = this._base.getUpdateManager(); if (updateManager == null) return; updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log("onCheckForUpdate", res.hasUpdate); if (res.hasUpdate) { this._base.showToast({ title: "即将有更新请留意" }); } }); updateManager.onUpdateReady(() => { this._base.showModal({ title: "更新提示", content: "新版本已经准备好,是否立即使用?", success: function (res) { if (res.confirm) { // 调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate(); } else { this._base.showToast({ icon: "none", title: "小程序下一次「冷启动」时会使用新版本" }); } } }); }); updateManager.onUpdateFailed(() => { this._base.showToast({ title: "更新失败,下次启动继续..." }); }); } _InitShareList(){ if(this.platformData.shareId && this.platformData.shareId.length > 0){ this.platformData.shareId.forEach((value)=>{ ShareManagerAKhgfawgsda.instance.AddShareInfo({ shareID:value.shareID, shareImg:value.shareImg, shareTitle:value.shareTitle, }); }) } } protected _Login(callBack:Function) { this.loginState = { isLogin: false, code: "", openid:"", }; let loginData = {} as PlatformCommonDefine.LoginData; loginData.success = (res) => { this.loginCode = res.code; this._OnLoginSuccess(res, callBack); console.warn(this.loginState); // callBack && callBack(); }; loginData.fail = (res) => { console.warn(PlatformManagerProxy.platformStr, "登录失败", res); this.loginState.isLogin = false; this.loginState.code = ""; }; loginData.complete = () => { if (this.onLoginEnd != null) { this.onLoginEnd(); } }; this._base.login(loginData); } public GetStorage(key: string): any { if (this.base && this.base.getStorageSync && key) { try { return this.base.getStorageSync(key); } catch (error) { console.log('getStorageSync error: ', JSON.stringify(error)); return null; } } } public SetStorage(key: string, data: any) { if (this.base && this.base.getStorageSync && key) { try { return this.base.setStorageSync(key, data); } catch (error) { console.log('setStorageSync error: ', JSON.stringify(error)); } } } protected _OnLoginSuccess(res: PlatformCommonDefine.LoginSuccessRes, callBack:Function) { console.log(PlatformManagerProxy.platformStr, "登录成功", res); this.loginState.isLogin = true; this.loginState.code = res.code; this._getWxID(); this.getOpenId(res.code, () => { callBack && callBack(); }, 0); this.checkFeedSubscribe((isOK:boolean)=>{ MainConfig.isFeedSubscribe = isOK; ConsoleEx.Log("直玩订阅:",isOK); }); } protected _getWxID(){ let info = this._base.getLaunchOptionsSync() console.log('微信登录信息', info) let query = info.query; if (query) { let gdt_vid = query.gdt_vid; let weixinadinfo = query.weixinadinfo; let aid = 0 if (weixinadinfo) { let weixinadinfoArr = weixinadinfo.split('.') aid = weixinadinfoArr[0] } if (aid) { this.loginState.weChatAdId = aid; } } if (!this.loginState.weChatAdId && window["weChatAdId"]) { this.loginState.weChatAdId = window["weChatAdId"]; } ConsoleEx.Log("获取的wxID",this.loginState.weChatAdId) } /**获取OpenID */ getOpenId(code:any,callBack:Function,idx:number){ let data = { code: code, appid: this.platformData.appId, appKey: this.platformData.appKey, } ConsoleEx.Warn("准备拉取OpenID",data) MainConfig.openid = this.loginState.openid = localStorage.getItem("GamePlayerID") || ""; if (!this.loginState.openid || this.loginState.openid.length == 0) { this._base.request({ url: this.openIDUrl, // 本地服务地址 method: 'POST', data: data, header: { 'Content-Type': 'application/json' }, success: (resp) => { console.log('---------------', resp) ConsoleEx.Warn("获取的数据", resp.data) if (resp.data.openid) { MainConfig.openid = this.loginState.openid = resp.data.openid; localStorage.setItem("GamePlayerID", resp.data.openid); } else { setTimeout(() => { this._Login(() => { }) }, 30 * 1000); } callBack && callBack(); }, fail: (errString) => { ConsoleEx.Error(errString); setTimeout(() => { this._Login(() => { }) }, 30 * 1000); }, complete: (message) => { //console.log('请求完成:', message); // if (!this.loginState.openid || this.loginState.openid.length == 0) { // setTimeout(() => { // this.getOpenId(code, callBack, idx++) // }, 2 * 1000); // } } }); }else{ callBack && callBack(); } } protected _InitLauchOption() { // 绑定onShow事件 this._base.onShow(this._OnShow); this._base.onHide(this._OnHide); // 自动获取一次启动参数 let res = this._base.getLaunchOptionsSync() as PlatformCommonDefine.LaunchOption; this._OnShow(res); } protected _InitShareInfo() { this._base.showShareMenu({ withShareTicket: true, success: (res) => { console.log("InitShareSuccess", res); }, fail: (res) => { console.log("InitShareFailed", res); }, complete: (res) => { console.log("InitShareComplete", res); } }); this._base.onShareAppMessage && this._base.onShareAppMessage( () => { TXSDKMgr.ins.onShareAppMessage(); let shareInfo = ShareManagerAKhgfawgsda.instance.GetShareInfo(); return this._WrapShareInfo(shareInfo); } ); this._base.onShareTimeline && this._base.onShareTimeline( () => { TXSDKMgr.ins.onShareTimeline(); let shareInfo = ShareManagerAKhgfawgsda.instance.GetShareInfo(); return this._WrapShareInfo(shareInfo); } ); } protected _WrapShareInfo(shareInfo: ShareInfo) { let shareObj = {}; if (shareInfo.shareTitle) { shareObj["title"] = shareInfo.shareTitle; } if (shareInfo.shareID) { shareObj["imageUrlId"] = shareInfo.shareID; } if (shareInfo.shareImg) { shareObj["imageUrl"] = shareInfo.shareImg; } if (shareInfo.sharePath) { shareObj["query"] = {}; let pathSplit = shareInfo.sharePath.split("?"); let params = pathSplit[1].split("&"); for (let getParam of params) { let splitParam = getParam.split("="); shareObj["query"][splitParam[0]] = splitParam[1]; } } return shareObj; } protected _InitSystemInfo() { this.base = this._base; try { this.systemInfo = this._base.getSystemInfoSync(); console.log("系统信息已获取", this.systemInfo); this.safeArea = this.systemInfo.safeArea as PlatformCommonDefine.SafeArea; this._cacheScreenScale = this.systemInfo.screenWidth / screen.windowSize.width; } catch (e) { console.warn(e); console.warn("获取设备信息失败,执行默认初始化"); this.safeArea = null; } } protected _CreateInterstitalAd() { if (!this.platformData.interstitialId) { console.log("无有效的插页广告ID,取消加载"); return; } this._interstitalFailedCount = 0; let intAdObj = {}; intAdObj["adUnitId"] = this.platformData.interstitialId; this._intersitialAd = this._base.createInterstitialAd(intAdObj); if (!this._intersitialAd) return; this._intersitialAd.onLoad(() => { console.log("插页广告加载成功"); this._isInterstitialLoaded = true; }); this._intersitialAd.onError((err) => { this._interstitalFailedCount++; console.warn("插页广告加载失败", err); if (this._interstitalFailedCount > 10) { console.log("第", this._interstitalFailedCount, "次重新加载插页广告"); // 失败自动加载广告 this._intersitialAd.load(); } }); } protected _CreateVideoAd() { console.log('vedio ad id', this.platformData.rewardVideoId) if (!this._cacheVideoAD) { console.log("当前策略为不缓存视频广告"); return; } let createRewardedVideoAd = this._base["createRewardedVideoAd"]; if (createRewardedVideoAd == null) { console.warn("无createRewardedVideoAd方法,跳过初始化"); return; } if (!this.platformData.rewardVideoId) { console.log("无有效的视频广告ID,取消加载"); return; } this._videoFailedCount = 0; let videoObj = {}; videoObj["adUnitId"] = this.platformData.rewardVideoId; this._rewardVideo = createRewardedVideoAd(videoObj); this._rewardVideo.onLoad(() => { console.log("视频广告加载成功"); this._isVideoLoaded = true; }); this._rewardVideo.onError((res) => { this._videoFailedCount++; console.warn("视频广告加载失败", res); if (this._videoFailedCount > 10) { console.log("第", this._videoFailedCount, "次重新加载视频广告"); // 失败自动加载广告 this._rewardVideo.load(); } }); this._rewardVideo.onClose((res) => { console.log("视频回调", res); let isEnd = res["isEnded"] as boolean; if (isEnd) { if (this._rewardSuccessed) this._rewardSuccessed(); } else { if (this._rewardSkipped) this._rewardSkipped(); } }); } protected _CreateBannerAd() { if (!this.platformData.bannerId) { console.log("无有效的banner广告ID,取消加载"); return; } let windowWidth = this._base.getSystemInfoSync().windowWidth; let windowHeight = this._base.getSystemInfoSync().windowHeight; let bannerObj = {}; bannerObj["adUnitId"] = this.platformData.bannerId; // ""; // bannerObj["adUnitId"] = '4gr6k32h08j7j9a72g'; // ""; console.log(' 自己改的 id@@', this.platformData.bannerId); bannerObj["adIntervals"] = 30; let styleObj = {}; styleObj["left"] = 0; styleObj["top"] = 0; styleObj["width"] = 300; bannerObj["style"] = styleObj; this._bannerAd = this._base.createBannerAd(bannerObj); this._isBannerLoaded = false; this._bannerAd.onLoad(() => { console.log("banner加载成功"); this._isBannerLoaded = true; this._bannerAd.style.top = windowHeight - this._bannerAd.style.realHeight; this._bannerAd.style.left = (windowWidth - this._bannerAd.style.realWidth) / 2; }); this._bannerAd.onError((res) => { console.warn("banner广告加载失败", res); }); } IsBannerAvaliable() { return this._isBannerLoaded; } IsVideoAvaliable() { return this._isVideoLoaded; } IsInterstitalAvaliable() { return this._isInterstitialLoaded; } ShowBannerAd() { if (!this.IsBannerAvaliable()) { return; } this._bannerAd.show(); } HideBannerAd() { this._bannerAd.hide(); } protected _DoCacheShowVideo(onSuccess: Function, onSkipped: Function) { if (!this._isVideoLoaded) { console.warn("视频广告尚未加载好"); return; } this._rewardSuccessed = onSuccess; this._rewardSkipped = onSkipped; //this._isVideoLoaded = false; this._rewardVideo.show().then(()=>{ TXSDKMgr.ins.AD_IMPRESSION(1); }); } protected _DoNoCacheShowVideo(onSuccess: Function, onSkipped: Function, loadFail: Function) { this._rewardSuccessed = onSuccess; this._rewardSkipped = onSkipped; this.loadFail = loadFail; if (!this.platformData.rewardVideoId) { console.log("无有效的视频广告ID,取消加载"); onSkipped(); return; } let createRewardedVideoAd = this._base["createRewardedVideoAd"]; if (createRewardedVideoAd == null) { console.warn("无createRewardedVideoAd方法,跳过初始化"); onSkipped(); return; } this._videoFailedCount = 0; let videoObj = {}; videoObj["adUnitId"] = this.platformData.rewardVideoId; // "adunit-5631637236cf16b6"; if (this._rewardVideo) { this._rewardVideo.offClose(this.onVideoClose); } this._rewardVideo = createRewardedVideoAd(videoObj); this._rewardVideo.onLoad(() => { console.log("视频广告加载成功"); this._isVideoLoaded = true; }); this._rewardVideo.onError((res) => { this._videoFailedCount++; console.warn("视频广告加载失败", res, this._videoFailedCount); this.loadFail(); }); this._rewardVideo.onClose((res) => { console.log("视频回调", res); let isEnd = res["isEnded"] as boolean; new Promise((r) => { setTimeout(r,20); //Laya.timer.frameOnce(1, this, r); }).then(() => { if (isEnd) { if (this._rewardSuccessed) this._rewardSuccessed(); } else { if (this._rewardSkipped) this._rewardSkipped(); } }); }); this._rewardVideo.load().then(() => { console.log("激励视频 加载成功"); // 加载成功后 再显示广告 return this._rewardVideo.show().then(() => { TXSDKMgr.ins.AD_IMPRESSION(1); // }).catch((err) => { console.warn(err); });; }); } private onVideoClose(res): any { console.log("视频回调", res); let isEnd = res["isEnded"] as boolean; new Promise((r) => { setTimeout(r,20); //Laya.timer.frameOnce(1, this, r); }).then(() => { if (isEnd) { if (this._rewardSuccessed) this._rewardSuccessed(); } else { if (this._rewardSkipped) this._rewardSkipped(); } }); } ShowRewardVideoAd(onSuccess: Function, onSkipped: Function, loadFail: Function) { if (this._cacheVideoAD) { this._DoCacheShowVideo(onSuccess, onSkipped); } else { this._DoNoCacheShowVideo(onSuccess, onSkipped, loadFail); } } ShowRewardVideoAdAsync(): Promise { return new Promise(function (resolve) { PlatformManagerProxy.instance.PlatformInstance.ShowRewardVideoAd((this, () => { resolve(true); }), (this, () => { resolve(false); }), (this, () => { resolve(false); })); }); } ShowInterstitalAd(callBack:Function) { if (!this._isInterstitialLoaded) { console.warn("插页广告尚未加载好"); return; } this._intersitialAd.show().then(()=>{ // 插屏广告展示成功 callBack && callBack(); }); } GetFromAppId(): string { if (this.lauchOption.referrerInfo == null) { return null; } if (!this.lauchOption.referrerInfo.appId) { return null; } return this.lauchOption.referrerInfo.appId; } GetFeedType(): number { return -1; } /** * 小游戏回到前台的事件 */ protected _OnShow(res: PlatformCommonDefine.LaunchOption) { console.log(PlatformManagerProxy.platformStr, "OnShow", res); PlatformManagerProxy.instance.PlatformInstance.lauchOption = res; PlatformManagerProxy.instance.PlatformInstance._CheckUpdate(); this.NavigateToAppSuccess = null; new Promise((r) => { setTimeout(r,20); // Laya.timer.frameOnce(1, this, r); }).then(() => { if (PlatformManagerProxy.instance.PlatformInstance.onResume) { PlatformManagerProxy.instance.PlatformInstance.onResume(res); } }); } /** * 小游戏退出前台的事件 */ protected _OnHide(res: PlatformCommonDefine.LaunchOption) { console.log(PlatformManagerProxy.platformStr, "OnHide", res); if (PlatformManagerProxy.instance.PlatformInstance.onPause) { PlatformManagerProxy.instance.PlatformInstance.onPause(res); } if (this.NavigateToAppSuccess) { this.NavigateToAppSuccess(); } LocalStorage.CheckSaveServerData(); } ShareAppMessage(shareInfo: ShareInfo, onSuccess: Function, onFailed: Function) { console.log("分享消息", shareInfo); let shareObj = this._WrapShareInfo(shareInfo); this._base.shareAppMessage(shareObj); if (onSuccess) { onSuccess(); } } RecordEvent(eventId: string, param: object) { console.log("记录事件", eventId, param); let aldSendEvent = this._base["aldSendEvent"]; if (aldSendEvent == null) { console.warn("阿拉丁sdk尚未接入,请检查配置"); return; } if (param != null) { aldSendEvent(eventId, param); } else { aldSendEvent(eventId); } } /** * 创建分享视频按钮 * @param x * @param y * @param width * @param height */ public CreateShareVideoBtn(x: number, y: number, width: number, height: number) { let btnObj = {} as any; btnObj.style = { left: x * this._cacheScreenScale, top: y * this._cacheScreenScale, height: height * this._cacheScreenScale, width: width * this._cacheScreenScale }; btnObj.share = { query: { tick: 1 }, bgm: "", timeRange: [0, 60 * 1000] }; if (this._shareVideoBtn == null) { this._shareVideoBtn = this._base.createGameRecorderShareButton(btnObj); } else { this._shareVideoBtn.show(); } } /** * 隐藏分享视频按钮 */ public HideShareVideoBtn() { if (this._shareVideoBtn != null) { this._shareVideoBtn.hide(); } } ShowToast(str: string) { this._base.showToast( { title: str, duration: 2000 } ); } OpenGameBox(appIds: string[]) { console.warn("当前平台", PlatformManagerProxy.platformStr, "暂不支持互推游戏盒子"); } NavigateToAppSuccess: () => void = null; NavigateToApp(appid: string, path?: string, extra?: any, showGC?: boolean, isbanner?: boolean, adid?: number): Promise { return new Promise((resolve, reject) => { if (showGC) { // GlobalUnit.gameManager.GameOver(); } // this.NavigateToAppSuccess = null; window["wx"].navigateToMiniProgram({ appId: appid, path: path, extraData: extra, envVersion: '', success: (res) => { console.log('小游戏跳转成功', res); resolve(true); }, fail: () => { console.log('小游戏跳转失败:'); reject(false); if (showGC) { // } }, complete: () => { } }); }) } createShortcut(BackFun:(isOK:boolean)=>void) { BackFun && BackFun(true) console.log('暂未实现'); } checkShortcut(BackFun:(isOK:boolean)=>void) { BackFun && BackFun(true) console.log('暂未实现'); } requestFeedSubscribe(BackFun:(isOK:boolean)=>void){ BackFun && BackFun(true) console.log('直玩推订阅'); } checkFeedSubscribe(BackFun:(isOK:boolean)=>void){ BackFun && BackFun(true) console.log('检查是否订阅直玩推'); } /**QQ 微信 无法在主域获取到数据 */ GetUserCloudStorage() { } /**设置用户数据 */ SetUserCloudStorage() { } CloseGame() { } get isCanShowRecommend(){ return this.mRecommend.InitComplete; }; showRecommend(callBack: Function) { this.mRecommend.show(callBack); } /**获取用户信息 */ GetUserInfo(value: { success?: Function, fail?: Function, btnStyle?:{ left: number, top: number, width: number, height: number }, }){ this._base.getSetting({ success: (settingResponse) => { if (settingResponse.authSetting["scope.userInfo"] != null) { this._base.getUserInfo({ success: (userInfoResponse) => { const userInfo = userInfoResponse.userInfo; MainConfig.UserInfo.nick_name = userInfo.nickName; MainConfig.UserInfo.avatar_url = userInfo.avatarUrl; value.success && value.success(); }, fail:(err)=>{ ConsoleEx.Error("获取用户信息失败:",err); this.createUserInfoButton(value); value.fail && value.fail(); } }); } else { this.createUserInfoButton(value); value.fail && value.fail(); } }, fail:()=>{ value.fail && value.fail(); } }); } private createUserInfoButton(value: { success?: Function, fail?: Function, btnStyle?:{ left: number, top: number, width: number, height: number }, }) { if (this._userInfoBtn) { this.showUserInfoButton(); } else { const buttonStyle = { left: value.btnStyle.left, top: value.btnStyle.top, width: value.btnStyle.width, height: value.btnStyle.height, backgroundColor: '#ff000000', }; const userInfoButtonConfig = { type: "text", image: " ", text: "", style: buttonStyle, withCredentials: false }; this._userInfoBtn = this._base.createUserInfoButton(userInfoButtonConfig); this.showUserInfoButton(); let self = this; // console.log("create btn") this._userInfoBtn && this._userInfoBtn.onTap(event => { if (event.errMsg.includes(":ok")) { this.removeWXLoginButton(); const userInfo = JSON.parse(event.rawData); MainConfig.UserInfo.nick_name = userInfo.nickName; MainConfig.UserInfo.avatar_url = userInfo.avatarUrl; value.success && value.success(); console.log("用户头像信息", userInfo); } else { self.toastMsg("授权失败", 2000); value.fail && value.fail(); console.log("授权失败==", event); } }); } } showUserInfoButton() { this._userInfoBtn && this._userInfoBtn.show(); } hideUserInfoButton() { this._userInfoBtn && this._userInfoBtn.hide(); } removeWXLoginButton() { this._userInfoBtn && (this._userInfoBtn.destroy(), this._userInfoBtn = null); } toastMsg(title, duration = 1500) { var data: any = {}; data.title = title, data.icon = "none", data.duration = duration, this._base.showToast(data); } // -------------------- 巨量回传 -------------------- getQueryInfo(launchOptions, key: string, ad_paramsUrl: URL) { let value = null; const query = launchOptions?.query; if (query) { value = query[key]; console.log(`${key}:`, value); } let value2 = null; if (ad_paramsUrl) { value2 = ad_paramsUrl.searchParams.get(key); console.log("value2",key,value2) } if (!!value && value != "0") { return value; } else if (ad_paramsUrl) { value = ad_paramsUrl.searchParams.get(key); if (!!value) { return value; } else { return null; } } else { return value; } } oceanengineEvent() { let isNewUser: boolean = false // @ts-ignore const launchOptions = this.base.getLaunchOptionsSync(); console.log("启动参数:", launchOptions); if (launchOptions?.query?.clickid) { this.clickId = launchOptions.query.clickid; console.log("广告 clickid:", this.clickId); } let ad_paramsUrl: URL = null; if (launchOptions.query && launchOptions.query.ad_params) { let str = launchOptions.query.ad_params; try { let ad_params = JSON.parse(decodeURIComponent(str)); if (ad_params.web_url) { ad_paramsUrl = new URL(ad_params.web_url); console.log("ad_paramsUrl", ad_paramsUrl.searchParams) } } catch (e) { console.warn("ad_params parse error:", e); } } let projectId = this.getQueryInfo(launchOptions, "projectId", ad_paramsUrl); if (projectId && projectId != "0") { TDAnalyticsMgr.ins.projectId(`${projectId}`) } let promotionid = this.getQueryInfo(launchOptions, "promotionid", ad_paramsUrl); if (promotionid && promotionid != "0") { TDAnalyticsMgr.ins.promotionid(`${promotionid}`) } let adid = this.getQueryInfo(launchOptions, "adid", ad_paramsUrl); if (adid && adid != "0") { TDAnalyticsMgr.ins.aid(`${adid}`) } let creativeid = this.getQueryInfo(launchOptions, "creativeid", ad_paramsUrl); if (creativeid && creativeid != "0") { TDAnalyticsMgr.ins.cid(`${creativeid}`) } isNewUser = !LocalStorage.getItem("isNewUser") // 抖转微巨量初始化 if (window["ChannelUpload"] && window["ChannelUpload"].default) { ConsoleEx.Log("ChannelUpload抖转微初始化"); window["ChannelUpload"].default.Init(PlatformManager.instance.platData.appId, isNewUser); } if (!isNewUser) { console.log("非新用户,不上报"); return; } if (!this.clickId) { console.log("无 clickid,不上报"); return; } GEAnalyticsMgr.ins.TrySendtrack(GEType.new_player); console.log("上报广告激活事件"); const url = 'https://analytics.oceanengine.com/api/v2/conversion'; const data = { event_type: 'active', context: { ad: { callback: this.clickId, // 广告 clickid } }, timestamp: new Date().getTime() }; console.log("上报数据:", data); // @ts-ignore this._base.request({ url, method: "POST", data: JSON.stringify(data), header: { "Content-Type": "application/json" }, success: (res) => { console.log("广告归因上报成功:", res); }, fail: (err) => { console.error("广告归因上报失败:", err); } }); LocalStorage.setItem("isNewUser",true) this.keepEvent() } // 次留存 public keepEvent() { // 获取激活时间 //@ts-ignore const activationDateStr = LocalStorage.getItem('activationDate') // const clickId = GameManager.getInstance().getClickID(); // 检查是否有激活时间和clickId if (!activationDateStr) { console.log("未找到激活时间,不上报次留存"); return; } // 检查是否已经上报过次留存 //@ts-ignore const hasReportedKeep = LocalStorage.getItem('hasReportedKeep'); if (hasReportedKeep) { console.log("次留存已经上报过,不再上报"); return; } if (!this.clickId) { console.log("无 clickid,不上报次留存"); return; } const activationDate = new Date(activationDateStr); const currentDate = new Date(); // 计算日期差 const activationDay = new Date(activationDate.getFullYear(), activationDate.getMonth(), activationDate.getDate()); const currentDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()); // 计算两个日期之间的天数差 const diffTime = currentDay.getTime() - activationDay.getTime(); const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24)); // 只有当是激活后的第二天(diffDays === 1)才上报次留存 if (diffDays !== 1) { console.log(`不是激活后的第二天(差值: ${diffDays}天),不上报次留存`); return; } console.log("满足次留存条件,准备上报"); const url = 'https://analytics.oceanengine.com/api/v2/conversion'; const data = { event_type: 'next_day_open', context: { ad: { callback: this.clickId, // 广告 clickid } }, timestamp: currentDate.getTime() }; console.log("上报数据:", data); // @ts-ignore this._base.request({ url, method: "POST", data: JSON.stringify(data), header: { "Content-Type": "application/json" }, success: (res) => { console.log("广告归因上报成功:", res); // 标记已上报次留存,避免重复上报 //@ts-ignore LocalStorage.setItem('hasReportedKeep', 'true'); }, fail: (err) => { console.error("广告归因上报失败:", err); } }); } reportScene(sceneID: number){} }