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

Để bắt đầu với FCM, hãy xây dựng trường hợp sử dụng đơn giản nhất: gửi một thông báo kiểm thử từ Trình soạn thảo thông báo đến một thiết bị phát triển khi ứng dụng đang chạy trong nền trên thiết bị. Trang này liệt kê tất cả các bước để đạt được mục tiêu này, từ thiết lập đến xác minh. Trang này có thể bao gồm những bước mà 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.

  2. Từ 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 thông báo đế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 sẽ 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ữ mã thông báo một cách an toàn sau khi 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 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 yêu cầu trong tương lai do lỗi.

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

Gửi 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 cần chấp nhận yêu cầu cấp quyền nhận thông báo từ xa.

  2. Đảm bảo ứng dụng đang chạy ở chế độ 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ô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 Thông báo của 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 đều không bắt buộc.

  7. Chọn Gửi tin nhắn thử nghiệm trong 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ý mà bạn đã nhận được trong một 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 hàng mục tiêu (có ứng dụng ở chế độ nền) sẽ nhận được thông báo.

Để biết thông tin chi tiết về việc gửi thông báo đế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 thông báo đã 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 các ứ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 ứng dụng bị chấm dứt, thì ứng dụng sẽ được khởi động và nếu đang ở chế độ nền, thì ứng dụng sẽ được đưa lên chế độ 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ý hoạt động tương tác của người dùng khi ứng dụng mở. Ví dụ: nếu một tin nhắn trò chuyện mới được gửi bằng thông báo và người dùng chọn tin nhắn đó, 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ở ở trạng thái đã kết thúc, phương thức này sẽ trả về một Future chứa RemoteMessage. Sau khi được sử dụng, RemoteMessage sẽ bị xoá.
  2. onMessageOpenedApp: Một Stream đăng RemoteMessage khi ứng dụng được mở từ trạng thái nền.

Để đảm bảo người dùng có trải nghiệm suôn sẻ, bạn nên xử lý cả hai trường hợp. Ví dụ về mã bên dưới 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 tuỳ thuộc vào chế độ thiết lập ứng dụng. 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 thông báo đến các ứng dụng ở nền trước

Sau khi bạn gửi thành công thông báo trong khi ứng dụng ở chế độ nền, hãy xem phần Nhận thông báo trong ứng dụng Flutter để bắt đầu gửi thông báo đến các ứng dụng ở chế độ nền.

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

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

Sau đó, trong ứng dụng khách của bạn: