Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

AppleプラットフォームでFirebaseCloudMessagingクライアントアプリを設定する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Apple クライアント アプリの場合、Firebase Cloud Messaging APNs インターフェイス経由で最大 4000 バイトの通知とデータ ペイロードを受信できます。

クライアント コードを Objective-C または Swift で記述するには、 FIRMessaging APIを使用することをお勧めします。クイックスタートの例では、両方の言語のサンプル コードが提供されています。

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

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

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

まだ行っていない場合は、 Firebase を Apple プロジェクトに追加します

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

APNs 認証キーを Firebase にアップロードします。 APNs 認証キーをまだ持っていない場合は、 Apple Developer Member Centerで必ず作成してください。

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

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

  3. キーを保存した場所を参照して選択し、[開く] をクリックします。キーのキー ID ( Apple Developer Member Centerで入手可能) を追加し、[アップロード] をクリックします。

リモート通知に登録する

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

迅速

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 ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // 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) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

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

デフォルトでは、FCM SDK は、アプリの起動時にクライアント アプリ インスタンスの登録トークンを生成します。 APNs デバイス トークンと同様に、このトークンを使用すると、対象を絞った通知をアプリの特定のインスタンスに送信できます。

通常、Apple プラットフォームがアプリの起動時に APNs デバイス トークンを配信するのと同じ方法で、FCM はFIRMessagingDelegatemessaging:didReceiveRegistrationToken:メソッドを介して登録トークンを提供します。 FCM SDK は、最初のアプリの起動時、およびトークンが更新または無効化されるたびに、新規または既存のトークンを取得します。いずれの場合も、FCM SDK は有効なトークンを使用して、 messaging:didReceiveRegistrationToken:を呼び出します。

登録トークンは、次の場合に変更される場合があります。

  • アプリは新しいデバイスに復元されます
  • ユーザーがアプリをアンインストール/再インストールする
  • ユーザーがアプリ データを消去します。

メッセージング デリゲートを設定する

登録トークンを受け取るには、メッセージング デリゲート プロトコルを実装し、 [FIRApp configure]を呼び出した後にFIRMessagingdelegateプロパティを設定します。たとえば、アプリケーション デリゲートがメッセージング デリゲート プロトコルに準拠している場合、 application:didFinishLaunchingWithOptions:のデリゲートをそれ自体に設定できます。

迅速

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

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

登録トークンは、 messaging:didReceiveRegistrationToken:メソッドを介して配信されます。このメソッドは通常、登録トークンを使用してアプリの開始ごとに 1 回呼び出されます。このメソッドが呼び出されるときは、次のことを行うのに最適な時期です。

  • 登録トークンが新しい場合は、アプリケーション サーバーに送信します。
  • 登録トークンをトピックにサブスクライブします。これは、新しいサブスクリプションの場合、またはユーザーがアプリを再インストールした場合にのみ必要です。

token(completion:)を使用してトークンを直接取得できます。トークンの取得が何らかの方法で失敗した場合は、null 以外のエラーが提供されます。

迅速

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

トークンを保存する代わりに、いつでもこのメソッドを使用してトークンにアクセスできます。

トークンの更新を監視する

トークンが更新されるたびに通知を受けるには、メッセージング デリゲート プロトコルに準拠するデリゲートを指定します。次の例では、デリゲートを登録し、適切なデリゲート メソッドを追加します。

迅速

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")

  let dataDict: [String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(
    name: Notification.Name("FCMToken"),
    object: nil,
    userInfo: dataDict
  )
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

または、デリゲート メソッドを提供するのではなく、 kFIRMessagingRegistrationTokenRefreshNotificationという名前のNSNotificationをリッスンすることもできます。トークン プロパティには、常に現在のトークン値があります。

スウィズリングが無効: APNs トークンと登録トークンのマッピング

メソッドの入れ替えを無効にしている場合、または SwiftUI アプリを作成している場合は、APNs トークンを FCM 登録トークンに明示的にマップする必要があります。 application(_:didRegisterForRemoteNotificationsWithDeviceToken:)メソッドを実装して APNs トークンを取得し、 MessagingapnsTokenプロパティを設定します。

迅速

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

Objective-C

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

FCM 登録トークンが生成されたら、スウィズリングが有効になっている場合と同じ方法を使用して、それにアクセスし、更新イベントをリッスンできます。

自動初期化を防ぐ

FCM 登録トークンが生成されると、ライブラリは識別子と構成データを Firebase にアップロードします。最初にユーザーから明示的なオプトインを取得する場合は、構成時に FCM を無効にすることでトークンの生成を防ぐことができます。これを行うには、メタデータ値をInfo.plist ( GoogleService-Info.plistはありません) に追加します。

FirebaseMessagingAutoInitEnabled = NO

FCM を再度有効にするには、ランタイム呼び出しを行います。

迅速

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

この値は、一度設定するとアプリを再起動しても保持されます。

次のステップ

Apple クライアントを設定したら、メッセージ処理やその他のより高度な動作をアプリに追加する準備が整います。詳細については、次のガイドを参照してください。