FirebaseのHTTP APIでiOS端末にPush通知を送る(Device Group編)

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

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。