q***@gmail.com
q***@gmail.com
  • 发布:2025-12-16 15:44
  • 更新:2025-12-16 15:45
  • 阅读:21

用uniappx开发的软件,无法接入离线推送

分类:uni-app x

用uniappx开发的软件,想要接入离线推送,在后台已经填写了AppID, AppKey, AppSecret,MasterSecret,但是在oppo手机上无法接受到离线推送,只有打开app的时候才会出现推送
厂商包没打包进去
如何解决?

        onLaunch: function () {  
            // 检查本地隐私政策同意状态  
            const privacyStatus = StorageUtil.getPrivacyAgreeStatus()  
            console.log("隐私政策状态 =", privacyStatus)  

            // 如果用户未设置隐私政策状态,显示隐私政策弹窗  
            if (privacyStatus == null) {  
                uni.openDialogPage({  
                    url: "/pages/privacy/privacy"  
                })  
            }  

            loadUserInfoFromStorage()  

            if (privacyStatus == true) {  
                initPushListener()  
            }  
            // 监听隐私同意事件,收到后再初始化推送  
            uni.$on('privacy-agreed', () => {  
                initPushListener()  
                uni.$off('privacy-agreed')  
            })  
        },  

    function initPushListener(): void {  
        uni.getPushClientId({  
            success(res) {  
                console.log('推送 CID =', res.cid)  
            },  
        })  
    uni.setAppBadgeNumber(0)  
        uni.onPushMessage((res) => {  
            // 通知点击(离线/在线通知栏点击)  
            if (res.type == 'click') {  
                const payloadObj = JSON.parseObject(JSON.stringify(res.data.payload))  
                let urlVal: string = tempUrl  
                if (payloadObj != null) {  
                    const plUrl = payloadObj['url'] as string | null  
                    if (plUrl != null && plUrl.length > 0) {  
                        urlVal = plUrl  
                    }  
                }  
                if (urlVal.length > 0) {  
                    toPushUrl(urlVal)  
                }  
            }  

            // 在线消息到达  
            if (res.type == 'receive') {  
                if (res.data.title != null && res.data.content != null) {  
                    const payloadObj2 = JSON.parseObject(JSON.stringify(res.data.payload))  
                    const incomingUrl = payloadObj2 != null ? payloadObj2['url'] as string | null : null  
                    tempUrl = incomingUrl ?? ""  

                    const titleStr = res.data.title as string | null  
                    const contentMaybe = res.data.content as string | null  
                    const contentStr = contentMaybe ?? ""  

                    uni.createPushMessage({  
                        title: titleStr,  
                        content: contentStr,  
                        payload: res.data.payload  
                    })  
                }  
            }  
        })  
    }

这是我在app.uvue的onLaunch中初始化推送的代码

2025-12-16 15:44 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

您的问题在于未正确集成OPPO推送SDK。uni-app x实现离线推送需在打包时勾选对应厂商通道,否则无法触发系统级推送能力。

解决方案:

  1. 打包配置:在HBuilderX中提交云打包时,务必勾选"uni-push"中的"OPPO 推送"离线推送通道(路径:manifest.json → "push" → "offlinePush" → 勾选OPPO选项)。这会将OPPO官方SDK集成到安装包中。
  2. 隐私合规:根据uni-app x合规指南,需在隐私政策中声明OPPO推送SDK信息(包括收集的RegisterId、appKey等数据及第三方主体"广东欢太科技有限公司")。
  3. 代码验证:您的initPushListener逻辑正确,但需确保在用户同意隐私政策后调用(已满足此条件)。

注意

  • 仅调用uni.getPushClientIduni.onPushMessage无法实现离线推送,必须依赖厂商SDK通道
  • OPPO手机需在系统设置中开启"允许后台运行"和"通知权限"
  • 打包后检查APK是否包含com.heytap.push相关类(可通过解压APK验证)

参考文档:uni-app x离线推送配置指南

内容为 AI 生成,仅供参考

要回复问题请先登录注册