uni-app 厂商推送指定设备推送无效
uni-app 厂商推送指定设备推送无效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | WIN10 20H2 | HBuilderX |
产品分类:
uniapp/App
PC开发环境操作系统:
Windows
HBuilderX类型:
正式
HBuilderX版本号:
3.1.13
手机系统:
Android
手机系统版本号:
Android 8.1
手机厂商:
OPPO
手机机型:
…
页面类型:
vue
vue版本:
vue2
打包方式:
云端
项目创建方式:
HBuilderX
操作步骤:
预期结果:
根据plus.push.getClientInfo().clientid 获取的clientid 可以当做指定的RegistrationId进行指定设备推送通知
实际结果:
plus.push.getClientInfo().clientid 获取的clientid 显示在对应的厂商推送平台根据RegistrationId查找 , 显示没有注册 , 使用android原生开发获取的RegistrationId在对应厂商推送平台是可以推送到指定设备的
bug描述:
uni-app集成厂商推送 , 根据 plus.push.getClientInfo().clientid 获取的推送标识无法在oppo和vivo手机对应开放平台,使用指定RegistrationId进行推送!!! 应用已上线
更多关于uni-app 厂商推送指定设备推送无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 厂商推送指定设备推送无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
针对您描述的 uni-app 厂商推送中指定设备推送无效的问题,核心在于 plus.push.getClientInfo().clientid 获取的标识与厂商推送平台所需的 RegistrationId 不匹配。这通常是由于 uni-app 云端打包时集成的推送模块配置或使用方式导致的。
主要原因分析:
-
clientid 与 RegistrationId 的区别:
plus.push.getClientInfo().clientid是 uni-app 推送模块(如 uni-push)内部生成的客户端标识,主要用于 uni-push 服务端向设备推送。它可能不是厂商通道(如 OPPO Push、vivo Push)原生的RegistrationId。- 厂商推送平台(如 OPPO 开放平台、vivo 开发者平台)要求的
RegistrationId是设备在厂商推送服务中注册的唯一标识,由厂商推送 SDK 直接生成。
-
获取方式问题:
- 在 uni-app 中,如果正确集成了厂商推送并配置了对应的 AppKey、AppSecret 等,厂商通道的
RegistrationId通常需要通过监听plus.push.addEventListener('receive', ...)事件,或在特定回调中获取,而不是直接使用clientid。 - 原生 Android 开发直接调用厂商 SDK 的 API 获取
RegistrationId,因此与平台匹配。
- 在 uni-app 中,如果正确集成了厂商推送并配置了对应的 AppKey、AppSecret 等,厂商通道的
解决步骤建议:
-
确认厂商推送配置:
- 检查 HBuilderX 项目中
manifest.json的“App 模块配置”中,是否已正确勾选并配置了“Push(消息推送)”,并填写了 OPPO、vivo 等厂商的 AppKey、AppSecret(需在对应厂商开放平台申请)。 - 云端打包时需确保这些配置已生效。
- 检查 HBuilderX 项目中
-
正确获取厂商 RegistrationId:
- 在 uni-app 中,尝试通过以下方式获取厂商通道的标识:
// 监听推送事件,查看回调信息中是否包含厂商相关 ID plus.push.addEventListener('receive', function(msg) { console.log('推送消息:', JSON.stringify(msg)); // 检查 msg 中是否有类似 'registrationId' 或厂商特定字段 }); // 或尝试从 clientinfo 的 detail 中获取 var info = plus.push.getClientInfo(); console.log('客户端信息:', JSON.stringify(info)); // 查看 info 中是否有 'token'、'regid' 等字段(不同厂商可能字段名不同)
- 在 uni-app 中,尝试通过以下方式获取厂商通道的标识:

