在 Flutter 上設定 Firebase Cloud Messaging 用戶端應用

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

特定於平台的設定和要求

一些必需的步驟取決於您的目標平台。

iOS+

在 Xcode 中啟用應用程式功能

在您的應用程式開始接收訊息之前,您必須在 Xcode 專案中啟用推播通知和後台模式。

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

上傳您的 APNs 驗證金鑰

在使用 FCM 之前,請將您的 APNs 憑證上傳到 Firebase。如果您還沒有 APNs 證書,請在Apple 開發者會員中心建立一個。

  1. 在 Firebase 控制台的項目內,選擇齒輪圖標,選擇項目設置,然後選擇雲端訊息傳遞選項卡。
  2. 為您的開發證書、生產證書或兩者選擇「上傳證書」按鈕。至少需要一個。
  3. 對於每個證書,選擇 .p12 文件,並提供密碼(如果有)。確保此憑證的捆綁包 ID 與您的應用程式的捆綁包 ID 相符。選擇保存

方法混合

要在 Apple 裝置上使用 FCM Flutter 插件,您不得停用方法調配。 Swizzling 是必要的,如果沒有它,FCM 令牌處理等關鍵 Firebase 功能將無法正常運作。

安卓

Google Play 服務

FCM 用戶端需要運行 Android 4.4 或更高版本並安裝了 Google Play 服務的設備,或運行帶有 Google API 的 Android 4.4 的模擬器。請注意,您不僅限於透過 Google Play 商店部署 Android 應用程式。

依賴 Play Services SDK 的應用程式應始終在存取 Google Play 服務功能之前檢查裝置是否有相容的 Google Play 服務 APK。建議在兩個地方執行此操作:在主活動的onCreate()方法中和在其onResume()方法中。 onCreate()中的檢查可確保在檢查成功的情況下無法使用應用程式。 onResume()中的檢查可確保如果使用者透過其他方式(例如透過後退按鈕)返回到正在執行的應用程序,則仍會執行檢查。

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

網路

使用 FCM 設定 Web 憑證

FCM Web 介面使用稱為「自願應用程式伺服器識別」或「VAPID」金鑰的 Web 憑證來授權向支援的 Web 推播服務發送請求。若要為您的應用程式訂閱推播通知,您需要將一對金鑰與您的 Firebase 專案關聯。您可以產生新的金鑰對,也可以透過 Firebase 控制台匯入現有的金鑰對。

產生新的密鑰對
  1. 開啟 Firebase 控制台「設定」窗格的「雲端訊息傳遞」選項卡,然後捲動至「Web 設定」部分。

  2. 「Web 推送憑證」標籤中,按一下「產生金鑰對」 。控制台會顯示金鑰對已產生的通知,並顯示公鑰字串和新增日期。

導入現有金鑰對

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

  1. 開啟 Firebase 控制台「設定」窗格的「雲端訊息傳遞」選項卡,然後捲動至「Web 設定」部分。

  2. 「Web 推送憑證」標籤中,找到並選擇連結文字「匯入現有金鑰對」。

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

有關密鑰格式以及如何產生密鑰的更多信息,請參閱應用程式伺服器密鑰

安裝 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 註冊令牌後,程式庫會將識別碼和設定資料上傳到 Firebase。如果您希望阻止令牌自動生成,請在建置時停用自動初始化。

iOS系統

在 iOS 上,將元資料值加入Info.plist

FirebaseMessagingAutoInitEnabled = NO

安卓

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

設定後,該值將在應用程式重新啟動後保持不變。

下一步

設定客戶端應用程式後,您就可以開始使用通知編輯器發送下游訊息了。請參閱向背景應用程式發送測試訊息

要為您的應用程式添加其他更高級的行為,您需要一個伺服器實作

然後,在您的應用程式用戶端中: