/** * 变态版h5版本 sdk配置 * 微信内跳转入口是 在main.js的最上面 window.__zero__ = { "packageID": "1101", } 在main.js的onStart加上 cc.assetManager.downloader.appendTimeStamp = true 开启资源时间戳(暂时不需要,影响玩家体验) 解决网页白边的问题 放在html的body里 //解决网页缓存的问题(暂时的) var getQuery2 = function (name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]); return null; } var main = function () { var _time = parseInt(getQuery2("time") || "0"); var _curTime = new Date().getTime(); if (!_time) { window.location.replace('https://cdnjyxy.happilygame.com/webMobile/index.html?time=' + _curTime);//注意要换对应的专服链接 return; } } main(); 引入SDK:在html中添加一个script标签就可以了 */ import Mint from "../utils/mintFilter/index"; import Gamecfg from "../common/gameCfg"; import { gameMethod } from "../common/gameMethod"; import { PlayerLogin, PlayerLoginPram } from "../common/Xyc"; import { SevBack } from "../common/Xys"; import Config from "../Config"; import { LoadEvent } from "../data/const/EventConst"; import { GameErrCode, PayProductParam, ReportRoleType, PlatFormDevType } from "../data/const/TypeConst"; import GameDataCenter from "../data/GameDataCenter"; import GameController from "../GameController"; import UIHelp from "../logic/ui/UIHelp"; import EventMng from "../manager/EventMng"; import PlatformBase from "./PlatformBase"; import HttpRequest from "../network/HttpRequest"; export default class PlatformQuickH5 extends PlatformBase { isGoPay: boolean mint: Mint; username: "" channelId: string constructor() { super() cc.game.on(cc.game.EVENT_SHOW, () => { if (this.isGoPay) { this.isGoPay = false if (Config.paySuccAdokId != null) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null } Config.paySuccAdokIndex = 0 Config.paySuccAdokId = setInterval(() => { Config.paySuccAdokIndex++ if (Config.paySuccAdokIndex >= 5) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null } GameDataCenter.time.sendAdok() }, 1000) } GameDataCenter.audio.resumeMusic(); }) cc.game.on(cc.game.EVENT_HIDE, () => { GameDataCenter.audio.pauseMusic(); }) QuickSDK.setSwitchAccountNotification(function (callbackData) { console.log("SwitchAccount data=>", JSON.stringify(callbackData)) GameController.clear() cc.game.restart() }); QuickSDK.setLogoutNotification(() => { GameController.clear() cc.game.restart() }) } showLoginView(): void { console.log("初始化&登录SDK") EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.25, "login") try { let localStorage = cc.sys.localStorage.getItem(`model_login`); let localData = {}; if (!gameMethod.isEmpty(localStorage)) { localData = JSON.parse(localStorage); } let policyAgree = localData["policy_agree"]; if (!gameMethod.isEmpty(policyAgree) && policyAgree == "1") { this.SdkInitLogin(); } else { QuickSDK.showPrivace((retMsg: any) => { console.log("privace data=>", JSON.stringify(retMsg)) if (retMsg?.status) { this.SdkInitLogin(); } else { QuickSDK.callExtFunction("exit", {}); } }) } } catch (error) { UIHelp.ShowTips("----" + error) } } SdkInitLogin() { let packageInfo = Gamecfg.packageInfo.getItem(Config.pid) var productCode = packageInfo.params[0]; //QuickSDK后台自动分配 var productKey = packageInfo.params[1]; //QuickSDK后台自动分配 let isNative = false this.isMiniClient();//设置登录平台 QuickSDK.init(productCode, productKey, isNative, () => { console.log("初始化成功") setTimeout(() => { QuickSDK.login((result: any) => { console.log("login data=", JSON.stringify(result)) // EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result)) if (result.status) { let data = result.data this.username = data.username this.channelId = data.channelId.toString() EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.75, "login") let params: PlayerLoginPram = { pid: Config.pid, param: [data.uid, data.token, data.channelId] } setTimeout(() => { GameController.network.send(PlayerLogin.url, params, (result: SevBack) => { console.log("后段验证返回") if (result.type != 1) { if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) { GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin) } return } EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "login") if (result.type == 1 && result.platBack) { this.openId = result.platBack.openid this.loginParams = [result.platBack.token] console.log("后端验证成功", this.openId) this.login() } else { console.log("PlayerLogin.url 返回数据异常") if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) { GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin) } } }) }, 1000) } else { UIHelp.ShowTips("登录失败") } }) }, 1000) }) } pay(orderId: string, order10cs: string, param: PayProductParam): void { let packageInfo = Gamecfg.packageInfo.getItem(Config.pid) var productCode = packageInfo.params[0]; //QuickSDK后台自动分配 let serverName = GameDataCenter.user.getServerNameBySid(GameDataCenter.sevBack?.userInfo?.a?.sid) || GameDataCenter.sevBack.userInfo.a.sid; let orderInfo = { productCode: productCode, uid: GameDataCenter.plat.instance.openId, username: this.username, userRoleId: GameDataCenter.sevBack.userInfo.a.uuid, userRoleName: GameDataCenter.sevBack.userInfo.a.name, serverId: parseInt(GameDataCenter.sevBack.userInfo.a.sid), userServer: serverName, userLevel: GameDataCenter.sevBack.userInfo.a.level, cpOrderNo: orderId, amount: param.price, subject: param.productName, desc: param.productName,//param.productDesc, callbackUrl: '', extrasParams: order10cs, goodsId: param.productId, count: 1, quantifier: '个', } var orderInfoJson = JSON.stringify(orderInfo); this.isGoPay = true QuickSDK.pay(orderInfoJson, (payStatusObject: any) => { console.log("创建订单成功:", JSON.stringify(payStatusObject)) this.isGoPay = false if (Config.paySuccAdokId != null) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null } Config.paySuccAdokIndex = 0 Config.paySuccAdokId = setInterval(() => { Config.paySuccAdokIndex++ if (Config.paySuccAdokIndex >= 5) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null } GameDataCenter.time.sendAdok() }, 1000) }) this.dealYanChi(); } // 充值延迟到账,前端只能循环处理 dealYanChi() { if (Config.paySuccAdokId != null) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null } Config.paySuccAdokIndex = 0 Config.paySuccAdokId = setInterval(() => { Config.paySuccAdokIndex++ if (Config.paySuccAdokIndex >= 15) { clearInterval(Config.paySuccAdokId) Config.paySuccAdokId = null this.isGoPay = false } GameDataCenter.time.sendAdok() }, 1000) } // 上报角色数据 reportRole(event: ReportRoleType): void { // • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤. if (GameDataCenter.sevBack == null) { return } if (GameDataCenter.sevBack.userInfo == null) { return } console.log("上报角色数据:", event) let onlineTime = 0 if (GameDataCenter.time.onlineTime > 0) { onlineTime = GameDataCenter.time.sevTime - GameDataCenter.time.onlineTime } let isCreateRole = false let level = GameDataCenter.sevBack.userInfo.a.level switch (event) { case ReportRoleType.create: isCreateRole = true break; case ReportRoleType.levelup: break; case ReportRoleType.offline: break; case ReportRoleType.online: break; case ReportRoleType.other: break; default: break; } let power = GameDataCenter.sevBack.userInfo.a.power; let serverName = GameDataCenter.user.getServerNameBySid(GameDataCenter.sevBack.userInfo.a.sid) || GameDataCenter.sevBack.userInfo.a.sid; if (this.channelId == "4804" || this.channelId == "4771") { //专服1-混A上报角色需要加密 let roleInfo6 = { uid: GameDataCenter.plat.instance.openId, username: this.username, serverId: GameDataCenter.sevBack.userInfo.a.sid, serverName: serverName, userRoleId: GameDataCenter.sevBack.userInfo.a.uuid, userRoleName: GameDataCenter.sevBack.userInfo.a.name, userRoleLevel: level, vipLevel: 0, gameRolePower: power, channel_role_sign: "", isCreateRole: isCreateRole, roleCreateTime: GameDataCenter.sevBack.userInfo.a.regtime, userRoleBalance: 0, partyId: 0, partyName: '无', }; let verifyStr = "uid=" + roleInfo6.uid + "&username=" + roleInfo6.username + "&serverId=" + roleInfo6.serverId + "&serverName=" + roleInfo6.serverName + "&userRoleId=" + roleInfo6.userRoleId + "&userRoleName=" + roleInfo6.userRoleName + "&userRoleLevel=" + roleInfo6.userRoleLevel + "&vipLevel=" + roleInfo6.vipLevel + "&gameRolePower=" + roleInfo6.gameRolePower + "&key=" // console.log("verifyStr:",verifyStr) let url = Gamecfg.packageInfo.getItem(Config.pid).wayhttp + "player/sbVerify" HttpRequest.POST(url, {}, { str: verifyStr }, (result: any) => { console.log("player/sbVerify=>", result) roleInfo6.channel_role_sign = result.sign var roleInfoJson6 = JSON.stringify(roleInfo6); // set_userinfo 设置⻆⾊基本信息,如头像、昵称 QuickSDK.uploadGameRoleInfo(roleInfoJson6, () => { }) }) } else { let roleInfo = { isCreateRole: isCreateRole, roleCreateTime: GameDataCenter.sevBack.userInfo.a.regtime, uid: GameDataCenter.plat.instance.openId, username: this.username, serverId: GameDataCenter.sevBack.userInfo.a.sid, serverName: serverName, userRoleName: GameDataCenter.sevBack.userInfo.a.name, userRoleId: GameDataCenter.sevBack.userInfo.a.uuid, userRoleBalance: 0, vipLevel: 1, userRoleLevel: level, gameRolePower: power, partyId: 0, partyName: '无', }; var roleInfoJson = JSON.stringify(roleInfo); // set_userinfo 设置⻆⾊基本信息,如头像、昵称 QuickSDK.uploadGameRoleInfo(roleInfoJson, () => { }) } } checkMsg(str: string, cb: Function): void { cb() } restart(force?: boolean) { QuickSDK.logout(() => { }) } openUrl(url: string) { QuickSDK.callUrl(url); } /** * 是否微端 */ isMiniClient() { //UA: Mozilla/5.0 (iPhone; CPU iPhone OS 17_6_1 like MacoS X) AppleWebKit/605.1.15(KHTML, like Gecko)Mobile/15E148 // Mozilla/5.0 (iPhone; CPU iPhone 0S 17_6_1 like Mac OS X)AppleWebKit/605.1.15(KHTML, like Gecko) obile/15E148 color:gray".match(/\(i[^;]+;( U;)?CPU.+Mac OS X let u = navigator.userAgent; let isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; if (isAndroid) { GameDataCenter.plat.instance.deviceOS = PlatFormDevType.androidH5 } let isIos = u.indexOf("iPhone") > -1 && u.indexOf("Safari") == -1; if (isIos) { GameDataCenter.plat.instance.deviceOS = PlatFormDevType.iosH5 } if (cc.sys.os == cc.sys.OS_IOS) { GameDataCenter.plat.instance.deviceOS = PlatFormDevType.iosH5 } return isAndroid || isIos; } }