iOS アプリでメッセージを受信する

Firebase Notifications は、受信側アプリがフォアグラウンド状態であるかバックグラウンド状態であるかによって、動作が異なります。フォアグラウンド アプリで通知メッセージまたはデータ メッセージを受信する場合は、onMessageReceived コールバックを処理するコードを記述する必要があります。 通知メッセージとデータ メッセージの違いの説明については、メッセージ タイプを参照してください。

メッセージの処理

クライアント アプリがフォアグラウンドで動作しているときに受信した通知と、クライアントに送信されるすべてのデータ メッセージを処理するには、AppDelegate application:didReceiveRemoteNotification: を実装します。このメッセージは、キーと値の辞書です。

Objective-C

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // Print message ID.
  NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]);

  // Pring full message.
  NSLog(@"%@", userInfo);
}

Swift

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                 fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // Print message ID.
  print("Message ID: \(userInfo["gcm.message_id"]!)")

  // Print full message.
  print("%@", userInfo)
}

メソッド実装入れ替えが無効にされたメッセージの処理

メソッド実装入れ替えを無効にしている場合は、appDidReceiveMessage: メソッドを呼び出す必要があります。それによって FCM でメッセージ配信とアナリティクスの追跡が行われます。メソッド実装入れ替えが有効な場合はこれらが自動的に実行されます。

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
  - (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:
              (void (^)(UIBackgroundFetchResult))completionHandler {
  // Let FCM know about the message for analytics etc.
  [[FIRMessaging messaging] appDidReceiveMessage:userInfo];
  // handle your message.
}

Swift

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
    // Let FCM know about the message for analytics etc.
    FIRMessaging.messaging().appDidReceiveMessage(userInfo)
    // handle your message
  }

ペイロードに notification を含むメッセージの受信と処理

アプリがバックグラウンドで動作しているとき、iOS では notification キーを含むメッセージがシステムトレイに送られます。 ユーザーが通知をタップすると、アプリが開き、通知の内容が didReceiveRemoteNotification コールバックに渡されます(AppDelegate の中で実装されている場合)。

アプリを開いて特定のアクションを実行する場合は、click_action通知ペイロードに設定します。この値は、APNs ペイロードの category キーに使うものと同じ値を使用します。

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