要開始使用 FCM,請建立最簡單的用例:當應用程式位於裝置背景時,從通知編輯器向開發設備發送測試通知訊息。本頁面列出了實現此目的的所有步驟,從設定到驗證 - 如果您已經為 FCM設定了 Flutter 應用程序,它可能涵蓋您已經完成的步驟。
安裝 FCM 插件
如果您尚未安裝並初始化適用於 Flutter 的 Firebase SDK,請執行此操作。
從 Flutter 專案的根目錄中,執行以下命令來安裝外掛程式:
flutter pub add firebase_messaging
完成後,重建您的 Flutter 應用程式:
flutter run
訪問註冊令牌
若要將訊息傳送到特定設備,您需要知道該設備的註冊令牌。由於您需要在通知控制台的欄位中輸入令牌才能完成本教學課程,因此請確保在檢索令牌後複製令牌或安全地儲存它。
若要檢索應用程式實例的目前註冊令牌,請呼叫getToken()
。如果未授予通知權限,此方法將向使用者要求通知權限。否則,它會傳回一個令牌或由於錯誤而拒絕 future。
final fcmToken = await FirebaseMessaging.instance.getToken();
發送測試通知訊息
在目標裝置上安裝並執行應用程式。在 Apple 裝置上,您需要接受接收遠端通知的權限請求。
確保該應用程式位於裝置的背景。
在 Firebase 控制台中,開啟訊息傳遞頁面。
如果這是您的第一個訊息,請選擇建立您的第一個行銷活動。
- 選擇Firebase 通知訊息,然後選擇建立。
否則,在「行銷活動」標籤上,選擇「新行銷活動」 ,然後選擇「通知」 。
輸入訊息文字。所有其他欄位都是可選的。
從右側窗格中選擇傳送測試訊息。
在標記為 新增 FCM 註冊令牌 的欄位中,輸入您在本指南上一部分中獲得的註冊令牌。
選擇測試。
選擇“測試”後,目標用戶端裝置(應用程式位於背景)應該會收到通知。
若要深入了解向您的應用程式發送的訊息,請參閱FCM 報告儀表板,該儀表板記錄Apple 和Android 裝置上發送和開啟的訊息數,以及Android 應用程式的「展示次數」(使用者看到的通知)數據。
處理互動
當用戶點擊通知時,Android 和 iOS 上的預設行為都是開啟應用程式。如果應用程式被終止,它將被啟動,如果它在後台,它將被帶到前台。
根據通知的內容,您可能希望在應用程式開啟時處理使用者的互動。例如,如果使用通知發送新的聊天訊息並且用戶選擇它,您可能希望在應用程式開啟時開啟特定對話。
firebase-messaging
套件提供了兩種方法來處理此互動:
-
getInitialMessage()
:如果應用程式從終止狀態打開,則此方法傳回包含RemoteMessage
的Future
。一旦使用,RemoteMessage
將被刪除。 -
onMessageOpenedApp
:當應用程式從背景狀態開啟時發布RemoteMessage
Stream
。
為了確保用戶獲得流暢的體驗,您應該處理這兩種情況。下面的程式碼範例概述瞭如何實現這一點:
class Application extends StatefulWidget {
@override
State<StatefulWidget> createState() => _Application();
}
class _Application extends State<Application> {
// In this example, suppose that all messages contain a data field with the key 'type'.
Future<void> setupInteractedMessage() async {
// Get any messages which caused the application to open from
// a terminated state.
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
// If the message also contains a data property with a "type" of "chat",
// navigate to a chat screen
if (initialMessage != null) {
_handleMessage(initialMessage);
}
// Also handle any interaction when the app is in the background via a
// Stream listener
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
}
void _handleMessage(RemoteMessage message) {
if (message.data['type'] == 'chat') {
Navigator.pushNamed(context, '/chat',
arguments: ChatArguments(message),
);
}
}
@override
void initState() {
super.initState();
// Run code required to handle interacted messages in an async function
// as initState() must not be async
setupInteractedMessage();
}
@override
Widget build(BuildContext context) {
return Text("...");
}
}
如何處理互動取決於您的應用程式設定。上面的範例顯示了使用StatefulWidget
的基本範例。
下一步
向前台應用程式發送訊息
當您的應用程式在背景時成功發送通知訊息後,請參閱在 Flutter 應用程式中接收訊息以開始傳送到前台應用程式。
超越通知訊息
要為您的應用程式添加其他更高級的行為,您需要一個伺服器實作。
然後,在您的應用程式用戶端中: