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
相关产品推荐
相关产品推荐

