FirebaseのHTTP APIでiOS端末にPush通知を送る(Device Registration Token編)
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 Registration Tokenで送信するパターンを検証します。
対象 | 説明 |
---|---|
Device Registration Token | アプリ側で端末ごとに取得できるレジストレーショントークンを指定して送信する |
Topic Name | アプリが購読しているトピックの端末全体に送信する |
Device Group | HTTP APIで登録できるデバイスグループ毎に送る |
Device Registration Tokenを指定して送信する
端末側でDevice Registration Tokenを取得し、tokenを指定してHTTP APIでPush通知を送信します。
tokenを複数指定することで、複数の端末に送ることができます。
HTTP APIはRubyのfcmというGemを使って実行することにします。
https://github.com/spacialdb/fcm
tokenを取得する
アプリ側でtokenを取得してコンソールに出力し、送信テストのために記録しておきます。
AppDelegateに以下のように実装します。
import UIKit import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() // アプリ起動時にPush通知のパーミッションをとる+オブザーバを登録してトークンの更新を検知する registerForPushNotifications(application) return true } // Push Notification func registerForPushNotifications(application: UIApplication) { let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications() // Observerを登録し、トークン更新時に`tokenRefreshNotification`が呼ばれるようにする NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification(_:)), name: kFIRInstanceIDTokenRefreshNotification, object: nil) if let refreshedToken = FIRInstanceID.instanceID().token() { print("InstanceID token: \(refreshedToken)") } } func tokenRefreshNotification(notification: NSNotification) { let token = FIRInstanceID.instanceID().token()! print("InstanceID token: \(token)") } func applicationWillResignActive(application: UIApplication) { } func applicationDidEnterBackground(application: UIApplication) { } func applicationWillEnterForeground(application: UIApplication) { } func applicationDidBecomeActive(application: UIApplication) { } func applicationWillTerminate(application: UIApplication) { } }
アプリ起動時に実行されるregisterForPushNotificationsn
内ではオブザーバを登録し、トークンが更新された時にtokenRefreshNotification
が実行されるようにしてあります。
トークンはアプリ削除してインストールしなおした場合は確実に変わりますが、その他のタイミングでも変わります。
HTTP APIを実行するためのGemをインストール
以下のコマンドを実行してHTTP APIを実行するためのgemをインストールします。
gem install fcm
取得したDevice registration tokenに対してPush通知を送信する。
先ほど記録したDevice registration token
を指定して端末にPush通知を送信する例です。
require 'fcm' fcm = FCM.new("API KEYをいれます") options = { priority: 'high', notification: { body: 'test message!' }, } registration_ids = ['registrationi_idが入ります'] response = fcm.send(registration_ids, options)
ここで注意しないといけないのは、ペイロードに指定しているpriorityです。
high
を設定しないと送信されないようです。
Firebaseのドキュメントには、normal
の場合、スリープ状態だと届かないというようなことが書いてあるのでnormal
でも届きそうなのですが、確実に届けたい場合はhigh
にしたほうがよさそうです。
Device Registration Tokenがわかれば、Firebaseの管理画面からもPush通知を送ることが出来ます。
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
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境