问题
After migrating to Firebase, i tested sending notification by using the firebase console it works fine, but i need a daily notification on a specific time so instead of using the firebase console i use my former cron job to send notification daily. I changed https://android.googleapis.com/gcm/send
to https://fcm.googleapis.com/fcm/send
but my device doesn't receive any notification.
Is there any way to solve this? Or did I miss anything? my cron job is working fine for my devices that is still using GCM.
Here's my code
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;
}
回答1:
I added notification
object in my json.
I found out that in my remoteMessage.getNotification().getBody()
it returns null that's why it doesn't receive any notification send by my cron.
Edit
Here's my json object
$message = array(
'registration_ids' => $registrationIDs,
'notification' => array(
"title" => $id,
"body" => $messageText,
"icon" => "name_of_icon" ),
'data' => array(
"message" => $messageText,
"id" => $id,
),
);
回答2:
Apart from changing the url to following:
https://fcm.googleapis.com/fcm/send
You also have to change the way you send request data:
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // "to" replaces "registration_ids" of gcm in fcm
"data" : {
...
},
}
Check out this complete guide.
回答3:
I am not able to comment directly in the selected answer. Take in consideration that the json message changes according to what you want/need to receive in the recipient os (android/ios).
e.g for android to get the notifications when the app is in background you need to add the data json in your request.
For iOS the data key is not needed, but you must have the notification key along with isContentAvailble flag set to true and priority set to high.
In the selected answer as valid, you use registration_ids key should be only used when you are sending the notification to more than one device, maybe you should take a look to the topics notifications.
回答4:
try use this :)
Python client for FCM
来源:https://stackoverflow.com/questions/37454822/how-to-implement-firebase-cloud-messaging-in-server-side