在 Flutter 上設定 Firebase 雲端通訊用戶端應用程式

請按照下列步驟在 Flutter 上設定 FCM 用戶端。

平台專屬設定和需求

部分必要步驟視您指定的平台而定。

iOS+

在 Xcode 中啟用應用程式功能

應用程式必須先在 Xcode 專案中啟用推播通知和背景模式,才能開始接收訊息。

  1. 開啟 Xcode 專案工作區 (ios/Runner.xcworkspace)。
  2. 啟用推播通知
  3. 啟用背景擷取遠端通知 背景執行模式

上傳 APNs 驗證金鑰

使用 FCM 前,請先將 APNs 憑證上傳至 Firebase。如果您尚未取得 APN 憑證,請前往 Apple Developer Member Center 建立。

  1. 在 Firebase 主控台的專案中,依序選取齒輪圖示、專案設定和「Cloud Messaging」分頁。
  2. 選取「上傳憑證」按鈕,為開發憑證或實際工作環境憑證 (或兩者皆為) 上傳憑證。至少須提供一個。
  3. 針對每個憑證,選取 .p12 檔案,並提供密碼 (如有)。請確認此憑證的軟體包 ID 與應用程式的軟體包 ID 相符。選取「Save」

方法交換

如要在 Apple 裝置上使用 FCM Flutter 外掛程式,請勿停用方法 swizzling。您必須進行 swizzling,否則 Firebase 的重要功能 (例如 FCM 符記處理) 將無法正常運作。

Android

Google Play 服務

FCM 用戶端需要搭載 Android 4.4 以上版本且已安裝 Google Play 服務的裝置,或是搭載 Android 4.4 且使用 Google API 的模擬器。請注意,您不必透過 Google Play 商店部署 Android 應用程式。

依賴 Play 服務 SDK 的應用程式在存取 Google Play 服務功能前,應一律檢查裝置是否有相容的 Google Play 服務 APK。建議您在兩個位置執行此操作:主要活動的 onCreate() 方法和 onResume() 方法。onCreate() 中的檢查可確保應用程式在檢查成功前無法使用。onResume() 中的檢查可確保使用者透過其他方式 (例如透過返回按鈕) 返回執行中的應用程式時,仍會執行檢查。

如果裝置沒有相容的 Google Play 服務版本,應用程式可以呼叫 GoogleApiAvailability.makeGooglePlayServicesAvailable(),讓使用者從 Play 商店下載 Google Play 服務。

網路

透過 FCM 設定網路憑證

FCM 網頁介面會使用名為「Voluntary Application Server Identification」或「VAPID」的網頁憑證金鑰,授權將要求傳送至支援的網路推播服務。如要讓應用程式訂閱推播通知,您必須將一組鍵與 Firebase 專案建立關聯。您可以產生新的金鑰組,也可以透過 Firebase 控制台匯入現有的金鑰組。

產生新的金鑰組
  1. 開啟 Firebase 控制台「設定」窗格中的「Cloud Messaging」分頁,然後捲動至「Web 設定」部分。

  2. 在「網路推播憑證」分頁中,按一下「產生金鑰組」。主控台會顯示金鑰組已產生的通知,並顯示公開金鑰字串和新增日期。

匯入現有的金鑰組

如果您已在網頁應用程式中使用現有的金鑰組,可以將其匯入 FCM,以便透過 FCM API 存取現有的網頁應用程式執行個體。如要匯入金鑰,您必須擁有 Firebase 專案的擁有者級存取權。以 Base64 URL 安全編碼格式匯入現有的公開金鑰和私密金鑰:

  1. 開啟 Firebase 控制台「設定」窗格中的「Cloud Messaging」分頁,然後捲動至「Web 設定」部分。

  2. 在「Web Push 憑證」分頁中,找出並選取「匯入現有金鑰組」的連結文字。

  3. 在「Import a key pair」對話方塊中,在對應的欄位中提供公開和私密金鑰,然後按一下「Import」。主控台會顯示公開金鑰字串和新增日期。

如要進一步瞭解金鑰格式和產生方式,請參閱「應用程式伺服器金鑰」。

安裝 FCM 外掛程式

  1. 如果尚未安裝,請安裝並初始化 Flutter 專用的 Firebase 外掛程式

  2. 在 Flutter 專案的根目錄中執行下列指令,安裝外掛程式:

    flutter pub add firebase_messaging
    
  3. 完成後,請重新建構 Flutter 應用程式:

    flutter run
    

存取註冊權杖

如要傳送訊息給特定裝置,您必須知道該裝置的註冊權杖。您必須在「通知」控制台的欄位中輸入權杖,才能完成本教學課程,因此請務必在擷取權杖後複製或安全地儲存權杖。

如要擷取應用程式例項目前的註冊權杖,請呼叫 getToken()。如果尚未授予通知權限,這個方法會要求使用者授予通知權限。否則,會傳回權杖,或因錯誤而拒絕未來。

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, ensure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

在網站平台上,請將 VAPID 公開金鑰傳遞至 getToken()

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

如要隨時收到符記更新通知,請訂閱 onTokenRefresh 串流:

FirebaseMessaging.instance.onTokenRefresh
    .listen((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.
    })
    .onError((err) {
      // Error getting token.
    });

防止自動初始化

產生 FCM 註冊權杖後,程式庫會將 ID 和設定資料上傳至 Firebase。如果您想避免符記自動產生,請在建構期間停用自動初始化功能。

iOS

在 iOS 上,請將中繼資料值新增至 Info.plist

FirebaseMessagingAutoInitEnabled = NO

Android

在 Android 上,將這些中繼資料值新增至 AndroidManifest.xml,即可停用 Analytics 收集和 FCM 自動初始化功能 (必須同時停用這兩項功能):

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

在執行階段重新啟用 FCM 自動初始化功能

如要為特定應用程式執行個體啟用自動初始化功能,請呼叫 setAutoInitEnabled()

await FirebaseMessaging.instance.setAutoInitEnabled(true);

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

後續步驟

設定完用戶端應用程式後,您就可以開始使用通知編寫工具傳送下游訊息。請參閱「傳送測試訊息至背景應用程式」一文。

如要在應用程式中新增其他進階行為,您需要伺服器導入程序

接著,在應用程式用戶端中執行下列操作: