Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

在 Flutter 上設置 Firebase 雲消息傳遞客戶端應用

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

按照以下步驟在 Flutter 上設置 FCM 客戶端。

特定於平台的設置和要求

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

iOS+

在 Xcode 中啟用應用程序功能

在您的應用程序開始接收消息之前,您必須在您的 Xcode 項目中啟用推送通知和後台模式。

  1. 打開您的 Xcode 項目工作區 ( ios/Runner.xcworkspace )。
  2. 啟用推送通知
  3. 啟用後台獲取遠程通知後台執行模式

上傳您的 APNs 身份驗證密鑰

在使用 FCM 之前,請將您的 APNs 證書上傳到 Firebase。如果您還沒有 APNs 證書,請在Apple Developer Member Center中創建一個。

  1. 在 Firebase 控制台的項目中,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。
  2. 為您的開發證書、生產證書或兩者選擇上傳證書按鈕。至少需要一個。
  3. 對於每個證書,選擇 .p12 文件,並提供密碼(如果有)。確保此證書的捆綁包 ID 與您的應用的捆綁包 ID 匹配。選擇保存

方法混搭

要在 Apple 設備上使用 FCM Flutter 插件,您不能禁用方法調配。 Swizzling 是必需的,沒有它,FCM 令牌處理等關鍵 Firebase 功能將無法正常運行。

安卓

谷歌播放服務

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 配置 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. Import a key pair對話框中,在相應字段中提供您的公鑰和私鑰,然後單擊Import 。控制台顯示公鑰字符串和添加日期。

有關密鑰格式以及如何生成它們的更多信息,請參閱應用程序服務器密鑰

安裝 FCM 插件

  1. 如果您還沒有這樣做,請安裝並初始化 Flutter 的 Firebase 插件

  2. 在 Flutter 項目的根目錄下,運行以下命令來安裝插件:

    flutter pub add firebase_messaging
    
  3. 完成後,重新構建您的 Flutter 應用程序:

    flutter run
    

訪問註冊令牌

要將消息發送到特定設備,您需要知道該設備的註冊令牌。因為您需要在通知控制台的字段中輸入令牌才能完成本教程,所以請確保在檢索令牌後復製或安全存儲它。

要檢索應用程序實例的當前註冊令牌,請調用getToken() 。如果未授予通知權限,此方法將向用戶請求通知權限。否則,它會返回一個令牌或由於錯誤而拒絕未來。

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

在網絡平台上,將您的 VAPID 公鑰傳遞給 getToken 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);

一旦設置,此值將在應用重新啟動後持續存在。

下一步

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

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

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