欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
基于您描述的现象(successed_offline 但小米后台无记录、直连小米 API 正常),这通常不是参数错误,而是 uni-push 2.0 的通道选择策略或厂商通道配置未正确触达小米通道 导致的。
结合知识库中 DCloud 官方对类似问题的解答,请按以下步骤排查:
1. 检查 options 中的厂商通道配置(最关键)
uni-push 2.0 已不推荐使用 channel_id,请改用 category 和 options 配置。确保您的 sendMessage 请求中,options 字段内明确指定了小米通道参数:
await uniPush.sendMessage({
"user_id": "xxx",
"title": "标题",
"content": "内容",
"options": {
"MI": { // 小米通道标识
"channel_id": "您的小米channel_id", // 小米后台申请的通道ID
"category": "您的小米category", // 小米分类(如有)
"template_id": "您的template_id",
"template_param": {}
}
},
"settings": {
"strategy": {
"default": 1 // 确保策略允许离线厂商通道
}
}
})
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
注意:根据 uni-push 2.0 官方文档,channel 已废弃,请通过 category 和 options 配置。如果 options 中未正确嵌套厂商特定参数,个推可能仅将消息保留在自有离线队列,而未转发至小米厂商通道。
2. 验证 uni-push 后台的厂商通道配置
登录 DCloud 开发者中心 -> uni-push -> 配置管理 -> 应用配置:
- 确认 小米厂商通道已正确配置(AppID、AppKey、AppSecret、MasterSecret)
- 确认 包名、签名 与小米开放平台申请的一致(签名需为 MD5,且与打包证书匹配)
3. 检查客户端 channel_id 设置
虽然 uni-push 2.0 服务端使用 options 传参,但客户端仍需通过原生 SDK 设置通知渠道(Android 8.0+ 必需):
// #ifdef APP-PLUS
plus.push.setChannel({
channelId: '您的小米channel_id', // 与小米后台申请的 channel_id 一致
channelName: '通知',
channelDesc: '应用通知'
});
// #endif
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
关键确认:该 channel_id 必须与您在小米开放平台申请的通道 ID 完全一致,且与您在 options.MI.channel_id 中填写的一致。
4. 区分 "离线" 与 "厂商离线"
您描述的 "打开 App 秒弹" 说明消息被保存在了 个推的离线队列(successed_offline),而非小米厂商通道。请确认:
- 杀进程后:手机系统设置 -> 应用管理 -> 您的应用 -> 通知管理,确认 "允许通知" 且 "锁屏通知"、"横幅" 等权限已开启
- 电池优化:小米系统对后台限制严格,请检查是否将应用加入了 "神隐模式" 或 "电池优化白名单"
5. 查看推送回执与日志
通过 uni-push 后台或 API 查询该条消息的详细下发日志:
- 如果日志显示消息仅到达个推服务器,未调用小米通道,说明
options 参数未被正确解析
- 如果显示已调用小米通道但返回失败,需检查小米返回的具体错误码(如
channel_id 不存在、category 未申请等)
6. 参考类似案例
根据 ask 社区案例,有开发者遇到相同问题,最终发现是 小米通道的 channel_id 未在客户端正确设置 或 未在小米后台申请该通道。
总结建议
由于您直连小米 API 正常,说明小米侧配置无误。问题大概率在于 uni-push 2.0 的 options 参数格式未正确触发小米通道转发。建议:
- 严格按照 options 文档 检查
options.MI 的嵌套结构
- 确保客户端
plus.push.setChannel 的 channelId 与小米后台及 options 中填写的一致
- 如仍无法解决,建议在 uni-push 官方技术交流群 提供
taskid 给官方人员查询具体下发日志
1 个回复
Ask小助手 - Ask社区AI助手
基于您描述的现象(
successed_offline但小米后台无记录、直连小米 API 正常),这通常不是参数错误,而是 uni-push 2.0 的通道选择策略或厂商通道配置未正确触达小米通道 导致的。结合知识库中 DCloud 官方对类似问题的解答,请按以下步骤排查:
1. 检查
options中的厂商通道配置(最关键)uni-push 2.0 已不推荐使用
channel_id,请改用category和options配置。确保您的sendMessage请求中,options字段内明确指定了小米通道参数:注意:根据 uni-push 2.0 官方文档,
channel已废弃,请通过category和options配置。如果options中未正确嵌套厂商特定参数,个推可能仅将消息保留在自有离线队列,而未转发至小米厂商通道。2. 验证 uni-push 后台的厂商通道配置
登录 DCloud 开发者中心 -> uni-push -> 配置管理 -> 应用配置:
3. 检查客户端
channel_id设置虽然 uni-push 2.0 服务端使用
options传参,但客户端仍需通过原生 SDK 设置通知渠道(Android 8.0+ 必需):关键确认:该
channel_id必须与您在小米开放平台申请的通道 ID 完全一致,且与您在options.MI.channel_id中填写的一致。4. 区分 "离线" 与 "厂商离线"
您描述的 "打开 App 秒弹" 说明消息被保存在了 个推的离线队列(
successed_offline),而非小米厂商通道。请确认:5. 查看推送回执与日志
通过 uni-push 后台或 API 查询该条消息的详细下发日志:
options参数未被正确解析channel_id不存在、category未申请等)6. 参考类似案例
根据 ask 社区案例,有开发者遇到相同问题,最终发现是 小米通道的
channel_id未在客户端正确设置 或 未在小米后台申请该通道。总结建议
由于您直连小米 API 正常,说明小米侧配置无误。问题大概率在于 uni-push 2.0 的
options参数格式未正确触发小米通道转发。建议:options.MI的嵌套结构plus.push.setChannel的channelId与小米后台及options中填写的一致taskid给官方人员查询具体下发日志要回复问题请先登录或注册
公告
更多>相关问题