【Firebase】iOSのPush通知をFirebase Cloud Messagingで実装 – サーバー側(PHP)-

雑記
Alexas_Fotos / Pixabay
この記事は約5分で読めます。

こんにちは。やらしみずです。

iOSアプリのPush通知をFirebase Cloud Messaging(以降FCM)を使って実装する際に、サーバーサイドの情報が少なくて困ったため、備忘録として残しておきます。

アプリ側の実装(トークンの作成)

公式のサイトを見ながらなんとか出来ました。
Objective-CとSiwfでの設定方法が載ってます。

ここは解説しないので頑張ってください笑

iOS で Firebase Cloud Messaging クライアント アプリを設定する

ちなみに、実装がうまく行っているかどうかのチェックはFirebase側上でできます。

時間の無駄にならないよう、かならず通知が飛ぶことを確認してからサーバーサイドの実装をしてください。

サーバー側の実装(端末に通知を送る)

公式のサイトでは、JS,Java,Go,Python,C#の実装方法が乗っております。

PHPを使いたかったのですが、載ってていなかったので困りました。。。

まぁRestのところに書いてあるコード?パラメータを見ながら実装していけばいいので、理解力のあるエンジニアの方だったら簡単にできるんでしょうね、、、

私は時間かかってしまいましたよ、、、

アプリサーバーからの送信リクエストを作成する  |  Firebase

送信パラメータ(基本形)

理解できる人は、このパラメータ作って投げればOKです。

POST "https://fcm.googleapis.com/v1/projects/<プロジェクトID>/messages:send" HTTP/1.1
→(旧) POST "https://fcm.googleapis.com/fcm/send" //これでも行ける

Content-Type: application/json
Authorization: Bearer "サーバーキー" // Firebaseの[CloudMessaging->サーバーキー]をここに

{
   "message":{
      "token":"発行されたデバイストークン",
      "notification":{
        "body":"Message本文",
        "title":"Messageタイトル",
      }
   }
}

PHPでの実装方法

PHPで実装した際の形はこんなかんじ。

通知音など別途オプションも付けてます。

function pushNotification() {
   $url = 'https://fcm.googleapis.com/fcm/send';
   $headers = array(
     'Content-Type: application/json',
     'Authorization: key='."Google Cloud Message キー",
   );
 
   $posts = array(
     'registration_ids' => デバイストークン,
    'data' => array(
      'message' => "Message本文",
    ),
    "notification" => [
      "title" => "Messageタイトル",
      "body" => "Message本文",
      "badge" => 1, // 通知を送った際に、アプリのアイコンに表示するバッチ
      "sound" => "default", // 通知を送った際に、音を出すかの設定
    ],
  );

  // curl処理
  $ch = curl_init($url);                                     // 初期化
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);               // サーバー証明書の検証を行わないようにする
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);            // ヘッダー定義
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);            // 返り値を文字列で返すように
  curl_setopt($ch, CURLOPT_POST, TRUE);                      // POSTで送信する & データあり
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($posts)); // POSTするデータ(JSON形式で渡す必要あり)

  $result = curl_exec($ch); // 送信 & 帰って来た値はよしなに
  curl_close($curl);        // セッションを閉じる 
}

なんかエラー出てきてしまったかたは、curlのオプションが足りないかもしれないので、この記事などを参考にして実装してみてください。

最後に

こんだけやっておいてなんですが、Expoを使った通知の実装がかなり簡単だったので、もうこんな難しいのしたくないです。。。

コピペでぺっぺと作れるにこしたことはない、、、

コメント

タイトルとURLをコピーしました