Skip to content

Push Notification

VBot Android SDK sử dụng Google Firebase để nhận thông báo cuộc gọi đến.

Trên Firebase

Tạo Project

Thêm ứng dụng của bạn vào Project vừa tạo

Tải file google-services.json

Vào Project Setting -> Service accounts -> Firebase Admin SDK

Trong màn hình hiện ra. Chọn Java

Chọn Generate new private key

Push1

Mở file vừa tải về. Sao chép toàn bộ nội dung có trong file

Trên Website VBot

Dùng tài khoản Admin đăng nhập vào website VBot.vn

Truy cập vào Cài đặt nhóm -> SDK Mobile Push

Chọn + Thêm mới

Push2

Nhập tên của app

Chọn loại là FCM Push Credential (Android)

Dán nội dung file vừa sao chép ở bước trên vào ô KEY

Chọn Lưu

Push3

Trên Project App của bạn

Thêm google-services.json vào thư mục app

Push4

Trong file build.gradle(Module :app)

Ở mục dependencies , thêm 2 dòng sau:

groovy
implementation platform('com.google.firebase:firebase-bom:32.4.0')
implementation 'com.google.firebase:firebase-messaging-ktx:23.3.1'

Ở mục plugins , thêm dòng sau:

groovy
id 'com.google.gms.google-services'

Trong file build.gradle(Project) , ở mục plugins , thêm dòng sau:

groovy
id 'com.google.gms.google-services'

Nhận cuộc gọi đến

VBot SDK không tự khai FirebaseMessagingService. App của bạn sở hữu service và tự route payload noticall vào SDK qua notificationCall(map). Nhờ vậy SDK cùng tồn tại được với firebase_messaging / notification nghiệp vụ sẵn có của bạn, không tranh chấp MESSAGING_EVENT.

Trong file manifests , ở thẻ application , khai service của chính app bạn:

xml
<service
    android:name=".FirebaseService"
    android:exported="false"
    android:stopWithTask="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Tạo class đón thông báo, khi nhận data message noticall thì chuyển nguyên HashMap<String,String> payload sang SDK:

kotlin
class FirebaseService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        // Lưu token; truyền vào connect() ở lần kết nối kế tiếp
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        val map = HashMap(remoteMessage.data) // cần chứa key "transId" và "offCall"
        VBotClient(applicationContext).apply {
            if (!isSetup()) setup(VBotConfig(VBotEnvironment.PRODUCTION))
            notificationCall(map)
        }
    }
}

notificationCall(map) xử lý:

  • offCall == "0": hiện notification cuộc gọi đến + chuẩn bị (mở socket, register SIP). Khi cả hai sẵn sàng, SDK gửi ready và chờ INVITE. Nếu không register được trong 20 giâyonCallEnded(IncomingCallTimeout) + tự dọn.
  • offCall != "0": cuộc gọi đã bị huỷ từ xa → huỷ chuẩn bị, gỡ notification.

Nếu app đã dùng firebase_messaging (Flutter)

Nếu bạn đã có service xử lý notification nghiệp vụ, chỉ cần trong onMessageReceived phân loại: message noticall (có transId/offCall) thì route sang notificationCall(map), còn lại xử lý như cũ. Android chỉ cho một service nhận MESSAGING_EVENT — dùng service sẵn có của bạn, không khai thêm service riêng cho VBot.