UniApp 推送问题

淮城一只猫 Web 前端
阅读量 0 评论量 0

前言

从开发 UniApp 项目开始一直用 Vue-Cli 方式,虽然期间遇到小坑,都基本很好解决,最近在结合推送模块的时候,遇到天大的坑,如果在 HbuilderX 开发情况下不会出现这个问题,但项目开发到尾期总不可能迁移环境到 HbuilderX 环境下吧?

UniPush 2.0

在后续开发期间,客户要求集成推送支持,由于对应的运营商还没有配置,就先配置在线推送,本以为在 manifest.json 勾选 在线推送 功能应该可以的,然后后面在 Debug 的时候死活获取不了 clientId ,控制台一直打印 {errMsg: 'getPushClientId:fail uniPush is not enabled'} 的错误,然后没办法在 HbuilderX 环境下创建项目可以获取到 cid 这下意识到还是 Vue-Cli 的坑,后面在 @dcloudio/vue-cli-plugin-uni/packages/uni-push 包找到推送的业务,就尝试修复在 App.vue

// 修复推送问题
// #ifdef APP-PLUS
require('@dcloudio/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.plus.es.js')
// #endif
require('@dcloudio/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.es.js')

重新运行后的确可以拿到 cid 了,本来这件事到此为止。

无法离线推送

后续客户将运营商信息全部配置好了,App 在在线情况下是可以接受到消息,离线情况下一直不行,然后在 UniApp 推送管理系统 Debug 的时候发现推送类型机型一直不对,无奈有回到最初查看相关代码,发现要手动启用推送业务回调:

// #ifndef APP-PLUS
uni.invokePushCallback({
  type: 'enabled'
})
// #endif

// #ifdef APP-PLUS
uni.invokePushCallback({
  type: 'enabled',
  offline: true
})
// #endif

这时候重新打包或者自定义基座可以离线推送了。

在点击通知栏消息业务如下:

//离线推送点击
// #ifdef APP-PLUS
plus.push.addEventListener('click', event => {
    uni.navigateTo({
        url: '/apps/me/message/messageList'
    })
  	// 角标设置
    plus.runtime.setBadgeNumber(0)
})
// #endif

// 在线推送点击
uni.onPushMessage(event => {
    if (event.type === 'click') {
        uni.navigateTo({
            url: '/apps/me/message/messageList'
        })
        // #ifdef APP-PLUS
        plus.runtime.setBadgeNumber(0)
        // #endif
    }
})

结语

只能说 UniApp 天大的坑啊,在社区看到类似的问题也没相关官方人解答。

喵~