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

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

特定平台的設定和需求

某些必要步驟取決於您指定的平台。

iOS+

在 Xcode 中啟用應用程式功能

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

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

上傳 APN 驗證金鑰

使用 FCM 前,請將 APN 憑證上傳至 Firebase。如果您還沒有 APN 憑證,請前往 Apple Developer Member Center 建立 APN 憑證。

  1. 在 Firebase 控制台的專案中,依序選取齒輪圖示 >「Project Settings」,然後選取「Cloud Messaging」分頁標籤。
  2. 為您的開發憑證和/或正式版憑證選取 [Upload Certificate] (上傳憑證) 按鈕。(至少要輸入一個)。
  3. 為每個憑證選取 .p12 檔案,並提供密碼 (如果有的話)。確認這個憑證的軟體包 ID 與應用程式的軟體包 ID 相符,請選取「Save」(儲存)

方法滑動

如要在 Apple 裝置上使用 FCM Flutter 外掛程式,則不得停用方法滑動功能。需要執行 Swizz,如果沒有此工具,FCM 權杖處理等重要 Firebase 功能就無法正常運作。

Android

Google Play 服務

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

仰賴 Play 服務 SDK 的應用程式一律應先檢查裝置是否含有相容的 Google Play 服務 APK,再存取 Google Play 服務功能。建議您在以下兩個地方執行此操作:在主要活動的 onCreate() 方法和其 onResume() 方法中。onCreate() 中的檢查可確保在未成功檢查的情況下使用應用程式。onResume() 中的檢查可確保如果使用者透過其他方式 (例如透過返回按鈕) 返回執行中的應用程式,系統仍會執行檢查。

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

網站

使用 FCM 設定 Web 憑證

FCM 網頁介面使用稱為「自願應用程式伺服器識別」的 Web 憑證,以授權將要求傳送至支援的網路推送服務。如要訂閱應用程式推播通知,您需要將一組金鑰與 Firebase 專案建立關聯。您可以產生新的金鑰組,或透過 Firebase 控制台匯入現有的金鑰組。

產生新的金鑰組
  1. 開啟 Firebase 控制台「Settings」(設定) 窗格的「Cloud Messaging」(雲端通訊) 分頁標籤,然後捲動至「Web settings」(網頁設定) 部分。

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

匯入現有的金鑰組

如果現有的金鑰組已用於網頁應用程式,您可以將該金鑰組匯入 FCM,透過 FCM API 連結現有的網頁應用程式執行個體。如要匯入金鑰,您必須具備 Firebase 專案的擁有者層級存取權。以 Base64 網址安全編碼格式匯入現有的公開和私密金鑰:

  1. 開啟 Firebase 控制台「Settings」(設定) 窗格的「Cloud Messaging」(雲端通訊) 分頁標籤,然後捲動至「Web settings」(網頁設定) 部分。

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

  3. 在「Import a keyPair」(匯入金鑰組) 對話方塊中,在對應的欄位中提供您的公開和私密金鑰,然後按一下「Import」。控制台會顯示公開金鑰字串和新增的日期。

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

安裝 FCM 外掛程式

  1. 如果您尚未安裝並初始化 Flutter 適用的 Firebase 外掛程式,請先完成這項操作。

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

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

    flutter run
    

存取註冊權杖

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

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

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

設定這個值後,每次重新啟動的應用程式都會保留這個值。

後續步驟

用戶端應用程式設定完成後,即可開始透過通知編輯器傳送下游訊息。請參閱「將測試訊息傳送至背景應用程式」。

如要為應用程式新增其他進階行為,您需要伺服器實作

接著,在應用程式用戶端中: