cshenfu
2023-05-26 8a97e4347e5d1ba1f8913edbdb34a92581588b26
1
2
3
4
5
6
7
8
9
10
11
12
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// 导入配置
import config from '@/uni_modules/uni-id-pages/config.js';
// uni-id的云对象
const uniIdCo = uniCloud.importObject("uni-id-co", {
    customUI: true
})
// 用户配置的登录方式、是否打开调试模式
const {
    loginTypes,
    debug
} = config
 
export default async function() {
 
    // 有打开调试模式的情况下
    if (debug) {
        // 1. 检查本地uni-id-pages中配置的登录方式,服务器端是否已经配置正确。否则提醒并引导去配置
        //调用云对象,获取服务端已正确配置的登录方式
        let {
            supportedLoginType
        } = await uniIdCo.getSupportedLoginType()
        console.log("supportedLoginType: " + JSON.stringify(supportedLoginType));
        //登录方式,服务端和客户端的映射关系
        let 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"
        }
        //遍历客户端配置的登录方式,与服务端比对。并在错误时抛出错误提示
        let list = loginTypes.filter(type => !supportedLoginType.includes(data[type]))
        if (list.length) {
            console.error(
                `错误:前端启用的登录方式:${list.join(',')};没有在服务端完成配置。配置文件路径:"/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json"`
            );
        }
    }
 
    // #ifdef APP-PLUS
    //如果uni-id-pages配置的登录功能有一键登录,有则执行预登录(异步)
    if (loginTypes.includes('univerify')) {
        uni.preLogin({
            provider: 'univerify',
            complete: e => {
                // console.log(e);
            }
        })
    }
    // #endif
 
    //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)
 
 
    //4. 同步客户端push_clientid至device表
    if (uniCloud.onRefreshToken) {
        uniCloud.onRefreshToken(() => {
            // console.log('onRefreshToken');
            if (uni.getPushClientId) {
                uni.getPushClientId({
                    success: async function(e) {
                        // console.log(e)
                        let pushClientId = e.cid
                        // console.log(pushClientId);
                        let res = await uniIdCo.setPushCid({
                            pushClientId
                        })
                        // console.log('getPushClientId', res);
                    },
                    fail(e) {
                        console.log(e)
                    }
                })
            }
        })
    }
}