HarmonyOS 鸿蒙Next中收不到 push message

HarmonyOS 鸿蒙Next中收不到 push message

push message

{"target":{"token":["MAR8LgVPHAQEN7EAstTWfAAAAGQAAAAAAAVOddEf6Jto5TOP5qD3-TRYMyATDBsDdiJ476M0r7Gut0_YcxHqJT1d542Zg5cJdvcMGGgllKgJ5MwZ"]},"payload":{"notification":{"foregroundShow":false,"category":"MARKETING","title":"UPS 202408016615","body":"使用电池","clickAction":{"actionType":0,"data":{"uid":"202408016615@ayi9.com"}}}}} 

发送成功

{"code":"80000000","msg":"Success","requestId":"176162406935982411004501"} 

app 没有收到,也没有显示

手机已经人工设置允许通知,token 是对的。  
是不是那里少了点什么东西

更多关于HarmonyOS 鸿蒙Next中收不到 push message的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

开发者你好,可以根据下面的修改建议,排查一下问题:

【修改建议】

  • 当收到资讯营销类消息时,由于静默通知仅在通知中心展示,并不会弹框提示,需要去通知中心查看。通知中心如下图,可以查看对应消息。
  • 若终端上的app手动关闭了消息提醒方式,终端收到消息不会有提醒,需要打开所需的提醒方式。
  • 打开AGC平台,按查询路径:“开发与服务>增长>推送服务>自助分析(Beta)”,在自助分析里面输入requestId和token,系统会自动分析消息推送失败的可能原因,注意requestId有效期为三天。
    也可能是Push token不是有效的token,建议您在应用启动时调用getToken()接口,若设备的Push Token发生变化,及时上报到您的应用服务器更新Push Token,以防由于Push Token失效导致收不到消息。
  • 检查服务端发送请求时是否正确携带Authorization请求头,value为JWT格式字符串,是基于服务账号生成鉴权令牌。可参考:请求体结构说明
  • 推送后台消息用于内容不频繁更新的场景,不会显示通知、播放铃声或改变应用角标。终端设备接收到后台消息后,如果应用进程在前台则将消息内容传给应用;如果应用进程不在前台则缓存消息,等待应用启动后再传给应用。
  • 如果设备离线,Push Kit会缓存消息,待设备上线后,再将消息推送给设备。
  • 检查自分类权益是否已申请,并且打开自分类权益开关,请参考:申请推送场景化消息权益
  • 检查是否受到消息频控。
    • 调测阶段:每个项目每个自然日最多可推送1000条测试消息(非设备级,所有设备共用1000条),且不受场景化消息频控限制(即不区分通知消息类别、不区分场景化消息类别)。可以在消息发送请求体中设置pushOptions.testMessage为true,发送测试消息。
    • 正式发布阶段:单设备单应用下每个自然日最多可推送3000条消息,并受场景化消息频控限制。
  • 检查module.json5中skills配置是否正确。
    • 应用只需要配置一条skill对象。
      • 设置action参数点击消息进入应用页面(若skills中添加了uris参数,则uris内容需为空
        {
          "actions": [
            "com.test.action"
          ]
        }
        
      • 设置uris参数点击消息进入应用页面(skills中必须同时设置actions参数,actions参数需为空
        {
          "actions": [
            ""
          ],
          "uris": [
            {
              "scheme": "https",
              "host": "www.xxx.com",
              "port": "8080",
              "path": "push/test"
            }
          ]
        }
        
    • 应用需要配置多条skill对象。
      比如同时设置推送消息跳转能力和其他跳转能力(如NFC跳转、浏览器跳转等),可以在skills数组中创建不同的skill对象,分别映射对应的能力。
    • {
        "name": "TestAbility",
        "srcEntry": "./ets/abilities/TestAbility.ets",
        "exported": false,
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "skills": [
          // 保持现有skill对象不变
          {
            "actions": [
              "com.app.action"
            ]
          },
          // 新增一个独立的skill对象,配置uris参数,且必须同时配置actions参数,actions参数为空字符串
          {
            "actions": [""],
            "uris": [
              {
                "scheme": "https",
                "host": "www.xxx.com",
                "port": "8080",
                "path": "push/test"
              }
            ]
          },
          {
            // 分享
            "actions": [
              "ohos.want.action.sendData"
            ],
            "uris": [
              {
                "scheme": "file",
                "type": "text/plain"
              }
            ]
          }
        ]
      }
      

【总结】
Push Kit消息下发成功后,可能会因为消息频控、通知开关未打开等原因,导致端侧消息未展示。通常可以从消息通知是否打开、消息分类权益是否申请、配置文件中skills标签是否正确这几个方面进行排查。同时,建议开发消息回执,Push服务端会将消息送达状态以回执消息形式发送给应用回执服务端,方便获取消息下达端的状态,通过回执状态码定位问题。

【背景知识】

  • Push Kit(推送服务):华为提供的消息推送平台,建立了从云端到终端的消息推送通道。
  • 申请推送场景化消息权益:Push Kit支持多种场景化消息类型,其中部分场景化消息类型需要开发者申请特殊权益才能正常发送。
  • 请求通知授权:应用需要获取用户授权才能发送通知。
  • 开发消息回执:消息回执是指Push Kit服务端将消息推送到用户终端之后,端侧会给Push服务端反馈送达结果。与此同时,Push服务端会将消息送达状态以回执消息形式发送给应用回执服务端,方便开发者获取消息下达端侧后的状态,定位问题等。
  • 发送消息通知:通知消息通过Push Kit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。

更多关于HarmonyOS 鸿蒙Next中收不到 push message的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


设置pushOptions.testMessage为true 就正常收到了.

问题解决.

今天再试,偶然发现收到了2条消息。再试,又收不到了。 是否说明 app 设置是对的 ?

消息类型要看下,有限制,

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

根据ID查一下原因

到那里查,

推送管理后台有一个地方可以查,

鸿蒙Next中收不到推送消息可能涉及以下原因:推送服务未正确配置或初始化;设备网络连接不稳定或中断;应用通知权限未开启;系统推送服务版本不兼容或存在Bug;设备处于省电模式限制了后台活动;用户token注册或更新失败。排查步骤包括检查网络状态、确认通知权限开启、验证推送服务配置、查看系统推送服务日志。

从你的描述来看,推送请求已成功发送(返回码 80000000),但设备未收到消息。可能的原因包括:

  1. foregroundShow: false 配置问题
    该参数设置为 false 时,应用在前台运行时不会显示通知。请检查应用是否处于前台状态,可尝试将值改为 true 进行测试。

  2. 通知渠道(Category)配置
    "category": "MARKETING" 需要与设备侧的通知渠道匹配。确认应用内已正确声明并启用同名通知渠道,且用户未手动关闭该渠道的通知权限。

  3. Payload 格式或处理逻辑

    • 检查应用内消息解析逻辑是否能正确处理 clickAction 中的 actionTypedata
    • 确保 onPushMessage 回调已正确实现,并验证消息是否被过滤或丢弃。
  4. 设备网络或系统限制
    即使 token 有效,设备长连接可能因网络策略、省电模式等中断。测试时请保持设备活跃网络连接,并暂时关闭电池优化。

建议在开发阶段开启调试日志,确认推送消息是否到达设备及被系统服务接收。若问题持续,需进一步检查设备日志中推送服务的错误记录。

回到顶部