按照以下步驟在 Flutter 上設置 FCM 客戶端。
特定於平台的設置和要求
一些必需的步驟取決於您的目標平台。
iOS+
在 Xcode 中啟用應用功能
在您的應用程序可以開始接收消息之前,您必須在 Xcode 項目中啟用推送通知和後台模式。
上傳您的 APNs 身份驗證密鑰
在使用 FCM 之前,請將您的 APNs 證書上傳到 Firebase。如果您還沒有 APNs 證書,請在Apple Developer Member Center創建一個。
- 在 Firebase 控制台的項目內,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。
- 為您的開發證書、生產證書或兩者選擇上傳證書按鈕。至少需要一個。
- 對於每個證書,選擇 .p12 文件,並提供密碼(如果有)。確保此證書的捆綁包 ID 與您的應用程序的捆綁包 ID 匹配。選擇保存。
方法調配
要在 Apple 設備上使用 FCM Flutter 插件,您不得禁用方法調配。 Swizzling 是必需的,如果沒有它,FCM 令牌處理等關鍵 Firebase 功能將無法正常運行。
安卓
谷歌播放服務
FCM 客戶端需要運行 Android 4.4 或更高版本且安裝了 Google Play 服務的設備,或者運行帶有 Google API 的 Android 4.4 的模擬器。請注意,您不僅限於通過 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 控制台導入現有的密鑰對。
生成新的密鑰對
打開 Firebase 控制台設置窗格的雲消息傳遞選項卡並滾動到Web 配置部分。
在Web Push certificates選項卡中,單擊Generate Key Pair 。控制台顯示生成密鑰對的通知,並顯示公鑰字符串和添加日期。
導入現有密鑰對
如果您有一個已用於 Web 應用程序的現有密鑰對,則可以將其導入 FCM,以便您可以通過 FCM API 訪問現有的 Web 應用程序實例。要導入密鑰,您必須擁有 Firebase 項目的所有者級別訪問權限。以 base64 URL 安全編碼形式導入您現有的公鑰和私鑰:
打開 Firebase 控制台設置窗格的雲消息傳遞選項卡並滾動到Web 配置部分。
在“ Web 推送證書”選項卡中,找到並選擇鏈接文本“導入現有密鑰對”。
在Import a key pair對話框中,在相應字段中提供您的公鑰和私鑰,然後單擊Import 。控制台顯示公鑰字符串和添加日期。
有關密鑰格式以及如何生成它們的更多信息,請參閱應用程序服務器密鑰。
安裝 FCM 插件
如果您還沒有安裝並初始化 Flutter 的 Firebase 插件,請執行此操作。
從 Flutter 項目的根目錄,運行以下命令來安裝插件:
flutter pub add firebase_messaging
完成後,重建您的 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發送下游消息。請參閱向後台應用程序發送測試消息。
要向您的應用程序添加其他更高級的行為,您需要一個服務器實現。
然後,在您的應用程序客戶端中:
,按照以下步驟在 Flutter 上設置 FCM 客戶端。
特定於平台的設置和要求
一些必需的步驟取決於您的目標平台。
iOS+
在 Xcode 中啟用應用功能
在您的應用程序可以開始接收消息之前,您必須在 Xcode 項目中啟用推送通知和後台模式。
上傳您的 APNs 身份驗證密鑰
在使用 FCM 之前,請將您的 APNs 證書上傳到 Firebase。如果您還沒有 APNs 證書,請在Apple Developer Member Center創建一個。
- 在 Firebase 控制台的項目內,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。
- 為您的開發證書、生產證書或兩者選擇上傳證書按鈕。至少需要一個。
- 對於每個證書,選擇 .p12 文件,並提供密碼(如果有)。確保此證書的捆綁包 ID 與您的應用程序的捆綁包 ID 匹配。選擇保存。
方法調配
要在 Apple 設備上使用 FCM Flutter 插件,您不得禁用方法調配。 Swizzling 是必需的,如果沒有它,FCM 令牌處理等關鍵 Firebase 功能將無法正常運行。
安卓
谷歌播放服務
FCM 客戶端需要運行 Android 4.4 或更高版本且安裝了 Google Play 服務的設備,或者運行帶有 Google API 的 Android 4.4 的模擬器。請注意,您不僅限於通過 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 控制台導入現有的密鑰對。
生成新的密鑰對
打開 Firebase 控制台設置窗格的雲消息傳遞選項卡並滾動到Web 配置部分。
在Web Push certificates選項卡中,單擊Generate Key Pair 。控制台顯示生成密鑰對的通知,並顯示公鑰字符串和添加日期。
導入現有密鑰對
如果您有一個已用於 Web 應用程序的現有密鑰對,則可以將其導入 FCM,以便您可以通過 FCM API 訪問現有的 Web 應用程序實例。要導入密鑰,您必須擁有 Firebase 項目的所有者級別訪問權限。以 base64 URL 安全編碼形式導入您現有的公鑰和私鑰:
打開 Firebase 控制台設置窗格的雲消息傳遞選項卡並滾動到Web 配置部分。
在“ Web 推送證書”選項卡中,找到並選擇鏈接文本“導入現有密鑰對”。
在Import a key pair對話框中,在相應字段中提供您的公鑰和私鑰,然後單擊Import 。控制台顯示公鑰字符串和添加日期。
有關密鑰格式以及如何生成它們的更多信息,請參閱應用程序服務器密鑰。
安裝 FCM 插件
如果您還沒有安裝並初始化 Flutter 的 Firebase 插件,請執行此操作。
從 Flutter 項目的根目錄,運行以下命令來安裝插件:
flutter pub add firebase_messaging
完成後,重建您的 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發送下游消息。請參閱向後台應用程序發送測試消息。
要向您的應用程序添加其他更高級的行為,您需要一個服務器實現。
然後,在您的應用程序客戶端中: