バックグラウンド Apple アプリにテスト メッセージを送信する

FCM を使用する手始めとして、最も単純なユースケースを作成します。具体的には、アプリがそのデバイスのバックグラウンドで動作しているときに、Notifications Composer から開発デバイスにテスト通知メッセージを送信します。このページには、このチュートリアルに必要なセットアップから検証までのすべての手順が記載されています。FCMApple クライアント アプリでの 設定がすでに済んでいる場合は、一部の手順を省略できます。

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

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

前提条件

  • 以下をインストールします。

    • Xcode 15.2 以降
  • プロジェクトが次の要件を満たしていることを確認します。

    • 以下のバージョンまたはそれ以降のプラットフォームをターゲットにしている必要があります。
      • iOS 13
      • macOS 10.15
      • tvOS 13
      • watchOS 7
  • アプリを実行する物理的な Apple デバイスを設定し、次のタスクを完了します。

    • Apple Developer アカウントの Apple Push Notification Authentication Key を取得します。
    • プッシュ通知を XCode の [App] > [Capabilities] で有効にします。

Xcode プロジェクトがない場合、Firebase プロダクトを試してみるだけであれば、クイックスタート サンプルをダウンロードしてお使いいただけます。

Firebase プロジェクトを作成する

Apple アプリに Firebase を追加する前に、アプリに接続するための Firebase プロジェクトを作成します。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

アプリを Firebase に登録する

Apple アプリで Firebase を使用するには、アプリを Firebase プロジェクトに登録する必要があります。アプリの登録は、プロジェクトへのアプリの「追加」とも呼ばれます。

  1. Firebaseコンソールに移動します。

  2. プロジェクトの概要ページの中央にある iOS+ アイコンをクリックして、設定ワークフローを起動します。

    すでに Firebase プロジェクトにアプリを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。

  3. アプリのバンドル ID を [Apple バンドル ID] フィールドに入力します。

  4. (省略可)その他のアプリ情報(アプリのニックネームApp Store ID)を入力します。

  5. [アプリの登録] をクリックします。

Firebase 構成ファイルを追加する

  1. [GoogleService-Info.plist をダウンロード] をクリックして、Firebase Apple プラットフォーム構成ファイル(GoogleService-Info.plist)を取得します。

  2. 構成ファイルを Xcode プロジェクトのルートに移動します。メッセージが表示されたら、構成ファイルをすべてのターゲットに追加するオプションを選択します。

プロジェクトに複数のバンドル ID がある場合は、Firebase コンソールで各バンドル ID を登録済みアプリに関連付けて、各アプリで固有の GoogleService-Info.plist ファイルを使用できるようにする必要があります。

アプリに Firebase SDK を追加する

Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。

  1. Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Cloud Messaging ライブラリを選択します。
  5. ターゲットのビルド設定の [Other Linker Flags] セクションに -ObjC フラグを追加します。
  6. Firebase Cloud Messaging でのエクスペリエンスを最適化するために、Firebase プロジェクトで Google Analytics を有効にして、Google アナリティクス用の Firebase SDK をアプリに追加することをおすすめします。ライブラリで IDFA の収集を行う / 行わないを選択できます。
  7. 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。

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

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

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

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

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

アプリで Firebase を初期化する

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

  1. UIApplicationDelegateFirebaseCore モジュールと、アプリのデリゲートが使用する他の Firebase モジュールをインポートします。たとえば、Cloud FirestoreAuthentication を使用するには、次のように指定します。

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. アプリ デリゲートの application(_:didFinishLaunchingWithOptions:) メソッドで、FirebaseApp 共有インスタンスを構成します。

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. SwiftUI を使用している場合は、アプリケーション デリゲートを作成し、UIApplicationDelegateAdaptor または NSApplicationDelegateAdaptor を介して App 構造体に接続する必要があります。また、アプリ デリゲートのメソッドの実装入れ替えを無効にする必要があります。詳細については、SwiftUI の手順をご覧ください。

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

リモート通知に登録する

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

Swift

UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C

[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

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

特定のデバイスにメッセージを送信するには、そのデバイスの登録トークンを知っておく必要があります。このチュートリアルでは Notifications Composer のフィールドにトークンを入力しなければならないため、トークンを取得したら、必ずコピーするか安全に保存しておく必要があります。

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

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

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

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

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

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

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

現在の登録トークンを取得する

登録トークンは、メソッド messaging:didReceiveRegistrationToken: を使用して配信されます。このメソッドは通常、登録トークンを使用してアプリが起動するごとに 1 回ずつ呼び出されます。このメソッドが呼び出されるタイミングで、以下を実行できます。

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

token(completion:) を使用して直接トークンを取得できます。なんらかの形でトークンの取得に失敗すると、null 以外のエラーが返されます。

Swift

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;
  }
}];

このメソッドを使用することで、トークンを保管せずに、いつでもトークンにアクセスできます。

トークン更新のモニタリング

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

Swift

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 をリッスンできます。トークン プロパティの値は常に現在のトークン値です。

通知メッセージの送信

  1. 対象デバイスでアプリをインストールして実行します。Apple デバイスの場合、リモート通知受信権限に対するリクエストを承認する必要があります。

  2. アプリがデバイスのバックグラウンドで動作していることを確認します。

  3. Firebase コンソールで、[メッセージング] ページを開きます。

  4. メッセージを初めて作成する場合は、[最初のキャンペーンを作成] を選択します。

    1. [Firebase Notification メッセージ] を選択し、[作成] を選択します。
  5. それ以外の場合は、[キャンペーン] タブで [新しいキャンペーンを作成]、[通知] の順に選択します。

  6. 通知テキストを入力します。それ以外のフィールドはすべて省略可能です。

  7. 右側のペインで [テスト メッセージを送信] を選択します。

  8. [FCM 登録トークンを追加] というラベルの付いたフィールドで、このガイドの前のセクションで取得した登録トークンを入力します。

  9. [テスト] を選択します。

[テスト] を選択すると、アプリをバックグラウンドで実行しているターゲット クライアント デバイスに通知が届きます。

アプリへのメッセージ配信については、FCM レポート ダッシュボードをご覧ください。このダッシュボードには、Android アプリの「インプレッション」(ユーザーが表示した通知)のデータとともに、Apple と Android のデバイスで送信および開封されたメッセージの数が記録されています。

次のステップ

通知メッセージだけでなく、他のより高度な動作をアプリに追加する場合は、以下をご確認ください。