如要開始使用 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 通知訊息」,然後選取「建立」。
否則,請在「廣告活動」分頁中選取「新增廣告活動」,然後選取「通知」。
輸入訊息文字。其他欄位則為選填。
在右側窗格中選取「傳送測試訊息」。
在標示為「新增 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 應用程式中接收訊息」,開始傳送至前景應用程式。
不只是通知訊息
如要為應用程式新增其他進階行為,您需要伺服器實作。
接著,在應用程式用戶端中: