迁移到Firebase后,我测试了使用firebase控制台发送通知它工作正常,但我需要在特定时间发送每日通知,因此我不使用firebase控制台而是使用我以前的cron作业每天发送通知。我将https://android.googleapis.com/gcm/send
更改为https://fcm.googleapis.com/fcm/send
,但我的设备未收到任何通知。
有什么方法可以解决这个问题吗?或者我错过了什么?我的cron工作对我仍在使用GCM的设备工作正常。
这是我的代码
function sendNotificationFCM($apiKey, $registrationIDs, $messageText,$id) {
$headers = array(
'Content-Type:application/json',
'Authorization:key=' . $apiKey
);
$message = array(
'registration_ids' => $registrationIDs,
'data' => array(
"message" => $messageText,
"id" => $id,
),
);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'https://fcm.googleapis.com/fcm/send',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode($message)
));
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
答案 0 :(得分:10)
我在json中添加了notification
个对象。
我发现在我的remoteMessage.getNotification().getBody()
中它返回null,这就是为什么它没有收到我的cron发送的任何通知。
修改强>
这是我的json对象
$message = array(
'registration_ids' => $registrationIDs,
'notification' => array(
"title" => $id,
"body" => $messageText,
"icon" => "name_of_icon" ),
'data' => array(
"message" => $messageText,
"id" => $id,
),
);
答案 1 :(得分:6)
除了将网址更改为以下内容之外:
https://fcm.googleapis.com/fcm/send
您还必须更改发送请求数据的方式:
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // "to" replaces "registration_ids" of gcm in fcm
"data" : {
...
},
}
答案 2 :(得分:0)
我无法在所选答案中直接发表评论。考虑到json消息会根据您希望/需要在接收方os(android / ios)中接收的内容而变化。
例如,要让android在后台运行应用程序时获取通知,您需要在请求中添加 data json。
对于iOS,不需要数据键,但是您必须将 notification 键以及 isContentAvailble 标志设置为true,并将优先级设置为高。
在所选择的答案有效时,您使用 registration_ids 键仅应在将通知发送到多个设备时使用,也许您应该查看主题通知。
答案 3 :(得分:-2)
尝试使用:)