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

如要開始使用 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 控制台中,開啟「訊息」頁面

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

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

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

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

  8. 在標示為「新增 FCM 註冊權杖」的欄位中,輸入您在本指南先前章節中取得的註冊權杖。

  9. 選取「測試」

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

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

處理互動

使用者輕觸通知時,Android 和 iOS 預設都會開啟應用程式。如果應用程式已終止,系統會啟動應用程式;如果應用程式在背景執行,系統會將其移至前景。

視通知內容而定,您可能想在應用程式開啟時處理使用者的互動。舉例來說,如果使用者透過通知傳送新的即時通訊訊息並選取該訊息,您可能會想在應用程式開啟時開啟特定對話。

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

  1. getInitialMessage():如果應用程式是從終止狀態開啟,這個方法會傳回包含 RemoteMessageFutureRemoteMessage 一經使用就會移除。
  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 應用程式中接收訊息」,開始傳送至前景應用程式。

不只是通知訊息

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

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