init.js 2.9 KB
Newer Older
DCloud_JSON's avatar
DCloud_JSON 已提交
1
// 导入配置
2
import config from '@/uni_modules/uni-id-pages/config.js'
DCloud_JSON's avatar
DCloud_JSON 已提交
3
// uni-id的云对象
4 5
const uniIdCo = uniCloud.importObject('uni-id-co', {
  customUI: true
DCloud_JSON's avatar
DCloud_JSON 已提交
6 7 8
})
// 用户配置的登录方式、是否打开调试模式
const {
9 10
  loginTypes,
  debug
DCloud_JSON's avatar
DCloud_JSON 已提交
11 12
} = config

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
export default async function () {
  // 有打开调试模式的情况下
  if (debug) {
    // 1. 检查本地uni-id-pages中配置的登录方式,服务器端是否已经配置正确。否则提醒并引导去配置
    // 调用云对象,获取服务端已正确配置的登录方式
    const {
      supportedLoginType
    } = await uniIdCo.getSupportedLoginType()
    console.log('supportedLoginType: ' + JSON.stringify(supportedLoginType))
    // 登录方式,服务端和客户端的映射关系
    const data = {
      smsCode: 'mobile-code',
      univerify: 'univerify',
      username: 'username-password',
      weixin: 'weixin',
      qq: 'qq',
      xiaomi: 'xiaomi',
      sinaweibo: 'sinaweibo',
      taobao: 'taobao',
      facebook: 'facebook',
      google: 'google',
      alipay: 'alipay',
      apple: 'apple',
      weixinMobile: 'weixin'
    }
    // 遍历客户端配置的登录方式,与服务端比对。并在错误时抛出错误提示
    const list = loginTypes.filter(type => !supportedLoginType.includes(data[type]))
    if (list.length) {
      console.error(
DCloud_JSON's avatar
DCloud_JSON 已提交
42
				`错误:前端启用的登录方式:${list.join('')};没有在服务端完成配置。配置文件路径:"/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json"`
43 44 45
      )
    }
  }
DCloud_JSON's avatar
DCloud_JSON 已提交
46

47 48 49 50 51 52 53 54 55 56 57
  // #ifdef APP-PLUS
  // 如果uni-id-pages配置的登录功能有一键登录,有则执行预登录(异步)
  if (loginTypes.includes('univerify')) {
    uni.preLogin({
      provider: 'univerify',
      complete: e => {
        // console.log(e);
      }
    })
  }
  // #endif
58

59 60 61 62 63 64 65 66 67 68 69 70 71
  // 3. 绑定clientDB错误事件
  // clientDB对象
  const db = uniCloud.database()
  db.on('error', onDBError)
  // clientDB的错误提示
  function onDBError ({
    code, // 错误码详见https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=returnvalue
    message
  }) {
    // console.error('onDBError', {code,message});
  }
  // 解绑clientDB错误事件
  // db.off('error', onDBError)
DCloud_JSON's avatar
DCloud_JSON 已提交
72

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
  // 4. 同步客户端push_clientid至device表
  if (uniCloud.onRefreshToken) {
    uniCloud.onRefreshToken(() => {
      // console.log('onRefreshToken');
      if (uni.getPushClientId) {
        uni.getPushClientId({
          success: async function (e) {
            // console.log(e)
            const pushClientId = e.cid
            // console.log(pushClientId);
            const res = await uniIdCo.setPushCid({
              pushClientId
            })
            // console.log('getPushClientId', res);
          },
          fail (e) {
89
            // console.log(e)
90 91 92 93 94 95
          }
        })
      }
    })
  }
}