【问题标题】:FCM notifications not received未收到 FCM 通知
【发布时间】:2021-10-30 02:54:25
【问题描述】:

我有一个网络 (PHP) 应用程序,它使用户能够选择一组收件人并向他们发送一条消息,以便在我们的移动应用程序中阅读。为了通知收件人收到此消息,我需要通过 FCM 向他们的手机发送通知。

发送到FCM的数据包:

$packets[$device_token][$message_id] = [
    'notification' => [
        'title' => $msg['title'],
        'body' => $msg['content'],
        'sound' => 'default',
        'badge' => '1'
    ],
    'priority' => 'high',
    'data' => [
        // some data here
    ]
];

将数据发送到 FCM:

    $server_key = 'big_long_key';
    $fcm_url = 'https://fcm.googleapis.com/fcm/send';

    $headers = [];
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Authorization: key='. $server_key;

    foreach($packets as $device_token => $messages)
    {
        foreach($messages as $msg_id => $messages_to_send)
        {
            $messages_to_send['to'] = $device_token;
            $msg_json = json_encode($messages_to_send);

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $fcm_url);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
            curl_setopt($ch, CURLOPT_POSTFIELDS, $msg_json);
            curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $curl_response = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

            $curl_error = null;
            if( ($httpCode != 200) || (curl_errno($ch)) )
                $curl_error = ($httpCode != 200) ? 'Firebase response not received (200)' : 'Firebase cURL error: ' . curl_strerror(curl_errno($ch));

            curl_close($ch);
            $curl_response = json_decode($curl_response, true);

            // response handling 
        }
    }
}

相当多(例如,30% 左右)的收件人报告说他们在手机(iOS 和 Android)上没有收到任何警报。尽管我们从 FCM 收到了这些用户的消息 ID(我认为这表明通知已成功发送)。

我应该执行哪些检查以确保接收方电话应该显示/播放警报,我必须进行哪些更改以确保警报到达并得到正确处理?

【问题讨论】:

  • 试试这个技巧:对于那些无法收到通知的用户(1)在他们的Android手机中打开设置>(2)电池>(3)点击“自动启动管理器”>(4)设置您的移动应用程序自动启动。 (以我的经验iOS设备不会有这个问题,但你可以进一步检查)
  • @KenLee 谢谢你;我在其他地方看到过这个提示——麻烦的是,这些方向在某些手机上不起作用(包括我自己的);没有“自动启动管理器”...
  • 对于那些没有自动启动管理器的智能手机,可能是(1)接收通知没有问题;或 (2) 隐藏在某处——对于这种“隐藏”的情况,您需要与智能手机的制造商核实。
  • 进一步提示 - 您可以在那些“隐藏的自动启动管理器”手机中安装第 3 方软件来解决问题。只需访问 Google Play 商店并搜索“自动启动管理器”即可。祝你好运。

标签: php firebase-cloud-messaging


【解决方案1】:

我会检查 device_token 是否仍然有效。如果令牌已更改,则所需的收件人将不会收到通知。

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2018-08-30
    • 2020-04-25
    • 2019-09-08
    相关资源
    最近更新 更多