在 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。

final fcmToken = await FirebaseMessaging.instance.getToken();

在網絡平台上,將您的 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);

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

下一步

設置客戶端應用程序後,您就可以開始使用通知編輯器發送下游消息了。請參閱向後台應用程序發送測試消息

要向您的應用程序添加其他更高級的行為,您需要一個服務器實現

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