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

如要開始使用 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. 在右側窗格中選取「傳送測試訊息」

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

不再侷限於通知訊息

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

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