var PLAT_TT = { SHARE_FAIL: 40, SHARE_TIME: 3000, shareCount: {}, isThisPT() { return this._ptid === jc.channel.TT; }, getLaunchInfo() { return tt.getLaunchOptionsSync(); }, getSystemInfo() { return tt.getSystemInfoSync(); }, /** example: * * @param {object} btninfo : * { * width: 100, * height: 100, * name: logo.png * } * @param {function} cb */ getUserInfo(btninfo, cb) { this._usercb = cb; let self = this; let getInfo = function () { console.log('[tt.getUserInfo]'); tt.getUserInfo({ withCredentials: true, lang: 'zh_CN', success: function (res) { self._usercb && self._usercb(res, 1); }, fail: function (res) { console.log(res); self._usercb && self._usercb(res, -1); } }) } if (tt.createUserInfoButton) { tt.getSetting({ success: (res) => { if (!res.authSetting['scope.userInfo']) { var sysInfo = tt.getSystemInfoSync(); var sz = { width: sysInfo.screenWidth, height: sysInfo.screenHeight } var realw = btninfo.width / 512 * sz.width; var realh = btninfo.height / 1200 * 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 / 512 * sz.width - realw / 2; var realy = sz.height - btninfo.y / 1200 * 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('[tt.createUserInfoButton]'); console.log(sysInfo); console.log(btninfo); let stype = btninfo.name ? 'image' : 'text'; this.btnAuthorize = tt.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) => { console.log('[tt.getUserInfo]:', uinfo); if (uinfo.userInfo) { this._usercb && this._usercb(uinfo, 1); } else { // tt.showToast({title:"授权失败"}); this._usercb && this._usercb(null, -10); } if (this.btnAuthorize) { this.btnAuthorize.destroy && this.btnAuthorize.destroy(); this.btnAuthorize = null; } }); this._usercb && this._usercb(null, 0, 1); } else { console.log('authSetting success'); getInfo(); } }, fail: () => { console.error('getSetting fail'); this._usercb && this._usercb(null, -100); } }); } else { console.log('tt.createUserInfoButton is null'); getInfo(); } }, 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(); window.wx = window.tt; tt.showShareMenu({ withShareTicket: true }); tt.updateShareMenu({ withShareTicket: true }); let self = this; let _onShow = function (res) { console.log('[tt.onShow]'); self._owner.gameShow(); self._man && self._man.onPlatShow && self._man.onPlatShow(res); }; tt.offShow(_onShow); tt.onShow(_onShow); let _onHide = function () { console.log('[tt.onHide]'); self._owner.gameHide(); self._man && self._man.onPlatHide && self._man.onPlatHide(); }; tt.offHide(_onHide); tt.onHide(_onHide); tt.onAudioInterruptionBegin((res) => { console.log('tt.onAudioInterruptionBegin'); self._owner.event.emit(self._owner.event.Events.AUDIO_INTERRUPT_BEGIN, res); }); tt.onAudioInterruptionEnd((res) => { console.log('tt.onAudioInterruptionEnd'); self._owner.event.emit(self._owner.event.Events.AUDIO_INTERRUPT_END, res); }); }, bindController(ctrl) { this._man = ctrl; }, commonShare(img, title, stype, param, successcb, failcb, exinfo) { var st = (new Date()).getTime(); let sp = this._owner.makeShareParam(stype, param, exinfo); let self = this; if (exinfo && exinfo.videoPath) { this.videoShare(title, img, sp, function () { successcb && successcb(); }, function () { failcb && failcb(-3, param); }, exinfo); } else { this.PTShare(title, img, sp, function () { successcb && successcb(); }, function () { failcb && failcb(-3, param); }, exinfo); } }, captureShare(rc, title, stype, param, successcb, failcb, exinfo) { var st = (new Date()).getTime(); let sp = this._owner.makeShareParam(stype, param, exinfo); this.PTShareCapture(title, rc, sp, function () { successcb && successcb(); }, function () { failcb && failcb(-3, param); }, exinfo); }, _checkShareRes(starttime, sharetype, param, 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); }, PTStartRecord(dur, cb) { let maxdur = dur ? dur : 300; if (!this.recorder) { let self = this; this.recorder = tt.getGameRecorderManager(); this.recorder.onStop(res => { console.log('[video] on record stop', res.videoPath); self._stoprecording = false; self.recording = false; self._videoPath = res.videoPath; self._endTime = Date.now(); let obj = { videoPath: self._videoPath, endTime: self._endTime, totalSec: self._endTime - self._beginTime }; self._owner.event.emit(self._owner.event.Events.RECORD_STOP, obj); if (self._stoprecordcb) { self._stoprecordcb(obj); self._stoprecordcb = null; } }); this.recorder.onStart(res => { console.log('[video] on record start'); self._startrecording = false; self.recording = true; self._beginTime = Date.now(); let obj = { beginTime: self._beginTime }; self._owner.event.emit(self._owner.event.Events.RECORD_START, obj); if (self._startrecordcb) { self._startrecordcb(obj); self._startrecordcb = null; } }); this.recorder.onError(res => { console.log('[video] on record error'); console.log(res); self._startrecording = false; self._stoprecording = false; // self.recording = false; self._owner.event.emit(self._owner.event.Events.RECORD_ERROR, res); }); } if (this.recording) { let obj = { beginTime: this._beginTime }; cb && cb(obj); return 1; } else { this._startrecordcb = cb; if (this._startrecording) { return 100; } this._startrecording = true; this.recorder.start({ duration: maxdur }); this._man && this._man.scheduleOnce(this.PTStopRecord, maxdur > 10 ? maxdur - 10 : maxdur); return 0; } ; }, PTStopRecord(cb) { if (!this.recording) { let obj = { videoPath: self._videoPath, endTime: self._endTime, totalSec: self._endTime - self._beginTime }; cb && cb(obj); return 1; } this._stoprecordcb = cb; if (this._stoprecording) { return 100; } this._stoprecording = true; this.recorder && this.recorder.stop(); this._man && this._man.unschedule(this.PTStopRecord); return 0; }, PTIsRecording() { return this.recording; }, PTInitShare(normalinfo) { console.log('[tt] init share config', normalinfo); let self = this; if (!normalinfo) { return; } tt.showShareMenu({ withShareTicket: true, success: function (data) { console.log(data); }, fail: function (data) { console.log(data); } }); tt.updateShareMenu({ withShareTicket: true, success: function (data) { console.log(data); }, fail: function (data) { console.log(data); } }); tt.onShareAppMessage(function (res) { console.log(res.channel); return { title: normalinfo.title, imageUrl: normalinfo.imgurl, success() { console.log('分享成功') tt.showToast('分享成功', 'success'); }, fail(e) { console.log('分享失败', e) tt.showToast({title: '分享失败', icon: 'none'}); } } }); }, /** * 头条的视频分享 * */ videoShare(content, imgurl, param, successcb, failcb, extra) { let channel = 'article'; if (extra && extra.channel) { channel = extra.channel; delete extra['channel']; } let videoPath = extra.videoPath; delete extra['videoPath']; tt.shareVideo({ videoPath: videoPath, title: content, query: param, extra: extra, success() { console.log(`[TT]视频分享成功!`); successcb && successcb(); }, fail(e) { console.log(`[TT]视频分享失败!`, e); failcb && failcb(-1000); } }); }, PTShare(content, imgurl, param, successcb, failcb, extra) { let channel = 'article'; if (extra && extra.channel) { channel = extra.channel; delete extra['channel']; } tt.shareAppMessage({ title: content, imageUrl: imgurl, query: param, extra: extra, success() { console.log('[TT]分享成功'); successcb && successcb(); }, fail(e) { console.log('[TT]分享失败'); failcb && failcb(-1000); } }); }, PTShareCapture(content, rc, param, successcb, failcb) { let surl = canvas.toTempFilePathSync({ x: rc.x, y: rc.y, width: rc.width, height: rc.height, destWidth: 500, destHeight: 400 }); tt.shareAppMessage({ title: content, imageUrl: surl, query: param, success() { console.log('分享成功') tt.showToast({title: '分享成功'}); }, fail(e) { console.log('分享失败', e) tt.showToast({title: '分享失败', icon: 'none'}); } }); }, PTOpenKF(cb) { if (tt && tt.openCustomerServiceConversation) { let self = this; let obj = { // sessionFrom: '烧味蹦蹦蹦', showMessageCard: false, sendMessageTitle: '', sendMessagePath: '', sendMessageImg: '', success: function (res) { console.log('[tt.openCustomerServiceConversation]success'); console.log(res); cb && cb(true); if (self._man && self._man.onKFOpened) { self._man.onKFOpened(); } }, fail: function (res) { console.log('[tt.openCustomerServiceConversation]fail'); console.log(res); cb && cb(false); } } tt.openCustomerServiceConversation(obj); } }, PTCreateGameClubButton(nleft, ntop, nwidth) { if (tt.createGameClubButton) { let btn = tt.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) { wx.showToast({title: str, icon: icon || 'none'}); }, PTGotoApp(appid, apppath, exobj, cb, qdid) { let self = this; let obj = { appId: appid, path: apppath, extraData: exobj, success: function (res) { self._owner.gamelog.logJumpApp(appid, apppath, 1, qdid); cb && cb(1, res); }, fail: function (res) { self._owner.gamelog.logJumpApp(appid, apppath, -1, qdid); cb && cb(0, res); } }; tt.navigateToMiniProgram(obj); }, PTLogin(info, successcb, failcb) { var self = this; tt.login({ success: function (res) { console.log('[tt]login success!' + res.code); self._owner.login.login({token: res.code, successcb, failcb, anonymousToaken: res.anonymousCode || ''}); }, fail: function (res) { console.log('[tt]login fail!' + JSON.stringify(res)); // self._owner.login.loginAnonymous(successcb, failcb); tt.login({ force: false, success: function (res) { console.log('[tt] second login success!' + res.code); self._owner.login.login({token: res.code || '', successcb, failcb, anonymousToaken: res.anonymousCode || ''}); }, fail: function (res) { console.log('[tt]second login fail!' + JSON.stringify(res)); failcb && failcb(0, res ? res.errcode : -1, res ? res.errmsg : ''); } }) // failcb && failcb(0, res? res.errcode: -1, res? res.errmsg:""); } }); }, PTSetClipboardData: function (content, successcb, failcb) { tt.setClipboardData({ data: content, successcb, failcb }); }, PTGetClipboardData: function (successcb, failcb) { tt.getClipboardData({ success: function (res) { successcb && successcb(res.data); }, failcb }); }, PTPreviewImage(imgurl, successcb, failcb) { tt.previewImage({ urls: [imgurl], successcb, failcb }) }, //广告相关 PTInitADService() { }, PTBannerADMaxWidth() { return 208; }, PTBannerNeedLoad() { return true; }, PTCreateBannerAD(adid, st) { console.log('[tt] begin create banner ad,', adid); if (tt.createBannerAd) { let rst = { width: st.width, top: st.top, left: st.left } let data = { adUnitId: adid, style: rst }; return tt.createBannerAd(data); } }, PTCreateVideoAD(adid) { if (tt.createRewardedVideoAd) { let data = { adUnitId: adid }; return tt.createRewardedVideoAd(data); } }, PTCreateInsertAD(adid) { return null; }, PTSetVideoADCallback(adobj, adowner, cb) { 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) { tt.vibrateShort({ success: () => { successcb && successcb(); }, fail: () => { failcb && failcb(); } }) }, PTVibrateLong(successcb, failcb) { tt.vibrateLong({ success: () => { successcb && successcb(); }, fail: () => { failcb && failcb(); } }) }, PTOpenDataContext() { return tt.getOpenDataContext(); }, PTPostOpenMsg(msg) { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage(msg); }, // 排行榜相关 saveRankData(nscore, nmoney, stitle) { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage({ type: 'save_data', score: nscore, money: nmoney, title: stitle }); }, showRankData() { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage({ type: 'friends_all' }); }, hideRankData() { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage({ type: 'friends_all_hide' }); }, prevRankPage() { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage({ type: 'pagechange', prev: 1 }); }, nextRankPage() { const openDataContext = tt.getOpenDataContext(); openDataContext.postMessage({ type: 'pagechange', next: 1 }); }, setLocalStorage(key, value) { tt.setStorageSync(key, value); }, getLocalStorage(key) { return tt.getStorageSync(key); }, removeStorage(key) { tt.removeStorageSync(key); } }; module.exports = PLAT_TT;