MrShi
20 小时以前 eb7a808aaf7dd0a6dd2ff70f9ef3f8ce0b1e31d1
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
// 开发文档: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
function uniPush(appId) {
    return uniCloud.getPushManager({appId})
}
const uniID = require('uni-id-common')
module.exports = {
    _before: async function() {
        const clientInfo = this.getClientInfo()
        this.uniID = uniID.createInstance({
            clientInfo
        })
        const token = this.getUniIdToken()
        let payload = await this.uniID.checkToken(token)
        let role = payload.role||[]
        //检查是不是管理员,或者自己的云函数调用此云函数
        if(clientInfo.source != 'server' && !role.includes('admin')){
            return {
                errCode: 'uni-push-co-permission-denied',
                errMsg: '你没有访问此接口权限'
            }
        }
    },
    async sendMessage(data) {
        const appId = data.appId
        data.must_report = true //默认为false,消息接受者为单设备时,不统计推送结果。开启此项将都会统计。但整体推送速度会慢100-500毫秒
        // delete data.appId
        let res = await uniPush(appId).sendMessage(data)
        if (res.errCode == 0 && res.before_id) {
            const UniPushCo = uniCloud.importObject("uni-push-co")
            data.before_id = res.before_id //查询的初始id,用于高性能分页查询
            data.taskid = res.data.taskid || Object.keys(res.data)[0]
            
            UniPushCo.sendMessage(data).catch(e=>{
                // console.log(e.message);
            }) 
            // 等待500毫秒给下一个请求发出去的时间
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(res)
                }, 500)
            })
        }
        return res
    },
    async getReport({
        appId,
        taskid
    }) {
        let res = await uniPush(appId).getReport({
            taskid
        })
        //获取推送结果
        console.log(JSON.stringify(res));
        return res
    },
    async getAdminUrl(appId) {
        let res = await uniPush(appId).getAdminUrl() //获取推送结果
        console.log(JSON.stringify(res));
        return res
    }
}