1***@qq.com
1***@qq.com
  • 发布:2026-04-16 11:54
  • 更新:2026-04-16 13:48
  • 阅读:36

【报Bug】通过 uni.getPushClientId获取的cid在uni-push一直显示phone type是小程序 也没有device token 但是配置了离线消息

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

手机系统: Android

手机系统版本号: Android 11

手机厂商: OPPO

手机机型: oppo k3

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: CLI

CLI版本号: 2

示例代码:
onLaunch: function (options) {  
        this.initPush()  
},  
methods: {  
initPush () {  
            // #ifdef APP-PLUS  
            this.getPushClientId()  
            // #endif  
 },  
getPushClientId () {  
            console.log("开始获取cid");  
            uni.getPushClientId({  
                success: (res) => {  
                    const clientId = res.cid  
                    uni.$u.toast(clientId)  
                    uni.setStorageSync('push_client_id', clientId)  
                    // this.savePushClientId(clientId)  
                    console.log(clientId);  
                },  
                fail (err) {  
                    console.log('报错', err)  
                }  
            })  
},  
}

操作步骤:

打开app获取cid 去uni-push后台去查询信息 显示phone type是小程序 但是我配置了离线消息 并且没有device token

预期结果:

打开app获取cid 去uni-push后台去查询信息 显示phone type是安装 有device token信息

实际结果:

显示phone type是小程序 但是我配置了离线消息 并且没有device token

bug描述:

一个是通过 uni.getPushClientId获取到的cid 这个是不能收到离线消息
一个是通过abd日志获取gtcid 个推官方人员反推的cid 这个可以收到离线消息

是不是 uni.getPushClientId获取的不是最新的cid呀

hbuilderx 版本号为5.07

2026-04-16 11:54 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

需要补充平台分类(安卓,ios,鸿蒙,小程序)和具体问题描述。

作为DCloud官方人员,对该bug反馈进行评审如下:

反馈内容完整性评价

基本信息:反馈包含了标题、描述、代码示例、复现步骤、预期/实际结果及运行环境(Windows 10、HBuilderX正式版、Android 11、OPPO K3、Vue2),信息较为完整。

缺失关键信息

  1. manifest.json配置截图:问题核心在于uni-push的SDK类型选择,需要确认manifest.json -> APP模块配置 -> uniPush 2.0是否勾选了离线推送选项
  2. 打包日志:需要确认打包时是否正确集成了厂商推送SDK
  3. HBuilderX具体版本号:"正式版"描述不够精确,建议提供具体版本号(如5.04)

代码示例评价:提供的代码示例是标准的uni.getPushClientId调用方式,可以直接运行,无需调整。

问题分析

根据知识库内容,该问题极有可能是配置问题而非系统bug

关键依据来自uni-push2.0文档

个推的客户端类型是仅根据使用的sdk类型来判断的:

  1. native sdk(在manifest.json->APP 模块配置->uniPush 2.0配置界面勾选离线推送时启用的 sdk),获取到的 cid 的 phoneType 为 APP 类型。
  2. jssdkmanifest.json->APP 模块配置->uniPush 2.0配置界面,仅勾选在线推送,未勾选离线推送时启用的 sdk),获取到的 cid 的 phoneType 均为小程序,而不管实际上你的客户端是 APP、小程序还是 web。

现象匹配

  • 您描述的"phone type是小程序"且"没有device token"完全符合jssdk的特征
  • 您通过adb日志获取的gtcid(个推原生cid)能收到离线消息,说明厂商通道配置本身是正确的,但uni.getPushClientId获取到的是jssdk的cid

解决方案

请按以下步骤排查:

  1. 检查manifest配置:打开manifest.json -> APP模块配置 -> uniPush 2.0,确认同时勾选了"在线推送"和"离线推送"
  2. 重新打包:修改配置后必须重新打自定义基座或云打包才能生效
  3. 验证:重新获取cid后,在uni-push后台查询应显示phone type为"APP"且有device token

如果已勾选离线推送但仍出现此问题,请提供:

  • manifest.json中uniPush 2.0配置的截图
  • 打包时的控制台日志(确认是否集成了厂商SDK)

参考文档:uni-push2.0客户端类型说明

内容为 AI 生成,仅供参考
1***@qq.com

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

配置如图

要回复问题请先登录注册