You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HMS Push Kit相同JSON请求体推送时而为数据消息时而为通知消息如何解决

HMS Push Kit 纯数据消息强制送达配置方案

问题根因:现有请求体仅配置了data字段,缺少安卓端推送的强制策略配置,HMS服务端会根据推送内容、目标设备状态等维度智能判断推送类型,偶发将数据消息识别为通知消息走系统托盘展示逻辑。

具体修改步骤

  • 第一步:补充android层级配置,强制禁用系统自动展示
    在message字段下新增android配置,设置foreground_show为false,该参数为false时,无论应用处于前台还是后台,所有推送都会走透传通道触发onMessageReceived,不会被系统托盘接管。同时确保整个请求体中不要出现任何层级的notification字段,只要携带该字段,HMS服务端会直接将消息判定为通知栏消息,不会走透传通道。
  • 第二步:清理数据内容避免触发通知识别规则
    检查$this->message序列化后的内容,不要包含HMS预定义的通知类关键字(如title、body、notification、image等),避免服务端误识别为通知消息。
  • 第三步:可选配置强制透传标识
    可在android配置下新增fast_app_target字段,值设为2,强制指定推送走透传通道,进一步规避厂商智能分类策略的影响。

修改后完整代码示例

$body = [
    "validate_only" => false,
    "message" => [
        "data" => json_encode($this->message),
        "token" => $this->tokens,
        // 新增安卓端强制透传配置
        "android" => [
            "foreground_show" => false,
            "fast_app_target" => 2
        ]
    ]
];
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://push-api.cloud.huawei.com/v1/{some_id}/messages:send',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => json_encode($body),
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json; charset=UTF-8',
        'Authorization: Bearer ' . $this->access
    )
));
$response = curl_exec($curl);
curl_close($curl);

额外校验项

确认华为开发者后台推送服务的配置中,没有开启「数据消息转通知」的兜底策略,同时应用已正常申请透传消息权限。

内容的提问来源于stack exchange,提问作者Nickola Jarjous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:09:00