傳送測試訊息至背景執行的應用程式

如要開始使用 FCM,請建構最簡單的用途:當應用程式在裝置背景於背景執行時,從 通知編輯器傳送測試通知訊息到開發裝置。本頁面列出了需要完成的所有步驟 (從設定到驗證),其中可能涵蓋您已為 FCM 設定 Flutter 應用程式時已完成的步驟。

安裝 FCM 外掛程式

  1. 如果尚未安裝並初始化 Flutter 專用的 Firebase SDK,請先完成安裝。

  2. 在 Flutter 專案的根目錄中執行下列指令,以安裝外掛程式:

    flutter pub add firebase_messaging
    
  3. 完成後,請重新建構 Flutter 應用程式:

    flutter run
    

存取註冊權杖

如要傳送訊息給特定裝置,您需要知道該裝置的註冊權杖。您需要在通知主控台的欄位中輸入權杖以完成本教學課程,因此在擷取權杖後,請務必複製權杖,或以安全的方式儲存。

如要擷取應用程式執行個體目前的註冊權杖,請呼叫 getToken()。如果使用者尚未授予通知權限,這個方法會要求使用者授予通知權限。否則,則會傳回憑證,或因發生錯誤而拒絕 Future。

final fcmToken = await FirebaseMessaging.instance.getToken();

傳送測試通知訊息

  1. 在目標裝置上安裝並執行應用程式。在 Apple 裝置上,您必須接受接收遠端通知的要求。

  2. 確認應用程式在裝置的背景執行。

  3. 在 Firebase 控制台中開啟「Messaging」頁面。

  4. 如果這是您的第一則廣告活動,請選取「製作您的第一個廣告活動」

    1. 選取「Firebase 通知訊息」,然後選取「建立」
  5. 否則,請在「廣告活動」分頁中,依序選取「新增廣告活動」和「通知」

  6. 輸入訊息文字。所有其他欄位皆為選填。

  7. 從右側窗格中選取「Send test message」

  8. 在標示為「Add an FCM 註冊 token」的欄位中,輸入您在本指南的前一個章節取得的註冊憑證。

  9. 選取「測試」

選取「Test」後,目標用戶端裝置 (應用程式在背景執行) 應該會收到通知。

如要進一步瞭解傳送至應用程式的訊息,請參閱 FCM 報告資訊主頁,其中記錄在 Apple 和 Android 裝置上傳送及開啟的訊息數,以及 Android 應用程式的「曝光」(使用者看到的通知) 資料。

處理互動

使用者輕觸通知時,Android 和 iOS 裝置的預設行為都是開啟應用程式。如果應用程式終止,系統會啟動應用程式,若應用程式是在背景執行,就會移至前景。

根據通知內容,您可能需要在應用程式開啟時處理使用者互動。舉例來說,如果使用通知傳送新的即時通訊訊息,而使用者選取該訊息,建議您在應用程式開啟時開啟該對話。

firebase-messaging 套件提供兩種處理這類互動的方式:

  1. getInitialMessage():如果應用程式是從已終止的狀態開啟,此方法會傳回包含 RemoteMessageFuture。用完後,系統會移除 RemoteMessage
  2. onMessageOpenedApp:在從背景狀態開啟應用程式時發布 RemoteMessageStream

為了確保使用者享有流暢的體驗,你應該同時處理上述兩種情況。以下程式碼範例概述如何完成這項作業:

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 應用程式中接收訊息」,瞭解如何開始傳送至前景的應用程式。

不再侷限於通知訊息

如要為應用程式新增其他進階行為,您需要伺服器實作

接著,在應用程式用戶端中: