php - 未收到 FCM 通知
问题描述
我有一个 Web (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(我认为这表明通知已成功发送)。
我应该执行哪些检查以确保接收电话应该显示/播放警报,以及我必须进行哪些更改以确保警报到达并得到正确处理?
解决方案
我会检查 device_token 是否仍然有效。如果令牌已更改,则所需的收件人将不会收到通知。
推荐阅读
- flutter - 在第二页执行之前调用的回调函数
- powershell - 如何将 Powershell CanonicalName 格式化为单独的列?
- python - 为什么我不能在 tkinter 中使用 get 属性?
- python-3.x - 多个嵌套函数输出
- javascript - 如何使用 Google Maps API 从 Places 中获取一致的 City、State 和 Country 值?
- python - 带有全局变量的类型提示(注释)错误
- python - 如何管理 conda 共享环境和本地环境?
- c++ - 对动态分配的类数组中指针的地址进行排序
- postgresql - 在 JDBC 中关闭后 PostgreSQL 连接仍然空闲
- r - 使用 MVN 包时如何修复错误“缺少参数“modelName”,没有默认值”