請按照下列步驟,在 Flutter 上設定 FCM 用戶端。
各平台專屬的設定和需求
部分必要步驟視您指定的平台而定。
iOS+
在 Xcode 中啟用應用程式功能
應用程式必須先在 Xcode 專案中啟用推播通知和背景模式,才能開始接收訊息。
上傳 APN 驗證金鑰
使用 FCM 前,請先將 APNs 憑證上傳至 Firebase。如果您還沒有 APNs 憑證,請在 Apple Developer Member Center 中建立。
- 在 Firebase 控制台的專案中,依序選取齒輪圖示和「專案設定」,然後選取「Cloud Messaging」分頁。
- 選取開發憑證、正式環境憑證或兩者的「上傳憑證」按鈕。至少擇一提供。
- 針對每個憑證選取 .p12 檔案,並提供密碼 (如有)。請確認這個憑證的軟體包 ID 與應用程式的軟體包 ID 相符。選取「儲存」。
方法交換
如要在 Apple 裝置上使用 FCM Flutter 外掛程式,請勿停用方法交換。您必須進行 Swizzling,否則 FCM 權杖處理等重要 Firebase 功能將無法正常運作。
Android
Google Play 服務
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 設定網路憑證
FCM 網頁介面會使用名為「自願性應用程式伺服器識別」或「VAPID」金鑰的網頁憑證,授權傳送要求給支援的網頁推播服務。如要讓應用程式訂閱推播通知,您必須將一組金鑰與 Firebase 專案建立關聯。您可以透過 Firebase 控制台產生新的金鑰組,也可以匯入現有的金鑰組。
產生新的金鑰組
開啟 Firebase 控制台「設定」窗格的「Cloud Messaging」分頁,然後捲動至「Web configuration」(網頁設定) 區段。
在「Web Push certificates」(網路推播憑證) 分頁中,按一下「Generate Key Pair」(產生金鑰組)。主控台會顯示金鑰組已產生的通知,以及公開金鑰字串和新增日期。
匯入現有金鑰組
如果您有現成的金鑰組,且已用於網頁應用程式,可以將其匯入 FCM,以便透過 FCM API 觸及現有的網頁應用程式例項。如要匯入金鑰,您必須擁有 Firebase 專案的擁有者層級存取權。以 Base64 URL 安全編碼形式匯入現有的公開和私密金鑰:
開啟 Firebase 控制台「設定」窗格的「Cloud Messaging」分頁,然後捲動至「Web configuration」(網頁設定) 區段。
在「Web 推播憑證」分頁中,找出並選取「匯入現有金鑰組」連結文字。
在「匯入金鑰組」對話方塊中,在對應欄位提供公開和私密金鑰,然後按一下「匯入」。控制台會顯示公開金鑰字串和新增日期。
如要進一步瞭解金鑰格式和產生方式,請參閱「應用程式伺服器金鑰」。
安裝 FCM 外掛程式
如果尚未安裝及初始化 Flutter 適用的 Firebase 外掛程式,請執行此步驟。
在 Flutter 專案的根目錄中,執行下列指令來安裝外掛程式:
flutter pub add firebase_messaging
完成後,請重建 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);
設定後,這個值會在應用程式重新啟動時保留。
後續步驟
設定用戶端應用程式後,即可使用通知撰寫器開始傳送下游訊息。請參閱「傳送測試訊息至背景應用程式」。
如要為應用程式新增其他進階行為,您需要伺服器實作。
接著,在應用程式用戶端中: