FirebaseのHTTP APIでiOS端末にPush通知を送る(Device Group編)
FirebaseのHTTP APIを使ってPusu通知を送るための検証をしたいと思います。
FirebaseでPush通知を送る方法は管理画面から送る方法と、HTTP APIを使う方法があります。
単発であれば管理画面でも良さそうですが、定期的に送るとなった場合はHTTP APIを使う事になると思います。
検証環境
- XCode 7.3.1
- iOS 8.1以上
- Swift 2.2.1
- Ruby 2.3.1
送信対象の選択方法
以下の3種類を送信対象にできます。
今回はDevice Groupに対して送信するパターンを検証します。
対象 | 説明 |
---|---|
Device Registration Token | アプリ側で端末ごとに取得できるレジストレーショントークンを指定して送信する |
Topic Name | アプリが購読しているトピックの端末全体に送信する |
Device Group | HTTP APIで登録できるデバイスグループ毎 |
HTTP APIの実行には、rubyのfcmというgemを使います。
HTTP APIを実行するためのGemをインストール
以下のコマンドを実行してHTTP APIを実行するためのgemをインストールします。
gem install fcm
Device Groupに対して送信する
HTTP APIを使ってDevice Groupを作成し、作成したグループ全体に対してメッセージを送ります。
Device Groupに端末を追加するAPIと端末を削除するAPIが用意されているのでそれらを使ってDevice Groupの端末を追加/削除します。
Device Groupの利点としては、Device Registration Tokenで送る場合と違って、予め端末をまとめておくことで送信時に送る端末分のregistration_idを送る必要がないところだと思います。
グループごとにPush通知を分ける場合などは非常に便利です。
サーバを自前で用意せずとも、Firebaseのサーバだけで端末のグループ分けが完結できるようになっています。
Device Groupで送信する場合は、Device Groupに対応したキーを指定します。
キーは、Device GroupをHTTP APIで登録した際にレスポンスとして返却されます。
Device groupを登録する
Device groupを登録する場合には以下のAPIを使います。
https://android.googleapis.com/gcm/notification Content-Type:application/json Authorization:key=API_KEY project_id:SENDER_ID { "operation": "create", "notification_key_name": "appUser-Chris", "registration_ids": ["4", "8", "15", "16", "23", "42"] }
rubyから送信するコードの例です。
require 'fcm' fcm = FCM.new("API KEYをいれます") registration_ids = [ 'registrationi_idが入ります', 'registrationi_idが入ります', ] response = fcm.create_notification_key('device_group_002', 'sender_idを入れます', registration_ids) puts response
create_notification_keyは最初の引数にDevice group名、次の引数にsender_idをいれます。
HTTPヘッダにはproject_idという名前で指定するのでややこしいですが、Firebaseの管理画面でサーバーキー(APIキー)の横に表示されている送信者IDがsender_idです。
登録が成功すると以下のにレスポンスとしてnotification_key
が返却されます。
{ "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ" }
notification_key
はグループに対して送信する際に使います。
Device Groupに対してPush通知を送信
Device Groupに対してPush通知を送信する場合は、登録時に取得したnotification_key
を使います。
リクエストは以下のとおりです。
https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to": "aUniqueKey", "data": { "hello": "This is a Firebase Cloud Messaging Device Group Message!", } }
rubyから送信するコード例は以下のとおりです。
require 'fcm' fcm = FCM.new("API KEYをいれます") options = { priority: 'high', notification: { body: 'test message!' }, } response = fcm.send_with_notification_key('notification_keyが入ります', options) puts response
notification_keyとPush通知のペイロードを指定するだけでグループ全体に送れるので、管理する端末が増えてきた時などは楽になると思います。
Device groupの端末を追加・削除する
Device Groupの端末を追加、削除するAPIも用意されています。
追加時のリクエストは以下のとおりです。
削除する場合はoperationをremove
にします。
https://android.googleapis.com/gcm/notification Content-Type:application/json Authorization:key=API_KEY project_id:SENDER_ID { "operation": "add", "notification_key_name": "appUser-Chris", "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ", "registration_ids": ["51"] }
rubyから追加・削除する場合のコードです。
require 'fcm' fcm = FCM.new("API KEYをいれます") registration_ids = [ 'registrationi_idが入ります', 'registrationi_idが入ります', ] response = fcm.add_registration_ids('device_group_002', 'sender_idが入ります', 'notification_keyが入ります', registration_ids) puts response
削除の場合は’fcm.remove_registration_ids’で引数は同じです。
TAG
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境