var getParameter = function(t) { var e = window.location.search, i = new RegExp(t + "=([^&?]*)", "ig"); return e.match(i) ? e.match(i)[0].substr(t.length + 1) : null } var PLAT_QUICK = { SHARE_FAIL: 25, SHARE_TIME: 3000, shareCount: {}, getLaunchInfo() { return null; }, getSystemInfo() { return null; }, /** example: * * @param {object} btninfo : * { * width: 100, * height: 100, * name: logo.png * } * @param {function} cb */ getUserInfo(btninfo, cb) { }, destoryAuth() { }, setUserInfo(dstinfo, ptinfo) { dstinfo.nickname = ptinfo.nickName; dstinfo.country = ptinfo.country; dstinfo.province = ptinfo.province; dstinfo.city = ptinfo.city; dstinfo.avatar_url = ptinfo.avatarUrl; dstinfo.sex = ptinfo.gender; }, setTokenInfo(dstinfo, tokeninfo) { if (tokeninfo && tokeninfo.rawData) { dstinfo.rawData = tokeninfo.rawData; dstinfo.signature = tokeninfo.signature; dstinfo.encryptedData = tokeninfo.encryptedData; dstinfo.iv = tokeninfo.iv; } }, init(owner, channelid, appId) { this._owner = owner; this._ptid = channelid; this._platGameId = appId; // productKey this.sdk = window['QuickSDK']; this._productCode = getParameter('productCode'); this._platChannel = getParameter('channelCode'); this.platUid = ''; this.platUserName = ''; }, bindController(ctrl) { this._man = ctrl; }, commonShare(aimg, atitle, stype, param, successcb, failcb, exinfo) { var st = (new Date()).getTime(); let sp = this._owner.makeShareParam(stype, param, exinfo); let uuid = this._owner.currUUID(); let img = aimg; if (!img && this._exshareinfo) { img = this._exshareinfo.imgurl; } let title = atitle; if (!title && this._exshareinfo) { title = this._exshareinfo.title; } this.PTShare(title, img, sp); this._checkShareRes(st, stype, sp, uuid, successcb, failcb); }, captureShare(rc, title, stype, param, successcb, failcb, exinfo) { var st = (new Date()).getTime(); let sp = this._owner.makeShareParam(stype, param, exinfo); let uuid = this._owner.currUUID(); this.PTShareCapture(title, rc, sp); this._checkShareRes(st, stype, sp, uuid, successcb, failcb); }, _checkShareRes(starttime, sharetype, param, tokenid, successcb, failcb) { if (!this._man) { try { failcb && failcb(-100, param, tokenid); } catch (err) { } return; } this._man.scheduleOnce(() => { let dt = (new Date()).getTime() - starttime; console.log(dt); if (this.shareCount[sharetype] == undefined) { this.shareCount[sharetype] = false; } if (this.shareCount[sharetype] == false && Math.random() * 100 > this.SHARE_FAIL) { this.shareCount[sharetype] = true; try { failcb && failcb(-1, param, tokenid, dt); } catch (err) { } return; } if (dt > this.SHARE_TIME) { try { successcb && successcb(param, tokenid, dt); } catch (err) { } } else { try { failcb && failcb(-2, param, tokenid, dt); } catch (err) { } } }, 0.5); }, PTInitShare(normalinfo) { }, PTShare(content, imgurl, param, successcb, failcb) { successcb && successcb(); }, PTShareCapture(content, rc, param, successcb, failcb) { successcb && successcb(); }, PTOpenKF(cb, info) { }, PTCreateGameClubButton(nleft, ntop, nwidth) { }, /** * @param {string} str 显示的文字 * @param {icon} icon 图标类型 默认'none'; * success: 显示成功图标 * loading: 显示加载图标 * none: 不显示图标,此时 title 文本最多可显示两行 * */ PTShowToast(str, icon) { }, PTGotoApp(appid, apppath, exobj, cb, qdid, env, acontent) { }, PTLogin(info, successcb, failcb) { var self = this; if (info.productCode) { this._productCode = info.productCode; } this.sdk.init(this._productCode,this._platGameId,true,function(){ console.log("quick sdk init success"); self.sdk.setSwitchAccountNotification(function(logoutObject) { console.log('QuickSDK change account'); if (self.platUid) { self.reloadGame(); } }); self.sdk.setLogoutNotification(function(logoutObject){ console.log('QuickSDK:玩家点击注销帐号'); if (self.platUid) { self.reloadGame(); } }) self.sdk.login(function(callbackData){ if(callbackData.status){ console.log('QuickSDK登录成功: uid=>' + JSON.stringify(callbackData.data)); /** * callbackData.data 结构: * uid 渠道uid * username 渠道username * token token 游戏服务器需通过v2/checkUserInfo接口(参见服务器接口文档)验证token和UID的正确性 * isLogin 是否游客,登录后此值为true * channelId 渠道ID * message status为false时,此字段为Failed表示登录失败,为cancel表示玩家取消登录 * */ let data = callbackData.data; if (self.platUid && self.platUid !== data.uid) { self.reloadGame(); } self.platUid = data.uid; self.platUserName = data.username; let loginData = { openid: data.uid, token: data.token, polySdkSubchannel: self._platChannel, successcb, failcb }; if (info) { loginData.polySdkChannel = info.channelId; } if (data.channelId) { loginData.polySdkSubchannel = data.channelId; } self._owner.login.login(loginData); }else{ console.log('QuickSDK登录失败:' + callbackData.message); failcb && failcb(callbackData.message); } }); }) }, PTSetClipboardData: function (content, successcb, failcb) { }, PTGetClipboardData: function (successcb, failcb) { }, PTPreviewImage(imgurl, successcb, failcb) { }, //广告相关 PTInitADService() { }, PTCreateBannerAD(adid, st) { return null; }, PTCreateVideoAD(adid) { return null; }, PTCreateInsertAD(adid) { return null; }, PTSetVideoADCallback(adobj, adowner, cb) { }, PTVibrateShort(successcb, failcb) { }, PTVibrateLong(successcb, failcb) { }, /** * @return {null} */ PTOpenDataContext() { return null; }, PTPostOpenMsg(msg) { }, // 排行榜相关 saveRankData(nscore, nmoney, stitle) { }, showRankData() { }, hideRankData() { }, prevRankPage() { }, nextRankPage() { }, PTADWatch(adid, successcb, failcb) { }, setLocalStorage(key, value) { if (window.localStorage) { localStorage.setItem(key, value); } }, getLocalStorage(key) { if (window.localStorage) { return localStorage.getItem(key); } else { return null; } }, removeStorage(key) { if (window.localStorage) { localStorage.removeItem(key); } }, /** * 上报角色信息 * */ reportRoleInfo(data) { Object.assign(data, { uid: this.platUid, username: this.platUserName, }) return new Promise((resolve, reject) => { this.sdk.uploadGameRoleInfo(JSON.stringify(data), function (res) { console.log('[quick] report role info: ', JSON.stringify(res)); resolve(res); }) }); }, /** * 重新加载游戏 */ reloadGame() { if (location.reload) location.reload(true); } }; module.exports = PLAT_QUICK;