init.js 2.9 KB
Newer Older
1
// 导入配置
2
import config from '@/uni_modules/uni-id-pages/config.js'
3
// uni-id的云对象
4 5
const uniIdCo = uniCloud.importObject('uni-id-co', {
  customUI: true
6 7 8
})
// 用户配置的登录方式、是否打开调试模式
const {
9 10
  loginTypes,
  debug
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(
42
				`错误:前端启用的登录方式:${list.join('')};没有在服务端完成配置。配置文件路径:"/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json"`
43 44 45
      )
    }
  }
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)
72

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
  // 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) {
            // console.log(e)
          }
        })
      }
    })
  }
}