【问题标题】:FCM give success but Notification is not received by android deviceFCM 成功但 android 设备未收到通知
【发布时间】:2020-04-25 23:20:56
【问题描述】:

当我尝试通过 cURL 请求发送推送通知时,来自服务器的响应表明我成功了,但设备上没有收到消息。我已经尝试过使用多播和单个接收者有效负载。

这是我的 PHP 代码:

<?php
//API URL of FCM
$url = 'https://fcm.googleapis.com/fcm/send';

/*api_key available in:
Firebase Console -> Project Settings -> CLOUD MESSAGING -> Server key*/ $api_key = 'API_KEY';

$device_id = 'eE5U0IQEyTo:APA91bGplai6Bf5ko1hlW5y0oLb0WIa5JytpcuZ7B9lbIay8PNfPv2i1HMUqg1hDtPQqvhy4KLIZgyEh0BHHkfJtdX7E0Ftm-OaN23VahOoWAzjNP2QK8Se7PCibhooVG71jMPmzTHqd';

$fields = array (
    'registration_ids' => array (
            $device_id
    ),
    'data' => array (
        "title" => "test from server",
        "body" => "test lorem ipsum"
    )
);
//header includes Content type and api key
$headers = array(
'Content-Type:application/json',
'Authorization:key='.$api_key
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);

if ($result === FALSE) 
{
die('FCM Send Error: ' . curl_error($ch));
}
else
{
    curl_close($ch);
    print_r($result);
    return $result;
}
?>    

这是我在运行此代码时得到的响应:

{
    "multicast_id": 1338828245860499776,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [{
        "message_id": "0:1578484075615332%52ec0605f9fd7ecd"
    }]
}

【问题讨论】:

  • android 端的错误。 android dev 是否​​添加了适当的代码来接收通知?
  • 也不要在堆栈溢出中暴露你的 FCM 的api_key
  • 到目前为止有什么解决方案??

标签: php android firebase firebase-cloud-messaging


【解决方案1】:

完美的答案@Chetan,“数据”通知不会显示,但会显示“通知”。

所以你的数组应该是:

$fields = array (
    'registration_ids' => array (
            $device_id
    ),
    'notification' => array (
        "title" => "test from server",
        "body" => "test lorem ipsum"
    )
);

【讨论】:

    【解决方案2】:

    我已经通过删除应用程序并重新安装解决了问题。

    【讨论】:

    • 这个答案不能解决当前的问题。从应用程序重新安装可能无法解决当前问题,这里最可预测的情况是应用程序包含一些失败的流程并且无法接收来自 Firebase 的通知。
    【解决方案3】:

    将“数据”重命名为“通知”

    如果“通知”对象不存在,设备将不会在抽屉中显示通知。

    “数据”由应用解释

    “通知”由设备解释..

    您可以单独使用两者,但如果要显示通知,则需要“通知”对象。

    Reference

    【讨论】:

      猜你喜欢
      • 2017-10-24
      • 1970-01-01
      • 2020-01-23
      • 2018-10-09
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多