> ## Content Index
> Fetch the complete content index at: https://iiong.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# UniApp 推送问题
- URL: https://iiong.com/fuck-the-uniapp-1/
- Published: 2024-04-11T07:32:35.000Z
- Updated: 2026-06-22T15:24:48.000Z
- Description: 从开发 UniApp 项目开始一直用 Vue-Cli 方式，虽然期间遇到小坑，都基本很好解决，最近在结合推送模块的时候，遇到天大的坑，后续就踩坑解决。
- Author: 淮城一只猫
- Tags: Web 前端

### 前言

从开发 `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`：

```javascript
// 修复推送问题
// #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` 的时候发现推送类型机型一直不对，无奈有回到最初查看相关代码，发现要手动启用推送业务回调：

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

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

```

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

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

```javascript
//离线推送点击
// #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` 天大的坑啊，在社区看到类似的问题也没相关官方人解答。