iOS での Firebase Cloud Messaging クライアント アプリの設定

iOS クライアント アプリの場合、次の 2 通りの補完的な用途で Firebase Cloud Messaging を実装できます。

  • Firebase Cloud Messaging APNs インターフェースを介して最大 4 KB の基本的なプッシュ メッセージを受信する。

  • フォアグラウンドで動作しているアプリで、メッセージをアップストリームに送信するか、最大 4 KB のペイロードをダウンストリームで受信する。

Objective-C または Swift でクライアント コードを記述するには、FIRMessaging API を使用することをおすすめします。クイックスタート サンプルでは両方の言語のサンプルコードをご覧いただけます。

Firebase Cloud Messaging でのメソッドの実装入れ替え

FCM SDK では、FCM 登録トークンに対する APNs トークンのマッピングと、ダウンストリーム メッセージのコールバック処理中の分析データの取得という 2 つの主要領域でメソッドの実装入れ替えを行います。入れ替えを使用しない場合、アプリの Info.plist ファイルにフラグ FirebaseAppDelegateProxyEnabled を追加し、これを NO(ブール値)に設定することによって、入れ替えを無効にできます。このガイドの関連領域には、メソッドの実装入れ替えを有効にした場合としない場合の両方のコード例が記されています。

Firebase を iOS プロジェクトに追加する

このセクションで説明しているタスクは、他の Firebase 機能をアプリですでに有効にしている場合は完了している可能性があります。Notifications Composer については特に、APNs 証明書をアップロードしてリモート通知に登録する必要があります。

前提条件

事前に次の環境を準備しておく必要があります。

  • Xcode
    • Objective-C の場合、7.0 以降
    • Swift の場合、8.0 以降
  • iOS 7 以降をターゲットにした Xcode プロジェクト
  • Swift プロジェクトでは必ず Swift 3.0 以降を使用する
  • アプリのバンドル ID
  • CocoaPods 1.0.0 以降
  • クラウド メッセージングの場合
    • 物理 iOS 端末
    • Apple Developer アカウントの Apple Push Notification Authentication Key
    • Xcode において [アプリケーション] > [機能] でプッシュ通知を有効にする

Xcode プロジェクトをまだ用意していない場合に Firebase 機能を試すだけであれば、クイックスタート サンプルをダウンロードしてご利用いただけます。クイックスタートを使用する場合は、バンドル識別子が次のステップで必要になるため、プロジェクト設定からバンドル識別子を忘れずに取得してください。

アプリに Firebase を追加する

Firebase をアプリに追加するには、Firebase プロジェクトと、アプリ用の Firebase 設定ファイルが必要です。

  1. Firebase プロジェクトをまだ用意していない場合は、Firebase コンソールで Firebase プロジェクトを作成します。モバイルアプリと関連付けられた既存の Google プロジェクトがある場合は、[Google プロジェクトをインポート] をクリックします。それ以外の場合は、[新規プロジェクトを作成] をクリックします。
  2. [iOS アプリに Firebase を追加] をクリックして設定手順に沿って操作します。既存の Google プロジェクトをインポートする場合、このステップは自動的に行われることがあります。その場合は、設定ファイルをダウンロードするだけでかまいません。
  3. プロンプトが表示されたら、アプリのバンドル ID を入力します。必ずアプリで使用しているバンドル ID を入力してください。バンドル ID を設定できるのは、アプリを Firebase プロジェクトに追加するときだけです。
  4. GoogleService-Info.plist ファイルをダウンロードします。このファイルはいつでももう一度ダウンロードできます。
  5. このファイルを Xcode プロジェクトのルートにコピーしていない場合はコピーします。

SDK を追加する

新しいプロジェクトを設定する場合は、SDK をインストールする必要があります。この操作は、Firebase プロジェクトの作成の一環として完了済みの場合があります。

ライブラリをインストールするときは CocoaPods を使用することをおすすめします。インストール手順に沿って CocoaPods をインストールしてください。CocoaPods を使用しない場合は、以下の手順に沿って SDK フレームワークを直接統合する方法もあります。

クイックスタート サンプルをダウンロードしていずれかのプログラムを実行する場合、Xcode プロジェクトと Podfile がすでに存在していても、ポッドをインストールして GoogleService-Info.plist ファイルをダウンロードする必要があります。Firebase ライブラリをプロジェクトに統合する場合は、使用するライブラリ用のポッドを追加する必要があります。

  1. Xcode プロジェクトをまだ用意していない場合は作成します。

  2. Podfile がない場合は作成します。

    $ cd your-project directory
    $ pod init
    
  3. インストールするポッドを追加します。次のようにして Podfile にポッドを含めます。

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

    これにより、iOS アプリで Firebase を稼働させるために必要なライブラリが、Firebase 向け Google アナリティクスとともに追加されます。現在使用可能なポッドとサブスペックのリストを以下に示します。機能固有の設定ガイドへのリンクもあります。

  4. ポッドをインストールし、.xcworkspace ファイルを開いて Xcode でプロジェクトを確認します。

    $ pod install
    $ open your-project.xcworkspace
    
  5. Firebase コンソールで GoogleService-Info.plist ファイルをダウンロードし、アプリに含めます。

