import wx from './utils/wx'; import udid from './common/udid'; import event from './common/event'; import { verify } from './common/api'; import { wechatAuthLogin, verifySessionKey } from './common/login'; import { MD5 } from './vendors/crypto'; import config from './common/config'; import Yas from './common/yas'; import './router/index'; // 新增的router import {stringify} from './vendors/query-stringify'; import accountModel from './models/account/index'; let yas; // app.js App({ globalData: { userInfo: {}, unionID: '', thirdSession: '', udid: '', unionType: '', isIphoneX: false, systemInfo: {} }, reportData: { awakeReported: false }, onLaunch: function(options) { this.globalData.udid = udid.get(); // 生成 UDID verify.gen(); // 此处返回是是 Promise,需要调用接口的业务,最好在 then 里边执行 this.globalData.unionType = options.query.union_type || options.scene; this.globalData.sid = MD5(new Date().getTime() + ''); yas = new Yas(this); yas.report('YB_LAUNCH_APP'); // yas 登录成功回调上报 event.on('yas-login-type-report', params => { yas.report('YB_MY_LOGIN', params); }); // yas 注册成功后上报 event.on('yas-user-register-success', params => { accountModel.recordRegisterSource({ storeId: config.storeId, // 线下店ID写死1 fromPage: params.TRIGGER_PAGE_NAME }); yas.report('YB_REGISTER_SUCCESS', params); }); // 测试环境打开调试 if (config.domains.api.indexOf('api-test') > -1) { wx.setEnableDebug({ enableDebug: true }); } }, onShow: function(options) { this.globalData.systemInfo = wx.getSystemInfoSync(); this.globalData.isIphoneX = this.globalData.systemInfo.model === 'iphonrx'; udid.get(); // 生成 UDID verify.gen(); // 此处返回是是 Promise,需要调用接口的业务,最好在 then 里边执行 wx.getLocation({}); wx.checkSession().then(() => { // 微信登录未过期 this.getWechatThirdSession(); this._getUserInfo(); this.getUnionID(); this.doLogin(); }).catch(() => { // 微信登录过期 wx.setStorage({ key: 'thirdSession', data: '' }); wx.setStorage({ key: 'userInfo', data: {} }); wx.setStorage({ key: 'unionID', data: '' }); this.setUserInfo({}); this.doLogin(); }); yas.report('YB_ENTER_FOREGROUND'); // 系统-程序切换置前台上报 if (this.reportData.awakeReported === false) { let path = options.path || ' '; if (Object.keys(options.query).length) { path = `${path}?${stringify(options.query)}`; } yas.report('YB_AWAKE_MP', { PAGE_PATH: path }); // 唤起事件,即每次启动后获取到原始的推广路径时上报该事件,以对推广渠道数据进行监测; this.reportData.awakeReported = true; } }, onHide: function() { this.globalData._limitSaleEnteredMark = false; yas.report('YB_ENTER_BACKGROUND'); // 系统 - 程序切换置后台上报 }, doLogin: function() { // 默认自动登录,退出不走自动登录 if (!this._getSync('disableAutoLogin')) { this.getSessionKey(); return this.wechatAuthLogin(); } }, _getSync: function(key) { try { return wx.getStorageSync(key); } catch (e) { console.log(`wx.getStorageSync get ${key} failed.`); return {}; } }, _setSync: function(key, value) { try { wx.setStorageSync(key, value); } catch (e) { console.log(`wx.setStorageSync set ${key} failed.`); } }, _removeSync: function(key) { try { wx.removeStorageSync(key); } catch (e) { console.log(`wx.removeStorageSync del ${key} failed.`); } }, getWechatThirdSession: function() { this.globalData.thirdSession = this.globalData.thirdSession || this._getSync('thirdSession'); return this.globalData.thirdSession; }, setWechatThirdSession: function(session) { this.globalData.thirdSession = session; wx.setStorage({ key: 'thirdSession', data: this.globalData.thirdSession }); }, getUid: function() { return this.globalData.userInfo.uid || this._getUserInfo().uid || 0; }, _getUserInfo: function() { this.globalData.userInfo = this._getSync('userInfo'); return this.globalData.userInfo || {}; }, getUnionID: function() { this.globalData.unionID = this.globalData.unionID || this._getSync('unionID'); return this.globalData.unionID; }, getSessionKey: function() { return this.globalData.userInfo.sessionKey || this._getUserInfo().sessionKey || ''; }, getOpenID: function() { this.globalData.openID = this.globalData.openID || wx.getStorageSync('openID'); return this.globalData.openID; }, setOpenID: function(openID) { if (openID) { this.globalData.openID = openID; wx.setStorage({ key: 'openID', data: openID }); } }, setUnionID: function(unionID) { this.globalData.unionID = unionID; wx.setStorage({ key: 'unionID', data: unionID }); event.emit('wx-union-id-update'); }, setUserInfo: function(user) { this.globalData.userInfo = user; wx.setStorage({ key: 'userInfo', data: this.globalData.userInfo }); }, wechatAuthLogin: function() { if (!this.getUid() || !this.getSessionKey()) { return wechatAuthLogin().then(res => { if (res.code === 10003) { // 微信号已绑定手机号 this.setUserInfo(res.data); event.emit('user-login-success'); } if (res.code === 10004) { // 微信号未绑定手机号 // 自动登录未绑定静默处理、不强制绑定 } return res; }).catch(() => {}); } return verifySessionKey().then(ves => { ves = ves || {}; if (ves.code !== 200) { // sessionKey已过期 // 清理原存储的用户信息 this.clearUserSession(); return wechatAuthLogin(); } else { this._getUserInfo(); event.emit('user-login-success'); return ves; } }).then(res => { if (res.code === 10003) { // 微信号已绑定手机号 this.setUserInfo(res.data); event.emit('user-login-success'); } if (res.code === 10004) { // 微信号未绑定手机号 // 自动登录未绑定静默处理、不强制绑定 } return res; }).catch(() => { }); }, clearUserSession: function() { this.setUserInfo({}); }, getAppId() { return config.appid; }, getPvid() { return MD5(`${new Date().getTime()}${udid.get()}`).toString(); } });