LoginSignup
14
16

More than 5 years have passed since last update.

[Swift版] 今さら聞けないFirebase⑤ Cloud Messaging (プッシュ通知)

Last updated at Posted at 2016-08-13

はじめに

今さら聞けないFirebaseシリーズ第五弾は、Cloud Messaging(プッシュ通知)の実装方法についてご紹介します。

※ちなみに、余談ですが、プッシュ通知を許諾を拒否したことがiOS8以上でも取れるようです。
Firebaseと関係ありません。

手順

  1. Firebase上でプロジェクトを作成
  2. Podfileに下記を追加する
  3. APNs証明書をFirebaseにアップロードする
  4. プッシュ通知を実装する
  5. Firebaseからプッシュ通知を配信する

実践

1. Firebase上でプロジェクトを作成

Firebaseの導入方法は、こちらを参照してください。

2. Podfileに下記を追加する

Podfile
pod 'Firebase/Core'
pod 'Firebase/Messaging'

3. APNs証明書をFirebaseにアップロードする

設定 > クラウドメッセージング > iOSアプリの設定へp12ファイルをアップロードする
(今回は、開発用のAPNs証明書を利用します)

スクリーンショット 2016-08-13 21.14.07.png

p12ファイルの取得方法は、こちら

4. プッシュ通知を実装する

AppDelegate.swift
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画面の新しいメッセージをボタンを押下して、
メッセージ文や、配信日等を設定する

スクリーンショット 2016-08-13 21.20.42.png

5.1. カスタムデータを付与する

apns以外のキーは、詳細オプションから設定できます。

スクリーンショット 2016-08-13 21.22.55.png

カスタムデータは、Dictonary型で格納されます

AppDelegate.swift
    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                     fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

        print("%@", userInfo)
        print(userInfo["url"])
        print(userInfo["title"])
    }

動作確認

Screen Shot 2016-08-13 at 21.37.09.png

Screen Shot 2016-08-13 at 21.38.13.png

まとめ

Cloud Messaging(プッシュ通知)の実装方法についてご紹介しました。
APNs証明書は、開発用(Development)と製品用(Distribution)がありますのでご注意を!

プッシュ通知の許諾ダイアログの表示は、
起動時ではなく、プッシュ通知が必要になるタイミングで表示したほうが良いと思います。

また、プッシュ通知の許諾を拒否した場合は、
didRegisterUserNotificationSettings(UIUserNotificationType.None)で判断できますが、
許諾を拒否したユーザ向けに再度表示することはできないようです。

参考

こちらを参考にさせて頂きました。
ありがとうございました。

http://qiita.com/KentaKudo/items/3bbd232d4a97aeeca3fa
http://qiita.com/tokorom/items/6c6864fa8e841e50e37b

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16