1***@qq.com
1***@qq.com
  • 发布:2025-09-04 10:14
  • 更新:2025-09-04 11:00
  • 阅读:15

关于uniapp安卓使用uni-push2.0的一些问题

分类:uni-app

我当前使用uniapp+vue3开发一个安卓应用,现在需要集成推送功能,因此选择使用uni-push2.0。没有上架应用商店,暂不需要离线推送,只是挂在后台 保持运行能收到推送即可。

现在的情况是,当我第一次运行这个app,进行用户id和获取到的cid进行绑定后,可以正常收到通知,隐藏app 切换到后台也能收到。但是一旦我关闭,重新打开的时候就收不到任何通知了。我确信我正确的初始化和绑定cid了,不然第一次就也不会收到推送了。

我在onlunch进行初始化,我确信cid可以正常获取。


async ensureCid(retry = 0) {  
                const maxRetry = 6  
                const wait = ms => new Promise(r => setTimeout(r, ms))  

                return new Promise((resolve) => {  
                    uni.getPushClientId({  
                        success: async (res) => {  
                            const cid = res?.cid || ''  
                            console.log('[PUSH] getPushClientId success:', cid)  
                            if (!cid) {  
                                if (retry < maxRetry) {  
                                    const delay = 600 * Math.pow(1.6, retry)  
                                    console.log(`[PUSH] CID空,${delay}ms后重试#${retry+1}`)  
                                    setTimeout(() => this.ensureCid(retry + 1).then(resolve),  
                                        delay)  
                                } else {  
                                    resolve(null)  
                                }  
                                return  
                            }  

                            // 缓存全局和本地存储  
                            const app = getApp()  
                            app.globalData.cid = cid  
                            uni.setStorageSync('cid', cid)  

                            resolve(cid)  
                        },  
                        fail: async (err) => {  
                            console.error('[PUSH] getPushClientId 失败:', err)  
                            if (retry < maxRetry) {  
                                const delay = 800 * Math.pow(1.6, retry)  
                                await wait(delay)  
                                this.ensureCid(retry + 1).then(resolve)  
                            } else {  
                                resolve(null)  
                            }  
                        }  
                    })  
                })  
            },  

关于绑定,我是在进入到初始页进行绑定,这个绑定我也确信是绑定成功了。
10:05:26.147 [本地调试][云函数:bindClientId]请求参数: {"userId":xxxxxxx","clientId":"xxxxxxxx"}
10:05:26.955 [本地调试][云函数:bindClientId]返回结果: {"code":200,"message":"绑定成功"} .

而且我发现这个cid 如果这个app不重装的话,它是不会变的,那么我觉得问题就不在绑定上了,因为第一次能获取到,而且数据库也有正确的数据,说明绑定是成功的。就是想知道为什么关闭后重新打开就获取不到通知了,问题可能是出现在初始化?但是初始化这里也是成功的。

我是这样推送的。

const res = await uniPush.sendMessage({
push_clientid: clientIds, // 使用 push_clientid
title,
content,
payload: payload || {},
force_notification: true, // 强制生成通知
// category: { // 指定类别(针对厂商通道)
// huawei: "EXPRESS", // 华为通道
// vivo: "ORDER", // vivo 通道
// harmony: "EXPRESS" // 鸿蒙通道
// },
// sound: "default",
// platform: ["app-android"],
});

如果我将force_notification设置为false,那么uni.onPushMessage可以正常js监听,同样也是第一次进入app可以,关闭后重启就不行。

2025-09-04 10:14 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com (作者)

经测试,是设备的问题,换了另一个安卓模拟器,pixel就可以了

要回复问题请先登录注册