如要開始使用 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 通知訊息」,然後選取「建立」。
否則,請在「廣告活動」分頁中,依序選取「新增廣告活動」和「通知」。
輸入訊息文字。其他欄位則為選填欄位。
在右側窗格中選取「傳送測試訊息」。
在「Add an FCM registration token」欄位中,輸入您在本指南前一個部分取得的註冊權杖。
選取「測試」。
選取「Test」後,指定的用戶端裝置 (應用程式在背景執行) 應會收到通知。
如要深入瞭解應用程式訊息的傳送情形,請參閱 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 應用程式中接收訊息」,瞭解如何開始傳送至前景的應用程式。
不再侷限於通知訊息
如要在應用程式中新增其他進階行為,您需要伺服器導入程序。
接著,在應用程式用戶端中: