it-swarm.com.ru

Как реализовать Firebase облачных сообщений на стороне сервера?

После перехода на 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;

}

10
natsumiyu

Я добавил объект notification в мой json. Я обнаружил, что в моей функции 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,
            ),
    );
10
natsumiyu

Помимо изменения 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" : {
   ...
  },
}

Проверьте это полное руководство .

4
abhilvare

Я не могу комментировать прямо в выбранном ответе. Примите во внимание, что сообщение json изменяется в зависимости от того, что вы хотите/должны получить в ОС получателя (Android/ios).

например, чтобы Android получал уведомления, когда приложение работает в фоновом режиме, вам нужно добавить data json в ваш запрос.

Для iOS ключ данных не требуется, но вы должны иметь ключ Notification наряду с isContentAvailble flag, установленным в true, и приоритетом, установленным в высоком.

В выбранном ответе как действительном, вы используете registration_ids ключ должен использоваться только при отправке уведомления более чем на одно устройство, возможно, вам стоит взглянуть на уведомления по темам.

0
vicco