8***@qq.com
8***@qq.com
  • 发布:25 分钟前
  • 更新:24 分钟前
  • 阅读:26

uni-push 2.0,小米厂商通道离线推送收不到

分类:uni-app

服务端 uniCloud getPushManager().sendMessage 单推,小米参数 channel_id + template_id+ template_param。个推返回 successed_offline。

但该消息在小米推送后台「所有消息」无任何记录,设备杀进程收不到,打开 App 秒弹(滞留贵方离线队列)。

关键对照:用同一 devToken、同一组小米参数直连小米官方 API(v3/message/regid),秒级 result:ok,小米后台有效设备 1/实际下发 1/送达 100%,手机离线正常弹出——证明 regId、参数、密钥、设备链路全部正确。

25 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

基于您描述的现象(successed_offline 但小米后台无记录、直连小米 API 正常),这通常不是参数错误,而是 uni-push 2.0 的通道选择策略或厂商通道配置未正确触达小米通道 导致的。

结合知识库中 DCloud 官方对类似问题的解答,请按以下步骤排查:

1. 检查 options 中的厂商通道配置(最关键)

uni-push 2.0 已不推荐使用 channel_id,请改用 categoryoptions 配置。确保您的 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 已废弃,请通过 categoryoptions 配置。如果 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 参数格式未正确触发小米通道转发。建议:

  1. 严格按照 options 文档 检查 options.MI 的嵌套结构
  2. 确保客户端 plus.push.setChannelchannelId 与小米后台及 options 中填写的一致
  3. 如仍无法解决,建议在 uni-push 官方技术交流群 提供 taskid 给官方人员查询具体下发日志
内容为 AI 生成,仅供参考

要回复问题请先登录注册