Hướng dẫn tích hợp push notification vào app
Chọn nền tảng ở cột bên trái: iOS, Android, Flutter, React Native, .NET MAUI hoặc gửi từ backend.
🚀 Bắt đầu
Tạo tài khoản và dự án
Mỗi app là một dự án, có App ID (công khai, nhúng vào app) và API Key (bí mật, chỉ dùng ở backend). Trong bảng điều khiển, code mẫu được điền sẵn App ID của bạn và có nút tải SDK.
Khai báo APNs / FCM
iOS: file khoá
.p8, Team ID, Key ID, Bundle ID từ Apple Developer. Android: file service account JSON từ Firebase Console. Khai báo ở tab Cấu hình push của dự án.Chọn nền tảng của app
Làm theo hướng dẫn của nền tảng bạn dùng (cột bên trái), rồi gửi thử từ bảng điều khiển hoặc từ backend.
🍎 iOS Swift, iOS 13+. Thông báo qua APNs, cuộc gọi qua PushKit + CallKit. Không cần Firebase.🤖 Android Kotlin/Java, minSdk 23. Firebase Cloud Messaging, màn hình cuộc gọi toàn màn hình dựng sẵn.💙 Flutter Dart, Flutter 3.22+. Dựa trên firebase_messaging và flutter_callkit_incoming.⚛️ React Native TypeScript, RN 0.71+. Dựa trên @react-native-firebase/messaging và react-native-callkeep.🟣 .NET MAUI C#, .NET 10. Android dùng Firebase, iOS dùng PushKit + CallKit trực tiếp.🖥️ Backend Backend của bạn gọi REST API để gửi thông báo và cuộc gọi tới app.
- API Key (
psk_…) chỉ dùng ở backend. Tuyệt đối không nhúng vào app. - Thử trên máy thật: simulator iOS không nhận được push cuộc gọi; emulator Android phải có Google Play.
❓ Lỗi thường gặp
- iOS báo
BadDeviceToken - Sai môi trường sandbox/production: bản debug từ Xcode là sandbox, TestFlight/App Store là production.
- Không có badge VoIP
- Chưa bật Background Mode Voice over IP hoặc chưa bật cuộc gọi khi khởi tạo SDK.
- Android không đổ chuông khi tắt app
- Máy Xiaomi/Oppo/Vivo chặn chạy nền: bật Tự khởi động, tắt tối ưu pin. Android 14+: cấp quyền hiển thị toàn màn hình.
- Thiết bị không nhận được gì
- Service account FCM khác project Firebase của app, hoặc Bundle ID khác với cấu hình APNs.