jcfw-lite/jcfw/platform/plat_wechat.js
2020-02-01 16:53:49 +08:00

787 lines
25 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;