こんにちは。やらしみずです。
iOSアプリのPush通知をFirebase Cloud Messaging(以降FCM)を使って実装する際に、サーバーサイドの情報が少なくて困ったため、備忘録として残しておきます。
アプリ側の実装(トークンの作成)
公式のサイトを見ながらなんとか出来ました。
Objective-CとSiwfでの設定方法が載ってます。
ここは解説しないので頑張ってください笑
Apple プラットフォームで Firebase Cloud Messaging クライアント アプリを設定する
ちなみに、実装がうまく行っているかどうかのチェックはFirebase側上でできます。
時間の無駄にならないよう、かならず通知が飛ぶことを確認してからサーバーサイドの実装をしてください。
サーバー側の実装(端末に通知を送る)
公式のサイトでは、JS,Java,Go,Python,C#の実装方法が乗っております。
PHPを使いたかったのですが、載ってていなかったので困りました。。。
まぁRestのところに書いてあるコード?パラメータを見ながら実装していけばいいので、理解力のあるエンジニアの方だったら簡単にできるんでしょうね、、、
私は時間かかってしまいましたよ、、、
アプリサーバーからの送信リクエストを作成する | Firebase Cloud Messaging
送信パラメータ(基本形)
理解できる人は、このパラメータ作って投げればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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で実装した際の形はこんなかんじ。
通知音など別途オプションも付けてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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を使った通知の実装がかなり簡単だったので、もうこんな難しいのしたくないです。。。
コピペでぺっぺと作れるにこしたことはない、、、
コメント