Gửi tin nhắn thử nghiệm cho một ứng dụng ở chế độ 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 thông báo kiểm thử từ Trình soạn thông báo đến thiết bị phát triển khi ứng dụng chạy trong nền trên thiết bị. Trang này liệt kê tất cả các bước để thực hiện việc này, từ thiết lập đến xác minh – 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 thực hiện.

  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 mã thông báo đăng ký của thiết bị đó. Vì 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 hoặc lưu trữ mã thông báo 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, thì phương thức này sẽ yêu cầu người dùng cấp quyền gửi thông báo. Nếu không, phương thức 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 các thiết bị Apple, bạn 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 của Firebase, hãy mở trang Nhắn tin.

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

    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 Thêm mã thông báo đăng ký FCM, hãy nhập mã thông báo đăng ký 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 Test (Kiểm thử), thiết bị khách được nhắm đến (có ứng dụng chạy trong nền) sẽ nhận được thông báo.

Để biết thông tin chi tiết về quá trình 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. Trang tổng quan này ghi lại số lượng tin nhắn được gửi và mở trên thiết bị Apple và Android, 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 là mở ứng dụng đó. Nếu bị chấm dứt, ứng dụng sẽ được khởi động và nếu đang chạy trong nền, ứng dụng sẽ được đưa lên nền trước.

Tuỳ thuộc vào nội dung 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 mở. Ví dụ: nếu tin nhắn trò chuyện mới được gửi bằng thông báo và người dùng chọn thông báo đó, thì bạn nên mở cuộc trò chuyện cụ thể khi ứng dụng mở ra.

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ở ở 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. Mã ví dụ 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 cho thấy một 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 gửi thành công tin nhắn thông báo khi ứng dụng chạy ở chế độ nền, hãy xem phần Nhận tin nhắn trong ứng dụng Flutter để bắt đầu gửi đến các ứng dụng chạy 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 triển khai máy chủ.

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