wake-up-neo.com

Wie implementiere ich Firebase Cloud Messaging auf Server-Seite?

Nach der Migration zu Firebase habe ich das Senden von Benachrichtigungen mithilfe der Firebase-Konsole getestet. Das funktioniert einwandfrei. Ich brauche jedoch eine tägliche Benachrichtigung zu einem bestimmten Zeitpunkt. Statt der Firebase-Konsole verwende ich meinen früheren Cron-Job, um täglich Benachrichtigungen zu senden. Ich habe https://Android.googleapis.com/gcm/send in https://fcm.googleapis.com/fcm/send geändert, aber mein Gerät erhält keine Benachrichtigung. 

Gibt es eine Möglichkeit, dies zu lösen? Oder habe ich etwas vermisst? Mein Cronjob funktioniert gut für meine Geräte, die immer noch GCM verwenden. 

Hier ist mein 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;

}

10
natsumiyu

Ich habe notification object zu meinem Json hinzugefügt. Ich habe herausgefunden, dass es in meiner remoteMessage.getNotification().getBody() null zurückgibt, weshalb es keine Benachrichtigung von meinem Cron erhält. 

Bearbeiten

Hier ist mein Json-Objekt 

$message = array(
            'registration_ids' => $registrationIDs,
            'notification' => array(
                                    "title" => $id, 
                                    "body" => $messageText,
                                    "icon" => "name_of_icon" ),
            'data' => array(
                    "message" => $messageText,
                    "id" => $id,
            ),
    );
10
natsumiyu

Abgesehen davon, dass die URL folgendermaßen geändert wird:

https://fcm.googleapis.com/fcm/send

Sie müssen auch die Art und Weise ändern, in der Sie die Anfragedaten senden:

 Content-Type:application/json
 Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

 {
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // "to" replaces "registration_ids" of gcm in fcm
   "data" : {
   ...
  },
}

Check out das komplette Handbuch .

4
abhilvare

Ich kann die ausgewählte Antwort nicht direkt kommentieren. Bedenken Sie, dass sich die Json-Nachricht entsprechend dem ändert, was Sie im Empfänger-Betriebssystem (Android/IOS) erhalten möchten/müssen.

b. für Android, um Benachrichtigungen zu erhalten, wenn sich die App im Hintergrund befindet, müssen Sie den data -Json in Ihre Anfrage einfügen.

Für iOS wird der Datenschlüssel nicht benötigt. Sie müssen jedoch die Taste notification zusammen mit dem Flag isContentAvailble auf true setzen und die Priorität auf hoch setzen.

In der ausgewählten Antwort als gültig verwenden Sie die Taste registration_ids, die nur verwendet werden sollte, wenn Sie die Benachrichtigung an mehrere Geräte senden. Vielleicht sollten Sie sich die Benachrichtigungen zu den Themen ansehen.

0
vicco