はじめに
今さら聞けないFirebaseシリーズ第五弾は、Cloud Messaging(プッシュ通知)の実装方法についてご紹介します。
※ちなみに、余談ですが、プッシュ通知を許諾を拒否したことがiOS8以上でも取れるようです。
Firebaseと関係ありません。
手順
- Firebase上でプロジェクトを作成
- Podfileに下記を追加する
- APNs証明書をFirebaseにアップロードする
- プッシュ通知を実装する
- Firebaseからプッシュ通知を配信する
実践
1. Firebase上でプロジェクトを作成
2. Podfileに下記を追加する
pod 'Firebase/Core'
pod 'Firebase/Messaging'
3. APNs証明書をFirebaseにアップロードする
設定 > クラウドメッセージング > iOSアプリの設定へp12ファイルをアップロードする
(今回は、開発用のAPNs証明書を利用します)
4. プッシュ通知を実装する
import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
registerUserNotificationSettings(application)
return true
}
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
if notificationSettings.types == .None {
//ここ注目!
print("プッシュ通知を許可しなかったぞ!")
} else {
application.registerForRemoteNotifications()
}
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Unknown)
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("Message ID: \(userInfo["gcm.message_id"]!)")
print("%@", userInfo)
}
func registerUserNotificationSettings(application: UIApplication) {
let types: UIUserNotificationType = [.Badge, .Sound, .Alert]
let settings = UIUserNotificationSettings(forTypes: types, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
}
}
5. Firebaseからプッシュ通知を配信する
FirebaseのNotification画面の新しいメッセージをボタンを押下して、
メッセージ文や、配信日等を設定する
5.1. カスタムデータを付与する
apns以外のキーは、詳細オプションから設定できます。
カスタムデータは、Dictonary型で格納されます
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("%@", userInfo)
print(userInfo["url"])
print(userInfo["title"])
}
動作確認
まとめ
Cloud Messaging(プッシュ通知)の実装方法についてご紹介しました。
APNs証明書は、開発用(Development)と製品用(Distribution)がありますのでご注意を!
プッシュ通知の許諾ダイアログの表示は、
起動時ではなく、プッシュ通知が必要になるタイミングで表示したほうが良いと思います。
また、プッシュ通知の許諾を拒否した場合は、
didRegisterUserNotificationSettings(UIUserNotificationType.None)で判断できますが、
許諾を拒否したユーザ向けに再度表示することはできないようです。
参考
こちらを参考にさせて頂きました。
ありがとうございました。
http://qiita.com/KentaKudo/items/3bbd232d4a97aeeca3fa
http://qiita.com/tokorom/items/6c6864fa8e841e50e37b