Gửi tin nhắn thử nghiệm cho một ứng dụng chạy trong nền

Để bắt đầu sử dụng FCM, hãy xây dựng trường hợp sử dụng đơn giản nhất: gửi tin nhắn thông báo thử nghiệm từ Trình soạn thông báo sang thiết bị phát triển khi thiết bị chạy trong nền. Trang này liệt kê tất cả các bước để đạt được điều này, từ thiết lập đến xác minh — báo cáo có thể bao gồm các bước bạn đã hoàn tất nếu bạn thiết lập một ứng dụng Flutter cho FCM.

Cài đặt trình bổ trợ FCM

  1. Cài đặt và khởi chạy Firebase SDK cho Flutter nếu bạn chưa làm như vậy.

  2. Từ thư mục gốc của dự án Flutter, hãy chạy lệnh sau để cài đặt trình bổ trợ:

    flutter pub add firebase_messaging
    
  3. Sau khi hoàn tất, hãy tạo lại ứng dụng Flutter:

    flutter run
    

Truy cập vào mã thông báo đăng ký

Để gửi tin nhắn đến một thiết bị cụ thể, bạn cần biết thiết bị đó mã thông báo đăng ký. Do bạn cần nhập mã thông báo vào một trường trong Bảng điều khiển thông báo để hoàn tất hướng dẫn này, hãy nhớ sao chép mã thông báo hoặc lưu trữ an toàn sau khi bạn truy xuất.

Để truy xuất mã thông báo đăng ký hiện tại cho một phiên bản ứng dụng, hãy gọi getToken(). Nếu bạn chưa cấp quyền gửi thông báo, phương pháp này sẽ hãy yêu cầu người dùng cấp quyền gửi thông báo. Nếu không, hàm này sẽ trả về một mã thông báo hoặc từ chối tương lai do xảy ra lỗi.

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

Gửi tin nhắn thông báo thử nghiệm

  1. Cài đặt và chạy ứng dụng trên thiết bị mục tiêu. Trên thiết bị Apple, bạn sẽ cần để chấp nhận yêu cầu cấp quyền nhận thông báo từ xa.

  2. Hãy đảm bảo ứng dụng đang chạy trong nền trên thiết bị.

  3. Trong bảng điều khiển Firebase, hãy mở trang Nhắn tin.

  4. Nếu đây là thư đầu tiên của bạn, hãy chọn Tạo chiến dịch.

    1. Chọn Tin nhắn thông báo Firebase rồi chọn Tạo.
  5. Nếu không, trên thẻ Chiến dịch, hãy chọn Chiến dịch mới rồi chọn Thông báo.

  6. Nhập nội dung tin nhắn. Tất cả các trường khác là không bắt buộc.

  7. Chọn Gửi tin nhắn thử nghiệm trên ngăn bên phải.

  8. Trong trường có nhãn Add an FCM registration token (Thêm mã thông báo đăng ký FCM), hãy nhập thông tin đăng ký mã thông báo mà bạn đã nhận được ở phần trước của hướng dẫn này.

  9. Chọn Kiểm tra.

Sau khi bạn chọn Kiểm thử, thiết bị khách được nhắm đến (với ứng dụng ở nền) sẽ nhận được thông báo.

Để biết thông tin chi tiết về cách gửi tin nhắn đến ứng dụng của bạn, hãy xem trang tổng quan báo cáo FCM, Dữ liệu này ghi lại số lượng tin nhắn được gửi và mở trên Apple và Android thiết bị, cùng với dữ liệu về "lượt hiển thị" (thông báo mà người dùng nhìn thấy) cho Ứng dụng Android.

Xử lý lượt tương tác

Khi người dùng nhấn vào một thông báo, hành vi mặc định trên cả Android và iOS sẽ mở ứng dụng. Nếu ứng dụng bị chấm dứt, nó sẽ được bắt đầu và nếu nó ở chế độ nền, nó sẽ được đưa lên nền trước.

Tuỳ thuộc vào nội dung của thông báo, bạn có thể muốn xử lý tương tác của người dùng khi ứng dụng sẽ mở ra. Ví dụ: nếu tin nhắn trò chuyện mới được gửi dưới dạng thông báo và người dùng chọn thông báo đó, bạn có thể muốn mở cuộc trò chuyện cụ thể khi ứng dụng mở.

Gói firebase-messaging cung cấp 2 cách để xử lý hoạt động tương tác này:

  1. getInitialMessage(): Nếu ứng dụng được mở từ trạng thái đã kết thúc, thì phương thức này sẽ trả về Future chứa RemoteMessage. Sau khi sử dụng, RemoteMessage sẽ bị xoá.
  2. onMessageOpenedApp: Một Stream sẽ đăng RemoteMessage khi ứng dụng được mở qua một trạng thái nền.

Để đảm bảo người dùng có được trải nghiệm suôn sẻ, bạn nên xử lý cả hai trường hợp. Ví dụ về mã dưới đây trình bày cách đạt được điều này:

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("...");
  }
}

Cách bạn xử lý hoạt động tương tác phụ thuộc vào cách thiết lập ứng dụng của bạn. Ví dụ trên đưa ra ví dụ cơ bản về cách sử dụng StatefulWidget.

Các bước tiếp theo

Gửi tin nhắn đến các ứng dụng chạy trên nền trước

Sau khi bạn gửi thành công tin nhắn thông báo khi ứng dụng đang chạy nền, xem Nhận tin nhắn trong ứng dụng Flutter để bắt đầu gửi thư đến các ứng dụng trên nền trước.

Không chỉ dừng lại ở nội dung thông báo

Để thêm hành vi khác, nâng cao hơn vào ứng dụng, bạn cần có Triển khai máy chủ.

Sau đó, trong ứng dụng khách: