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

如要開始使用 FCM,請建立最簡單的用途:在應用程式處於裝置背景執行時,從 通知編輯器傳送測試通知訊息至開發人員裝置。本頁面列出達成此目標的所有步驟,從設定到驗證,如果您已為 FCM 設定 Flutter 應用程式,則可能涵蓋您已完成的步驟。

安裝 FCM 外掛程式

  1. 如果您尚未安裝 Flutter 專用的 Firebase SDK,請安裝並初始化這些 SDK

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

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

    flutter run
    

存取註冊權杖

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

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

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

傳送測試通知訊息

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

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

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

  4. 如果這是您的第一則訊息,請選取「建立第一個廣告活動」

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

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

  7. 在右側窗格中選取「傳送測試訊息」

  8. 在「Add an FCM registration 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 應用程式中接收訊息」,瞭解如何開始傳送至前景應用程式。

除了通知訊息之外

如要在應用程式中新增其他進階行為,您需要伺服器導入程序

接著,在應用程式用戶端中執行下列操作: