Để 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. Trang này có thể bao gồm các bước bạn đã hoàn tất nếu bạn đã thiết lập ứng dụng Flutter cho FCM.
Cài đặt trình bổ trợ FCM
Cài đặt và khởi chạy SDK Firebase cho Flutter nếu bạn chưa làm.
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
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 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, hàm này sẽ trả về một mã thông báo hoặc từ chối tương lai do lỗi.
final fcmToken = await FirebaseMessaging.instance.getToken();
Gửi thông báo thử nghiệm
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.
Đảm bảo ứng dụng đang chạy ở chế độ nền trên thiết bị.
Trong bảng điều khiển Firebase, hãy mở trang Messaging (Nhắn tin).
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.
- Chọn Thông báo Firebase rồi chọn Tạo.
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.
Nhập nội dung tin nhắn. Tất cả các trường khác là không bắt buộc.
Chọn Gửi tin nhắn thử nghiệm trong ngăn bên phải.
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 phần trước của hướng dẫn này.
Chọn Kiểm thử.
Sau khi bạn chọn Kiểm thử, thiết bị khách mục tiêu (có ứng dụng chạy ở chế độ nền) sẽ nhận được thông báo.
Để biết thông tin chi tiết về việc phân phố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 này ghi lại số lượng thông báo đượ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ị" (số 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 ứng dụng bị chấm dứt, ứng dụng sẽ được khởi động và nếu đang chạy ở chế độ nền, ứng dụng 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ý hoạt động tương tác của người dùng khi ứng dụng mở ra. 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 hai cách để xử lý hoạt động tương tác này:
getInitialMessage()
: Nếu ứng dụng được mở từ trạng thái đã chấm dứt, phương thức này sẽ trả về mộtFuture
chứaRemoteMessage
. Sau khi sử dụng,RemoteMessage
sẽ bị xoá.onMessageOpenedApp
: MộtStream
sẽ đăngRemoteMessage
khi ứng dụng được mở ở 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ã sau đây trình bày cách thực hiện việc 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 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 trên nền trước
Sau khi bạn gửi thành công thông báo trong khi ứng dụng đang chạy ở 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 trên nền trước.
Không chỉ thông báo tin nhắn
Để thêm các 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: