如何在服务器端实现firebase云消息传递?

迁移到Firebase后,我testing了通过使用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; 

}

Solutions Collecting From Web of "如何在服务器端实现firebase云消息传递?"

我在我的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, ), ); 

除了将url更改为以下内容:

 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" : { ... }, } 

看看这个完整的指南 。

尝试使用这个:)

FCM的Python客户端