web-dev-qa-db-ja.com

サーバー側にfirebaseクラウドメッセージングを実装する方法

Firebaseに移行した後、firebaseコンソールを使用して通知の送信をテストしましたが、正常に動作しますが、特定の時間に毎日通知が必要なので、firebaseコンソールを使用する代わりに、以前のcronジョブを使用して通知を毎日送信します。私が変更され https://Android.googleapis.com/gcm/sendからhttps://fcm.googleapis.com/fcm/sendしかし、私のデバイスは通知を受け取りません。

これを解決する方法はありますか?または私は何かを見逃しましたか?まだGCMを使用しているデバイスでcronジョブが正常に機能しています。

これが私のコードです

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;
}
11
natsumiyu

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

この完全なガイド をご覧ください。

8
astuter

選択した回答に直接コメントすることはできません。 jsonメッセージは、受信者os(Android/ios)で受信/受信するものに応じて変化することを考慮してください。

例:Androidアプリがバックグラウンドにあるときに通知を取得するには、リクエストにdata jsonを追加する必要があります。

IOSでは、データキーは必要ありませんが、notificationキーとisContentAvailbleフラグをtrueに設定し、優先度をhighに設定する必要があります。

有効な選択された回答では、registration_idsを使用します。キーは、複数のデバイスに通知を送信する場合にのみ使用する必要があります。トピック通知を確認する必要があります。

0
vicco