開始使用 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 用戶端後,即可開始接收及傳送訊息給使用者: