開始使用 Firebase 雲端通訊


本快速入門導覽課程說明如何在行動和網頁用戶端應用程式中設定 Firebase Cloud Messaging,以便穩定傳送訊息。如果是伺服器環境,請參閱「您的伺服器環境和 FCM」。

在 Apple 平台上設定 Firebase Cloud Messaging 用戶端應用程式

如果是 Apple 用戶端應用程式,您可透過 Firebase Cloud Messaging APNs 介面接收通知和資料酬載,最多 4096 位元組。

如要以 Objective-C 或 Swift 編寫用戶端程式碼,建議使用 FIRMessaging API快速入門範例提供兩種語言的程式碼範例。

開始之前,請先將 Firebase 新增至 Apple 專案

Firebase Cloud Messaging 中的方法交換

FCM SDK 會在兩個主要領域執行方法交換:將 APNs 權杖對應至 FCM 註冊權杖,以及在下游訊息回呼處理期間擷取 Analytics 資料。如果開發人員不想使用交換,可以在應用程式的 Info.plist 檔案中加入 FirebaseAppDelegateProxyEnabled 旗標,並將其設為 NO (布林值),即可停用交換。指南的相關部分提供程式碼範例,包括啟用和未啟用方法交換的情況。

上傳 APN 驗證金鑰

將 APNs 驗證金鑰上傳至 Firebase。 如果沒有 APNs 驗證金鑰,請務必在 Apple 開發人員會員中心建立。

  1. Firebase 控制台的專案中,依序選取齒輪圖示、「專案設定」和「Cloud Messaging」分頁標籤。

  2. 在「iOS 應用程式設定」下方的「APN 驗證金鑰」中, 按一下「上傳」按鈕,上傳開發或正式版驗證金鑰,或同時上傳兩者。至少必須有一個。

  3. 瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下「開啟」。新增金鑰的 ID (可在 Apple Developer Member Center 中取得),然後按一下「上傳」

註冊遠端通知

在啟動時或應用程式流程中的所需時間點,註冊應用程式以接收遠端通知。如以下範例所示呼叫 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];

存取註冊權杖

根據預設,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: 方法傳送。一般來說,這個方法會在每次應用程式啟動時呼叫一次,並傳送註冊權杖。呼叫這個方法時,最適合執行下列動作:

  • 如果註冊權杖是新的,請傳送至應用程式伺服器。
  • 將註冊權杖訂閱至主題。只有新訂閱項目或使用者重新安裝應用程式時,才需要執行這項操作。

您可以使用 token(completion:) 直接擷取權杖。如果權杖擷取作業因任何原因失敗,系統會提供非空值錯誤。

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.
}

或者,您也可以監聽名為 NSNotificationkFIRMessagingRegistrationTokenRefreshNotification,而非提供委派方法。權杖屬性一律會包含目前的權杖值。

停用 Swizzling:對應 APNs 權杖和註冊權杖

如果您已停用方法交換,或是要建構 SwiftUI 應用程式,則必須將 APNs 權杖明確對應至 FCM 註冊權杖。實作 application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 方法來擷取 APNs 權杖,然後設定 MessagingapnsToken 屬性:

Swift

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 註冊權杖後,您可以使用與啟用 Swizzling 時相同的方法存取權杖,並監聽重新整理事件。

防止自動初始化

產生 FCM 註冊權杖時,程式庫會將 ID 和設定資料上傳至 Firebase。如要先取得使用者的明確同意聲明,可以停用 FCM,在設定時禁止產生權杖。如要這麼做,請將中繼資料值新增至 Info.plist (而非 GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

如要重新啟用 FCM,可以進行執行階段呼叫:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

設定後,這個值會在應用程式重新啟動時保留。

傳送通知訊息

  1. 在目標裝置上安裝並執行應用程式。在 Apple 裝置上,接受接收遠端通知的權限要求。
  2. 確認裝置上的應用程式在背景執行。
  3. 在 Firebase 控制台中,開啟「Messaging」頁面。
  4. 如果是第一次建立訊息,請選取「建立您的第一個廣告活動」
    1. 選取「Firebase 通知訊息」,然後選取「建立」
  5. 否則,請在「廣告活動」分頁中,依序選取「新增廣告活動」和「通知」
  6. 輸入訊息文字。
  7. 在右側窗格中選取「傳送測試訊息」
  8. 在標示為「新增 FCM 註冊權杖」的欄位中,輸入註冊權杖。
  9. 選取「測試」

選取「測試」後,目標用戶端裝置應會收到通知 (應用程式須在背景執行)。

如要深入瞭解訊息傳送至應用程式的情況,請參閱FCM報表資訊主頁,當中會記錄在 Apple 和 Android 裝置上傳送及開啟的訊息數量。

後續步驟

設定 Apple 用戶端後,即可開始接收及傳送訊息給使用者: