import JsbSystem from "../../mk/system/JsbSystem"; import { DataEventId } from "./GameData"; import { StorageKey } from "./StorageData"; /** * @description 登录数据 * @author 邹勇 */ export class LoginData { public loadResCompelete: boolean = false; /** 是否登录 */ public isLogin: boolean = false; public sessionKey: string = ''; public randomKey: string = "abcdefghijklopqrstuvwxyzabcdefgh"; /** 玩家唯一id */ public uin: string = ''; /** 玩家临时id */ public tempUin: string = ''; public loginTicket: string = ''; public isFirstIn: boolean = false; public isNew: boolean; /** 是否授权 */ public isAuth: boolean; /** 服务协议 */ public rule_data: string[]; /** 隐私协议 */ public privacy_data: string[]; /** 身份认证开关 */ public popIdentifySwitch: string[] = []; /** 身份认证通过 */ public passAnti = false; public passPrivacy = false; public userChannel = 1; public isMatched = 1; public toponStr = ''; public curTime = 0; /** * 初始化本地配置 * @returns */ public async loadLocalRes() { let result = await mk.loader.load("data/rule_data", cc.JsonAsset); if (result && result.json) { this.rule_data = result.json.server; this.privacy_data = result.json.privacy; this.loadResCompelete = true; } } /** * 初始化 */ public init() { let uin = mk.storage.getStorage(StorageKey.uin); this.uin = uin ? uin : ""; let sessionKey = mk.storage.getStorage(StorageKey.sessionKey); this.sessionKey = sessionKey ? sessionKey : ""; let loginTicket = mk.storage.getStorage(StorageKey.loginTicket); this.loginTicket = loginTicket ? loginTicket : ""; // console.log(`===[LoginData] uin =${uin} sessionKey = ${sessionKey}"`); } /** * 登录流程 * @description initApp-->initAd-->connect-->wxLogin-->checkLogin-->getAccountInfo */ public async login() { mk.console.logSingle("login...", this.sessionKey + "..." + this.uin); //有登录记录直接跳转到登录流程最后一步 if (this.sessionKey != '' && this.uin != '' && this.loginTicket != '') { console.log("=== login 有登录记录直接跳转到登录流程最后一步"); // this.getAccountInfo(); this.checkLogin(); } else { console.log("=== login 无登录记录"); this.connect(); } } /** * 链接 * @description 获取临时的uin */ private async connect() { //connect this.randomKey = mk.encrypt.randomString(); let data: any = { "mac": gData.appData.mac, "psk": this.randomKey, "appId": gData.appData.appId } console.log('==mac ', gData.appData.mac); let response = await mk.http.sendRequest('connectTest', 'POST', JSON.stringify(data)); if (response.errcode != 0) { return; } data = mk.encrypt.decrypt(response.encrypt, this.randomKey, gData.appData.appId); mk.console.logSingle("[FC]connectTest decryptData", data); this.tempUin = JSON.parse(data).tmp_uin; mk.storage.setStorage(StorageKey.uin, this.tempUin); this.wxLogin(); } public async wxLogin() { //wxLogin let clientType = 3 if (cc.sys.os == cc.sys.OS_ANDROID) { clientType = 1 } else if (cc.sys.os == cc.sys.OS_IOS) { clientType = 2 } let aa = { "code": gData.wechatData.code, "clientType": clientType, "deviceToken": mk.aliRiskManager.deviceToken, "appVersion": gData.appData.appVersion, "tfChannel": gData.appData.tfChannel, "android_id": gData.appData.machineInfo.android_id, "versioncfg": gData.appData.version, "idfa": gData.appData.machineInfo.idfa, "imei": gData.appData.machineInfo.imei, "mac": gData.appData.machineInfo.mac, "oaid": gData.appData.machineInfo.oaid, "szlm_did": mk.shuzilmM.szlm_did, "black_box": mk.tongdunM.tdEquipID, "inviteUin": '' } // mk.console.logSingle('wxlogin aa >> ', aa); // console.log('wxLogin code ', aa.code) // console.log('wxLogin clientType ', aa.clientType) // console.log('wxLogin deviceToken ', aa.deviceToken) // console.log('wxLogin appVersion ', aa.appVersion) // console.log('wxLogin tfChannel ', aa.tfChannel) // console.log('wxLogin android_id ', aa.android_id) // console.log('wxLogin versioncfg ', aa.versioncfg) // console.log('wxLogin idfa ', aa.idfa) // console.log('wxLogin imei ', aa.imei) // console.log('wxLogin mac ', aa.mac) // console.log('wxLogin oaid ', aa.oaid) let data; let encode; if (gData.wechatData.code != null) { //微信登录 encode = mk.encrypt.encrypt(JSON.stringify(aa), this.sessionKey, gData.appData.appId); data = { "uin": this.uin, "encrypt": encode }; } else { //游客登录 encode = mk.encrypt.encrypt(JSON.stringify(aa), this.randomKey, gData.appData.appId); data = { "uin": this.tempUin, "encrypt": encode }; } let response = await mk.http.sendRequest('wxlogin', 'POST', JSON.stringify(data), false, false); if (response.errcode != 0) { if (response.errcode == 41003) { mk.storage.setStorage("alifengkong", 1); console.log('==== ali block') } else if (response.errcode == 41004) { mk.storage.setStorage("alifengkong", 2); console.log('==== shuzilm set block') } else if (response.errcode == 41005) { mk.storage.setStorage("alifengkong", 3); console.log('==== tongdun set block') } else if (response.errcode == -10003 || response.errcode == -20003) { //清除缓存 console.log('restart errcode ', response.errcode) this.reload(); }else if (response.errcode == 403) { console.log('block 403'); gData.warnTipData.setSolution(4); } return; } if (gData.wechatData.code != null) { data = mk.encrypt.decrypt(response.encrypt, this.sessionKey, gData.appData.appId); } else { data = mk.encrypt.decrypt(response.encrypt, this.randomKey, gData.appData.appId); } data = JSON.parse(data); this.loginTicket = data.login_ticket; mk.console.logSingle("[FC]wxLogin decrypt", data); mk.storage.setStorage(StorageKey.loginTicket, this.loginTicket); let isFirstIn = mk.storage.getStorage(StorageKey.isFirstIn); if (isFirstIn == null) { this.isFirstIn = true; mk.storage.setStorage(StorageKey.isFirstIn, 1); } if (this.uin != data.uin) { this.uin = data.uin; this.isNew = false; } else { this.isNew = true; } mk.storage.setStorage(StorageKey.uin, this.uin); this.checkLogin(); } /** * 检测登录 * @returns */ private async checkLogin() { //checkLogin let tmp_key = ''; if (gData.wechatData.code != null) { tmp_key = this.sessionKey; } else { tmp_key = mk.encrypt.randomString(); } let data = { "tmp_key": tmp_key, "uin": this.uin, "login_ticket": this.loginTicket, "appId": gData.appData.appId } let response = await mk.http.sendRequest('checklogin', 'POST', JSON.stringify(data)); if (response.errcode != 0) { if (response.errcode == 403) { console.log('block 403'); gData.warnTipData.setSolution(4); } return; } let decryptData; if (gData.wechatData.code != null) { decryptData = mk.encrypt.decrypt(response.encrypt, this.sessionKey, gData.appData.appId); } else { decryptData = mk.encrypt.decrypt(response.encrypt, tmp_key, gData.appData.appId); } let parseData = JSON.parse(decryptData); this.sessionKey = parseData.session_key; mk.console.logSingle("[FC]checkLogin decrypt", parseData); console.log("this.sessionKey ", this.sessionKey); mk.storage.setStorage(StorageKey.sessionKey, this.sessionKey); if (gData.wechatData.code != null) { if (this.isNew) { console.log('KKKK 1 ', this.uin) this.getUserInfo(); } else { console.log('KKKK 2 ', this.uin) this.isNew = false; gData.wechatData.code = null; cc.audioEngine.stopAll(); //调用Android的更好 cc.game.restart(); } } else { console.log('KKKK 3 ', this.uin) this.getUserInfo(); } } private async getUserInfo() { this.getAccountInfo(); } private async getAccountInfo() { console.log('uin ', gData.loginData.uin) //更新设备信息 mk.console.logSingle("machineInfo", gData.appData.machineInfo); await mk.http.sendData('user/machine', gData.appData.machineInfo); //上传appVersion let data1 = { 'version': gData.appData.appVersion }; mk.http.sendData('updateVersion', data1); //获取user let aa = { "uin": this.uin, "login_ticket": this.loginTicket, "szlm_did": mk.shuzilmM.szlm_did, "black_box": mk.tongdunM.tdEquipID, "mac": gData.appData.machineInfo.mac, "appVersion": gData.appData.appVersion }; let data = { "uin": this.uin, "encrypt": mk.encrypt.encrypt(JSON.stringify(aa), this.sessionKey, gData.appData.appId) }; let response = await mk.http.sendRequest('user', 'POST', JSON.stringify(data), false, false); if (response.errcode != 0) { if (response.errcode == 41003) { mk.storage.setStorage("alifengkong", 1); console.log('==== ali block') } else if (response.errcode == 41004) { mk.storage.setStorage("alifengkong", 2); console.log('==== shuzilm set block') } else if (response.errcode == 41005) { mk.storage.setStorage("alifengkong", 3); console.log('==== tongdun set block') } else if (response.errcode == -10003 || response.errcode == -20003) { //清除缓存 console.log('AA restart errcode ', response.errcode) this.reload(); } return; } response = mk.http.checkData(response, true); let resData = response.data; mk.console.logSingle("getAccountInfo user", resData); this.isAuth = resData.is_auth; gData.wechatData.unionid = this.uin; if (this.isAuth) { gData.wechatData.nickName = resData.nickname; gData.wechatData.avatar = resData.headimgurl; gData.gameData.init_head = true; mk.storage.setStorage(StorageKey.isAuth, 1); mk.storage.setStorage(StorageKey.nickname, gData.wechatData.nickName, false); mk.storage.setStorage(StorageKey.avatar, gData.wechatData.avatar, false); } //获取游戏数据 gData.gameData.init(); } public async getUserChannel(isDoIdentify = true) { let data = {}; let response = await mk.http.sendData('user/income-strategy', data); mk.console.logSingle('getUserChannel=>', response); if (response.errcode != 0) { if (isDoIdentify) { this.passAnti = true; } return; } let index = response.data.tfChannel; this.isMatched = response.data.isMatched; this.toponStr = response.data.strategyContent; //初始化topon mk.ad.init(); console.log(`userChannel=========${index}`); console.log(`isMatched=========${this.isMatched}`); console.log(`toponStr=========${this.toponStr}`); mk.data.setTAEventUserStr(0, 'kncdsf_zhubao_qudaopipei', `${index}_${this.isMatched}`); if (isDoIdentify) { switch (index) { case 1: this.userChannel = 0; break; case 24: this.userChannel = 1; break; case 4: this.userChannel = 2; break; case 5: this.userChannel = 3; break; default: this.userChannel = 2; break; } let str = this.popIdentifySwitch[this.userChannel].split(","); if (str[1 - this.isMatched] == "1") { JsbSystem.ysdkInit(); JsbSystem.autologin(); mk.data.sendDataEvent(DataEventId.realName, `实名认证验证人数`); } else { this.passAnti = true; } } } /** * 本地数据不是本账户的 清空数据 重新登录游戏 */ public reload() { setTimeout(() => { this.sessionKey = ''; this.uin = ''; this.loginTicket = ''; this.isAuth = false; this.tempUin = ''; this.randomKey = ''; gData.wechatData.nickName = ''; gData.wechatData.avatar = ''; cc.sys.localStorage.removeItem(StorageKey.sessionKey); cc.sys.localStorage.removeItem(StorageKey.uin); cc.sys.localStorage.removeItem(StorageKey.loginTicket); cc.sys.localStorage.removeItem(StorageKey.isAuth); cc.sys.localStorage.removeItem(StorageKey.nickname); cc.sys.localStorage.removeItem(StorageKey.avatar); cc.audioEngine.stopAll(); //调用Android的更好 cc.game.restart(); }, 500) } }