// Learn cc.Class: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/class.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/class.html // Learn Attribute: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/life-cycle-callbacks.html var PLAT_WX = { SHARE_FAIL: 25, SHARE_TIME: 3000, shareCount: {}, getLaunchInfo(){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ return wx.getLaunchOptionsSync(); } return null; }, getSystemInfo(){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ return wx.getSystemInfoSync(); } return null; }, /** example: * * @param {object} btninfo : * { * width: 100, * height: 100, * name: logo.png * } * @param {function} cb */ getUserInfo(btninfo, cb){ console.log('cc.sys.platform:' + cc.sys.platform); if(cc.sys.platform != cc.sys.WECHAT_GAME){ cb && cb(null, -1000); return; } this._usercb = cb; let _flag = 0; if(btninfo && btninfo.flag){ _flag = btninfo.flag; } let self = this; let getInfo = function() { console.log('[wx.getUserInfo]'); wx.getUserInfo({ withCredentials: true, lang: 'zh_CN', success: function(res) { res.flag = _flag; self._usercb && self._usercb(res, 1); }, fail:function(res){ res.flag = _flag; console.log(res); self._usercb && self._usercb(res, -1, null, _flag); } }) } if(wx.createUserInfoButton){ wx.getSetting({ success: (res) => { if (!res.authSetting["scope.userInfo"]) { var sysInfo = wx.getSystemInfoSync(); var sz = { width: cc.winSize.width, height: cc.winSize.height }; // var sz = cc.winSize; let drw = self._dr? self._dr.width: 480; let drh = self._dr? self._dr.height: 960; sz.width = sysInfo.screenWidth;//sysInfo.screenHeight / 2; sz.height = sysInfo.screenHeight; var realw = btninfo.width / drw * sz.width; var realh = btninfo.height / drh * sz.height; //var realx = sz.width / 2 + btnPos.x / 480 * sz.width - realw / 2; //var realy = sz.height / 2 - btnPos.y / 960 * sz.height - realh / 2; var realx = btninfo.x / drw * sz.width - realw / 2; var realy = sz.height - btninfo.y / drh * sz.height - realh / 2; var windowW = sysInfo.windowWidth; var windowH = sysInfo.windowHeight; var btnwidth = btninfo.width;//102*1.4; var btnheight = btninfo.height;//36*1.4; console.log('[wx.createUserInfoButton]'); console.log(sysInfo); console.log(btninfo); let stype = btninfo.name? 'image': 'text'; if(!this.btnAuthorize){ this.btnAuthorize = wx.createUserInfoButton({ type: stype, text: '', image: btninfo.name, style: { left: realx, top: realy, width: realw, height: realh, }, withCredentials: true, lang: "zh_CN" }); this.btnAuthorize.onTap((uinfo) => { if (uinfo.userInfo) { uinfo.flag = _flag; this._usercb && this._usercb(uinfo, 1); this.destoryAuth(); }else { // wx.showToast({title:"授权失败"}); this._usercb && this._usercb(null, -10, null, _flag); } }); } this._usercb && this._usercb(null, 0, this.btnAuthorize, _flag); } else{ console.log("authSetting success"); getInfo(); } }, fail: () => { console.error("getSetting fail"); this._usercb && this._usercb(null, -100, null, _flag); } }); }else{ console.log('wx.createUserInfoButton is null'); getInfo(); } }, destoryAuth(){ if(this.btnAuthorize){ this.btnAuthorize.destroy && this.btnAuthorize.destroy(); this.btnAuthorize = null; } }, 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){ this._owner = owner; this._ptid = channelid; // this.loadInfo(); if(cc.sys.platform == cc.sys.WECHAT_GAME){ wx.showShareMenu({ withShareTicket: true }); wx.updateShareMenu({ withShareTicket: true }); let self = this; let _onShow = function(res){ console.log('[wx.onShow]', res.query); self._owner.gameShow(res); self._man && self._man.onPlatShow && self._man.onPlatShow(res); if(self._jumpnow){ self._jumpnow = false; self._jumpobj.result = 2; self._jumpobj.finishTime = new Date().getTime(); self._owner.event.emit(self._owner.event.Events.GOTO_APP_RESULT, self._jumpobj); self._jumpobj = null; } }; try{ wx.offShow(_onShow); }catch(err){ } wx.onShow(_onShow); let _onHide = function(){ console.log('[wx.onHide]'); self._owner.gameHide(); self._man && self._man.onPlatHide && self._man.onPlatHide(); }; try{ wx.offHide(_onHide); }catch(err){ } wx.onHide(_onHide); wx.onAudioInterruptionBegin((res)=>{ console.log('wx.onAudioInterruptionBegin'); self._owner.event.emit(self._owner.event.Events.AUDIO_INTERRUPT_BEGIN, res); }); wx.onAudioInterruptionEnd((res)=>{ console.log('wx.onAudioInterruptionEnd'); self._owner.event.emit(self._owner.event.Events.AUDIO_INTERRUPT_END, res); }); } }, bindController(ctrl){ this._man = ctrl; let nd = cc.find('Canvas'); if(nd){ let cv = nd.getComponent(cc.Canvas); if(cv){ this._dr = cv.designResolution; } } }, 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(); var sz = cc.winSize; let drw = this._dr? this._dr.width: 480; let drh = this._dr? this._dr.height: 960; var dtx = (sz.width - drw) / 2; var dty = (sz.height - drh) / 2; let realc = rc; realc.x = (rc.x + dtx) / sz.width * canvas.width; realc.width = rc.width / sz.width * canvas.width; realc.y = (rc.y + dty) / sz.height * canvas.height; realc.height = rc.height / sz.height * canvas.height; if(realc.x < 0){ realc.x = 0; } if(realc.y < 0){ realc.y = 0; } this.PTShareCapture(title, realc, 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){ if(!normalinfo){ return; } if(!this._exshareinfo){ this._exshareinfo = normalinfo; }else{ if(normalinfo.title && this._exshareinfo.title != normalinfo.title){ this._exshareinfo.title = normalinfo.title; } if(normalinfo.imgurl && this._exshareinfo.imgurl != normalinfo.imgurl){ this._exshareinfo.imgurl = normalinfo.imgurl; } } if(cc.sys.platform == cc.sys.WECHAT_GAME){ wx.showShareMenu({ withShareTicket: true, success: function (data) { console.log(data); }, fail: function (data) { console.log(data); } }); wx.updateShareMenu({ withShareTicket: true, success: function (data) { console.log(data); }, fail: function (data) { console.log(data); } }); if(wx.aldOnShareAppMessage){ wx.aldOnShareAppMessage(() => { return { title : this._exshareinfo.title, imageUrl : this._exshareinfo.imgurl, query : "fromid=" + this._owner.accountID + "&fromname=" + this._owner.nickName, } }); }else{ wx.onShareAppMessage(() => { return { title : this._exshareinfo.title, imageUrl : this._exshareinfo.imgurl, query : "fromid=" + this._owner.accountID + "&fromname=" + this._owner.nickName, } }); } } }, PTShare(content, imgurl, param, successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ if(wx.aldShareAppMessage){ wx.aldShareAppMessage({ title: content, imageUrl: imgurl, query: param }); }else{ wx.shareAppMessage({ title: content, imageUrl: imgurl, query: param }); } successcb && successcb(); }else{ failcb && failcb(-1000); } }, PTShareCapture(content, rc, param, successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ let surl = canvas.toTempFilePathSync({ x: rc.x, y: rc.y, width: rc.width, height: rc.height, destWidth: 500, destHeight: 400, }); if(wx.aldShareAppMessage){ wx.aldShareAppMessage({ title: content, imageUrl: surl, query: param }); }else{ wx.shareAppMessage({ title: content, imageUrl: surl, query: param }); } successcb && successcb(); }else{ failcb && failcb(-1000); } }, PTOpenKF(cb,info){ if (cc.sys.platform == cc.sys.WECHAT_GAME) { if(wx && wx.openCustomerServiceConversation){ let self = this; let obj = { // sessionFrom: '烧味蹦蹦蹦', showMessageCard: info.showCard, sendMessageTitle: info.title, sendMessagePath: '', sendMessageImg: info.img, success:function(res){ console.log('[wx.openCustomerServiceConversation]success'); console.log(res); cb && cb(true); if(self._man && self._man.onKFOpened){ self._man.onKFOpened(); } }, fail:function(res){ console.log('[wx.openCustomerServiceConversation]fail'); console.log(res); cb && cb(false); } } wx.openCustomerServiceConversation(obj); } }else{ cb && cb(false); } }, PTCreateGameClubButton(nleft, ntop, nwidth){ if (cc.sys.platform == cc.sys.WECHAT_GAME && wx.createGameClubButton) { let btn = wx.createGameClubButton({ icon: 'light', style: { left: nleft, top: ntop, width: nwidth, height: nwidth } }); if(btn){ btn.onTap((res)=>{ console.log(res); }); } return btn; } }, /** * @param {string} str 显示的文字 * @param {icon} icon 图标类型 默认'none'; * success: 显示成功图标 * loading: 显示加载图标 * none: 不显示图标,此时 title 文本最多可显示两行 * */ PTShowToast(str, icon){ if (cc.sys.platform === cc.sys.WECHAT_GAME) { wx.showToast({title: str, icon: icon || 'none'}); } }, PTGotoApp(appid, apppath, exobj, cb, qdid, env, acontent){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ let starttm = new Date().getTime(); let self = this; let envstr = env? env: 'release'; let obj = { appId: appid, path: apppath, extraData: exobj, envVersion: envstr, success: function(res){ let endtm = new Date().getTime(); self._owner.gamelog.logJumpApp(appid, apppath, 1, qdid); cb && cb(1, res, starttm, endtm); let resobj = { result: 1, startTime: starttm, endTime: endtm, }; (typeof(acontent) == 'object') && Object.assign(resobj, acontent); self._owner.event.emit(self._owner.event.Events.GOTO_APP_RESULT, resobj); self._jumpnow = true; self._jumpobj = resobj; }, fail: function(res){ let endtm = new Date().getTime(); self._owner.gamelog.logJumpApp(appid, apppath, -1, qdid); cb && cb(0, res); let resobj = { result: 0, startTime: starttm, endTime: endtm, }; (typeof(acontent) == 'object') && Object.assign(resobj, acontent); self._owner.event.emit(self._owner.event.Events.GOTO_APP_RESULT, resobj); } }; wx.navigateToMiniProgram(obj); }else{ this._owner.gamelog.logJumpApp(appid, apppath, -1000, qdid); cb && cb(-1000, null); } }, PTLogin(info, successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ var self = this; wx.login({ success: function(res){ console.log("[wx]login success!" + res.code); self._owner.login.login(res.code, successcb, failcb); }, fail: function(res){ console.log("[wx]login fail!"); failcb && failcb(0, res? res.errcode: -1, res? res.errmsg:""); }, }); }else{ failcb && failcb(0, -1000, "not weixin platform!"); } }, // isFromMyApp(){ // if(cc.sys.platform == cc.sys.WECHAT_GAME){ // let launchinfo = wx.getLaunchOptionsSync(); // if(launchinfo && launchinfo.scene){ // return launchinfo.scene == 1089; // } // } // return false; // }, PTSetClipboardData: function (content, successcb, failcb) { if (cc.sys.platform == cc.sys.WECHAT_GAME) { wx.setClipboardData({ data: content, successcb, failcb }); }else{ failcb && failcb(-1000); } }, PTGetClipboardData: function (successcb, failcb) { if (cc.sys.platform == cc.sys.WECHAT_GAME) { wx.getClipboardData({ success: function(res){ successcb && successcb(res.data); }, failcb }); }else{ failcb && failcb(-1000); } }, PTPreviewImage(imgurl, successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ wx.previewImage({ urls: [imgurl], successcb, failcb }) }else{ failcb && failcb(-1000); } }, //广告相关 PTInitADService(){ }, PTCreateBannerAD(adid, st){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ if(wx.createBannerAd){ let data = { adUnitId: adid, style: st }; return wx.createBannerAd(data); } } return null; }, PTCreateVideoAD(adid){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ if(wx.createRewardedVideoAd){ let data = { adUnitId: adid }; return wx.createRewardedVideoAd(data); } } return null; }, PTCreateInsertAD(adid){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ if(wx.createInterstitialAd){ let data = { adUnitId: adid }; return wx.createInterstitialAd(data); } } return null; }, PTSetVideoADCallback(adobj, adowner, cb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ let closeCb = function(res){ console.log("[ad]onClose:"+JSON.stringify(res)); // 用户点击了【关闭广告】按钮 // 小于 2.1.0 的基础库版本,res 是一个 undefined if (res && res.isEnded || res === undefined) { // 正常播放结束,可以下发游戏奖励 cb && cb(res.isEnded, adowner, res); } else { // 播放中途退出,不下发游戏奖励 cb && cb(false, adowner, res); } // ad.offClose && ad.offClose(closeCb); }; adobj.onClose && adobj.onClose(closeCb); } }, PTVibrateShort(successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ wx.vibrateShort({ success: ()=>{ successcb && successcb(); }, fail: () =>{ failcb && failcb(); } }) } }, PTVibrateLong(successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ wx.vibrateLong({ success: ()=>{ successcb && successcb(); }, fail: () =>{ failcb && failcb(); } }) } }, PTOpenDataContext(){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ if(wx && wx.getOpenDataContext){ return wx.getOpenDataContext(); }else{ return null; } } return null; }, PTPostOpenMsg(msg){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage(msg); }, // 排行榜相关 saveRankData(nscore, nmoney, stitle){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage({ type: "save_data", score: nscore, money: nmoney, title: stitle }); }, showRankData(){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage({ type: "friends_all", }); }, hideRankData(){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage({ type: "friends_all_hide", }); }, prevRankPage(){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage({ type: 'pagechange', prev: 1 }); }, nextRankPage(){ const openDataContext = this.PTOpenDataContext(); openDataContext && openDataContext.postMessage({ type: 'pagechange', next: 1 }); }, PTADWatch(adid, successcb, failcb){ if(cc.sys.platform == cc.sys.WECHAT_GAME){ let videoAd = wx.createRewardedVideoAd({ adUnitId: adid, }); videoAd.load() .then(function(){ videoAd.show(); }) .catch(function(err){ console.log(err.errMsg); }); var errorCb = function(res){ console.log("[videoad]onerror:"+JSON.stringify(res)); failcb && failcb(adid, res, true, adid); videoAd.offError(this); } videoAd.onError(errorCb); var getFun = function(res){ if(res.isEnded){ try{ successcb&&successcb(adid, res, adid); }catch(e){ } cb=null; } videoAd.offClose(this); } videoAd.onClose(getFun); }else{ failcb && failcb(adid, -1000, true, adid); } }, }; module.exports = PLAT_WX;