しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【iOS】FIrebaseでpush通知

Firebaseを使ったpush通知を試してみました。

APNs証明書の準備

まずはプッシュ通知用の証明書を作成します。
キーチェーンを開き、「認証局に証明書を要求」を選択します。

f:id:llcc:20171012142142p:plain

次の画面で、メールアドレスと名前を入力して証明書要求を作成します。

f:id:llcc:20171012142307p:plain

CertificateSigningRequest.certSigningRequestというファイルが保存されるので、それを使って証明書を作成します。
まずはMemberCenterのCertificates, Identifiers & Profilesにアクセスして下さい。
そこで、プッシュ通知を使いたいアプリIDの「Push Notifications」にチェックを入れ、先程作ったファイルをアップロードします。

f:id:llcc:20171012142527p:plain

そのまま手順に従っていけば証明書を作成する事ができます。

作成したら、それをダブルクリックでキーチェーンに登録、登録した証明書を右クリックしてp12に書き出しをします。

f:id:llcc:20171012143124p:plain

作成が終わったら、Firebaseのそのプロジェクトの設定に証明書をアップロードします。
これでFirebase上の設定は整いました。

f:id:llcc:20171012143232p:plain

プッシュ用のトークンを受け取る

続けてコード上にプッシュトークンを受け取る処理を追加します。
まずはCocoaPodsでFirebase/CoreとFirebase/Messagingをインストールします。

target 'MyApp' do
  use_frameworks!

  pod 'Firebase/Core'
  pod 'Firebase/Messaging'
end

次にCapabilitiesでPush通知を有効にします。

f:id:llcc:20171012144537p:plain

MemberCenterからProvisioningProfileも作成します。

次はAppDelegateなどに、Firebaseの初期化とプッシュ通知の許可を求める処理を追加します。

import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        FIRApp.configure()
        application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
        application.registerForRemoteNotifications()
        
        return true
    }
}

次はInfo.plistにFirebaseAppDelegateProxyEnabledというキーを追加してNOをセットします。

f:id:llcc:20171012150137p:plain

AppDelegateに通知トークンをサーバーに送る処理を追加します。

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .unknown)
}

以上で対応は完了です。
FirebaseのNotificationからプッシュ通知を送ればデバイスに届くようになりました。

f:id:llcc:20171012145327p:plain

f:id:llcc:20171012145425p:plain