バックグラウンドで動作しているアプリに最初のメッセージを送信する

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

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

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

前提条件

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

  • Xcode 8.0 以降
  • iOS 8 以降をターゲットにした Xcode プロジェクト
  • Swift プロジェクトには Swift 3.0 以降を使用
  • アプリのバンドル識別子
  • CocoaPods 1.2.0 以降
  • Cloud Messaging の場合:
    • 物理 iOS 端末
    • Apple Developer アカウントの Apple Push Notification Authentication Key
    • Xcode において [App] > [Capabilities] でプッシュ通知を有効にする

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 プロジェクトのルートにまだコピーしていない場合は、Xcode の [Add Files] ユーティリティ([File] メニューで [Add Files] をクリックして表示)を使用してコピーします。ファイルがアプリのビルド ターゲットに含まれていることを確認してください。

SDK を追加する

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

ライブラリをインストールするときは CocoaPods を使用することをおすすめします。インストール手順に沿って 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. UIApplicationDelegate で Firebase モジュールをインポートします。

    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 ([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];

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

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

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

iOS が通常、アプリ起動時に APNs デバイス トークンを配信するのと同じ方法で、FCM は各アプリの起動時に FIRMessaging デリゲートの messaging:didReceiveRegistrationToken コールバック経由で登録トークンを提供します。最初のアプリの起動時、および登録トークンが変更されるすべての状況において、FCM SDK はトークンを取得します。いずれの場合も、FCM SDK は FIRMessageDelegate プロトコル内の messaging:didReceiveRegistrationToken: を呼び出します。

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

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

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

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

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

現在の登録トークンを受け取る

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

  • 登録トークンが新規の場合、アプリケーション サーバーに送信します(トークンが新しいかどうかを判別するサーバー ロジックを実装することをおすすめします)。
  • 登録トークンをトピックに登録します。これは新規登録の場合、またはユーザーがアプリを再インストールした場合にのみ必要です。

Swift

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

Objective-C

NSString *fcmToken = [FIRMessaging messaging].FCMToken;
NSLog(@"FCM registration token: %@", fcmToken);
このデリゲート メソッドが呼び出された後、トークン プロパティ(Objective-C では FCMToken、Swift では fcmToken)を介して登録トークンが利用可能になります。このデリゲート メソッドが呼び出される前は、このプロパティは nil である可能性があります。

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

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

Swift

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

  // 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);

    // 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. ターゲット端末でアプリをインストールして実行します。リモート通知受信権限に対するリクエストを承認する必要があります。

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

  3. Notifications Composer を開き、[新しいメッセージ] を選択します。

  4. メッセージ テキストを入力します。

  5. メッセージのターゲットとして [単一の端末] を選択します。

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

[メッセージを送信] をクリックすると、アプリをバックグラウンドで実行しているターゲット クライアント端末の通知センターに通知が届きます。

次のステップ

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

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

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