Firebaseを使ってiOS端末にPush通知を送信する(基本編)

Firebaseを使ってiOS端末にPush通知を送信する(基本編)

Firebaseを使って管理画面からPush通知を送り、iOS端末で受け取るまでを理解しやすいように最低限のコードの部分のみで検証してみたいと思います。

検証環境

  • XCode 7.3.1
  • iOS 8.1以上
  • Swift 2.2.1

手順

1.Firebaseに登録してプロジェクトを作成

まずはFirebaseに登録して以下のコンソールにログインし、プロジェクトを作成します。

https://console.firebase.google.com/

2.設定ファイルを作る

  • コンソールにある「iOS アプリに Firebase を追加」というリンクからplistを作成します。
  • 作成した「GoogleService-Info.plist」をプロジェクトに追加します。

※ BundleIDの入力が求められますが、Push通知を使える必要があるので当然ながらIDはワイルドカードでないExplicit App IDである必要があります。

3.CocoaPodsでライブラリをインストール

pod initを実行してPodfileを作成し、PodfileにPush通知に必要なライブラリを記述します。

# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

target 'FirebaseNotificationSample' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for FirebaseNotificationSample
  pod 'Firebase/Core'
  pod 'Firebase/Messaging'
end

追加したのはFIrebase/Coreと、Firebase/Messafingの2つです。

Podfileを編集したら、pod installでインストールします。

4.Push通知を受け取るためのコードをAppDelegateに記述

Firebaseの設定読み込みと、トークンをFirebaseに送信してPush通知を受け取れるようにします。

Firebaseの設定読み込みは以下の1行を追加するとGoogleService-Info.plistをみて設定してくれるので非常に簡単です。

FIRApp.configure()

ライブラリを読み込むためのimport Firebaseも忘れずに追加します。

以下のコードはトークンを取得して送信し、Pusuを受け取れるようにするための最低限のコードです。
didFinishLaunchingWithOptionsでアプリ起動時にPush通知のパーミッションをとり、didRegisterForRemoteNotificationsWithDeviceTokenでトークンをFirebaseに送信します。

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        FIRApp.configure()
        
        let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
    }

    func applicationDidEnterBackground(application: UIApplication) {
    }

    func applicationWillEnterForeground(application: UIApplication) {
    }

    func applicationDidBecomeActive(application: UIApplication) {
    }

    func applicationWillTerminate(application: UIApplication) {
    }
}

これでとりあえずPush通知を送れるようになります。

5.Push通知用証明書を登録

Pusu通知を送るためにはPush通知用証明書が必要なので、FirebaseコンソールからPush通知の証明書を登録します。

  • https://developer.apple.com/でPush通知用証明書を作成し、p12を出力します。
  • Firebase管理画面のプロジェクトの設定画面を開きます。
  • クラウドメッセージングタブから証明書(p12)をアップロードします。

6.Firebase管理画面からPush通知を送信

Push通知を送信する方法として、管理画面から送信する方法とHTTP APIから送信する方法がありますが、確認のため手軽な管理画面からの送信で試してみます。
定期送信する場合などはHTTP APIを使うことに鳴ると思います。

  • Firebase管理画面の左メニューから「Notification」を選択します。
  • 「最初のメッセージを送信」をクリックします。
  • メッセージ文を入力します。
  • ターゲットから該当のアプリを選択します。

これでアプリ全体に対してPusu通知を送ることができます。

Push通知が届かない場合

Pusu通知が飛ばない原因としていろいろ考えられますが、以下のポイントを確認して見ると良いです。

  • プロジェクトのCapabilitiesでPush NotificationsがONになっていない
  • Push通知用のP12がアップされていない。

20160819追記

デフォルトではMethod swizzingを使ってAPNsの設定を行うようになっているので、didRegisterForRemoteNotificationsWithDeviceTokenの実装は不要です。

自前で実装する場合はInfo.plistに以下の設定を追加します

FirebaseAppDelegateProxyEnabled=NO

//APNsの設定部分の実装
    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox)
    }

TAG

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

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