APNs 認証キーをアップロードする

APNs 認証キーを Firebase にアップロードします。APNs 認証キーがまだない場合は、FCM での APNs の設定をご覧ください。

  1. Firebase コンソールのプロジェクト内で歯車アイコンを選択し、[プロジェクトの設定]、[クラウド メッセージング] タブの順に選択します。

  2. [iOS アプリの設定] の下の [APNs 認証キー] で [アップロード] ボタンをクリックします。

  3. キーが保存されている場所に移動し、キーを選択して [開く] をクリックします。キーのキー ID(Apple Developer Member Center の [Certificates, Identifiers & Profiles] で確認できます)を追加し、[アップロード] をクリックします。

アプリで Firebase を初期化する

Firebase 初期化コードをアプリケーションに追加する必要があります。Firebase モジュールをインポートして、次に示すように共有インスタンスを設定します。

  1. Firebase モジュールを UIApplicationDelegate サブクラスにインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. FirebaseApp 共有インスタンスを設定します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドを使用します。

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

リモート通知に登録する

起動時またはアプリケーション フローの必要な時点で、リモート通知にアプリを登録します。次のように registerForRemoteNotifications を呼び出します。

Swift

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
  // iOS 10 or later
  #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions =
      UNAuthorizationOptionAlert
      | UNAuthorizationOptionSound
      | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) {
      }];
  #endif
}

[[UIApplication sharedApplication] registerForRemoteNotifications];

登録トークンにアクセスする

デフォルトでは、FCM SDK はアプリが初めて起動されたときにクライアント アプリのインスタンスの登録トークンを生成します。APNs 端末トークンと同様に、このトークンを使用してアプリのこの特定のインスタンスに通知メッセージを送信できます。

このセクションでは、トークンを取得する方法、およびトークンに対する変更をモニタリングする方法について説明します。トークンは最初の起動後にローテーションされている可能性があるため、更新された最新の登録トークンを取得することを強くおすすめします。

登録トークンは次のような場合に変更されることがあります。

  • アプリが新しい端末で復元された場合
  • ユーザーがアプリをアンインストール / 再インストールする場合
  • ユーザーがアプリのデータを消去する場合

現在の登録トークンの取得

現在のトークンが必要な場合は取得します。トークンがまだ生成されていない場合、null が返されることがあります。

Swift

let token = Messaging.messaging().fcmToken
print("FCM token: \(token ?? "")")

Objective-C

NSString *fcmToken = [FIRMessaging messaging].FCMToken;
NSLog(@"FCM registration token: %@", fcmToken);

トークンの生成のモニタリング

トークンが更新されるたびに通知を受けるには、`FIRMessagingDelegate` プロトコルに準拠したデリゲートを提供します。次の例は、デリゲートを登録し、適切なデリゲート メソッドを追加しています。

Swift

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")
}

Objective-C

- (void)messaging:(nonnull FIRMessaging *)messaging didRefreshRegistrationToken:(nonnull NSString *)fcmToken {
  // Note that this callback will be fired everytime a new token is generated, including the first
  // time. So if you need to retrieve the token as soon as it is available this is where that
  // should be done.
  NSLog(@"FCM registration token: %@", fcmToken);

  // TODO: If necessary send token to application server.
}

別の方法として、デリゲート メソッドを提供する代わりに、kFIRMessagingRegistrationTokenRefreshNotification という名前の NSNotification をリッスンすることもできます。[FIRMessaging messaging]. FCMToken プロパティは常に現在のトークン値を持ちます。

実装入れ替えが無効な場合の APNs トークンと登録トークンとのマッピング

メソッドの実装入れ替えを無効にした場合は、明示的に APNs トークンを FCM 登録トークンにマッピングする必要があります。メソッド didRegisterForRemoteNotificationsWithDeviceToken オーバーライドして、APNs トークンを取得してから setAPNSToken を呼び出します。

APNSToken プロパティを使用して、APNs トークンを提供します。

Swift

func application(application: UIApplication,
                   didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
    - (void)application:(UIApplication *)application
        didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                 [FIRMessaging messaging].APNSToken = deviceToken;];
    }

FCM 登録トークンが生成されると、実装入れ替えを有効にしたときと同じメソッドを使用してトークンにアクセスし、更新イベントをリッスンすることができます。

既存のユーザー APNs トークンのインポート

FCM クライアント アプリにオンボードする既存のユーザー層がある場合、インスタンス ID で提供される batchImport を使用します。この API によって、既存の iOS APNs トークンを FCM に一括インポートして、新しい有効な登録トークンにマッピングできます。

次のステップ

iOS クライアントの設定を行うと、メッセージ処理やその他の高度な動作をアプリに割り当てられるようになります。詳細については、以下のガイドを参照してください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。