Bagikan melalui


Menyiapkan panggilan satu-ke-satu dan pemberitahuan push di Pustaka UI

Pustaka UI menyediakan dukungan siap pakai untuk melakukan panggilan satu ke satu dengan menggunakan pengidentifikasi peserta Azure Communication Services. Untuk mendukung panggilan satu-ke-satu, Pustaka UI menyediakan pemberitahuan panggilan masuk. Anda juga dapat menggunakan Azure Communication Services sebagai sumber peristiwa Azure Event Grid untuk panggilan.

Dalam artikel ini, Anda mempelajari cara melakukan panggilan satu-ke-satu dengan benar dengan menggunakan Pustaka UI di aplikasi Anda.

Prasyarat

Menyiapkan fitur

Untuk informasi selengkapnya, lihat Pustaka UI Android sumber terbuka dan kode aplikasi sampel.

Menyiapkan izin untuk pemberitahuan push

Untuk menyiapkan pemberitahuan push, Anda memerlukan akun Firebase dengan Firebase Cloud Messaging (FCM) diaktifkan. Layanan FCM Anda harus terhubung ke instans Azure Notification Hubs. Untuk informasi selengkapnya, lihat pemberitahuan Communication Services. Anda juga perlu menggunakan Android Studio versi 3.6 atau yang lebih baru untuk membangun aplikasi Anda.

Agar aplikasi Android menerima pesan pemberitahuan dari FCM, aplikasi memerlukan serangkaian izin. Di file Anda AndroidManifest.xml , tambahkan sekumpulan izin berikut setelah <manifest ...> tag atau </application> .

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

Menambahkan pemberitahuan masuk ke aplikasi seluler Anda

Azure Communication Services terintegrasi dengan Azure Event Grid dan Azure Notification Hubs, sehingga Anda dapat menambahkan pemberitahuan push ke aplikasi Anda di Azure.

Daftar/Batalkan pendaftaran untuk pemberitahuan push hub pemberitahuan

Untuk mendaftar pemberitahuan push, aplikasi perlu memanggil registerPushNotification() CallComposite instans dengan token pendaftaran perangkat.

Untuk mendapatkan token pendaftaran perangkat, tambahkan Firebase SDK ke instans modul build.gradle aplikasi Anda. Untuk menerima pemberitahuan dari Firebase, integrasikan Azure Notification Hubs dengan mengikuti instruksi di pemberitahuan Communication Services.

    val deviceRegistrationToken = "" // From Firebase
    callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Menangani pemberitahuan push yang diterima dari Event Grid atau hub pemberitahuan

Untuk menerima pemberitahuan push untuk panggilan masuk, panggil handlePushNotification instans CallComposite dengan payload.

Untuk mendapatkan payload dari FCM, mulailah dengan membuat layanan baru (Layanan Layanan> Baru>File>) yang memperluas FirebaseMessagingService kelas Firebase SDK dan mengambil alih onMessageReceived metode . Metode ini adalah penanganan aktivitas yang dipanggil ketika FCM mengirimkan pemberitahuan push ke aplikasi.

    // On Firebase onMessageReceived
    val pushNotification = CallCompositePushNotification(remoteMessage.data)
    callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Mendaftar untuk pemberitahuan panggilan masuk

Untuk menerima pemberitahuan panggilan masuk setelah handlePushNotification, berlangganan CallCompositeIncomingCallEvent dan CallCompositeIncomingCallCancelledEvent. CallCompositeIncomingCallEvent berisi informasi callId dan penelepon masuk. CallCompositeIncomingCallCancelledEvent berisi pemecahan masalah kode pembatalan panggilan dan panggilan di Azure Communication Services.

    private var incomingCallEvent: IncomingCallEvent? = null
    private var incomingCallCancelledEvent: IncomingCallCancelledEvent? = null

    class IncomingCallEvent : CallCompositeEventHandler<CallCompositeIncomingCallEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallEvent?) {
            // Display incoming call UI to accept/decline a call
            // CallCompositeIncomingCallEvent contains call id and caller information
        }
    }

    class IncomingCallCancelledEvent : CallCompositeEventHandler<CallCompositeIncomingCallCancelledEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallCancelledEvent?) {
            // Call-ended event when a call is declined or not accepted
        }
    }

    // Event subscription
    incomingCallEvent = IncomingCallEvent()
    callComposite.addOnIncomingCallEventHandler(incomingCallEvent)

    incomingCallCancelledEvent = IncomingCallCancelledEvent()
    callComposite.addOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

    // Event unsubscribe
    callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
    callComposite.removeOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

Menangani panggilan

Untuk menerima panggilan, lakukan panggilan ke accept. Untuk menolak panggilan, lakukan panggilan ke reject.

// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)

// Decline call
callComposite.reject(incomingCallId)

Putar-putar peserta lain

Untuk memulai panggilan dengan peserta lain, buat CallCompositeStartCallOptions dengan ID mentah peserta dari CommunicationIdentity dan launch.

    val participants: List<CommunicationIdentifier> // participants to dial
    callComposite.launch(context, participants, localOptions)

Untuk informasi selengkapnya, lihat Pustaka UI iOS sumber terbuka dan kode aplikasi sampel.

Siapkan pemberitahuan push

Pemberitahuan push seluler adalah pemberitahuan pop-up yang Anda dapatkan di perangkat seluler. Artikel ini berfokus pada pemberitahuan push Voice over Internet Protocol (VoIP).

Bagian berikut ini menjelaskan cara mendaftar, menangani, dan membatalkan pendaftaran pemberitahuan push. Sebelum Anda memulai tugas tersebut, selesaikan prasyarat ini:

  1. Di Xcode, buka Menandatangani & Kapabilitas. Tambahkan kapabilitas dengan memilih + Capability, lalu pilih Pemberitahuan Push.
  2. Tambahkan kapabilitas lain dengan memilih + Capability, lalu pilih Mode Latar Belakang.
  3. Di Mode Latar Belakang, pilih kotak centang Voice over IP dan Pemberitahuan jarak jauh.

Menambahkan pemberitahuan masuk ke aplikasi seluler Anda

Azure Communication Services terintegrasi dengan Azure Event Grid dan Azure Notification Hubs, sehingga Anda dapat menambahkan pemberitahuan push ke aplikasi Anda di Azure.

Daftar/batalkan pendaftaran untuk pemberitahuan push hub pemberitahuan

Untuk mendaftar pemberitahuan push, aplikasi perlu memanggil registerPushNotifications() CallComposite instans dengan token pendaftaran perangkat.

    // to register
    let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
    callComposite.registerPushNotifications(
        deviceRegistrationToken: deviceToken) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

    // to unregister
    callComposite.unregisterPushNotification()

Menangani pemberitahuan push yang diterima dari Event Grid atau hub pemberitahuan

Untuk menerima pemberitahuan push untuk panggilan masuk, hubungi handlePushNotification()padaCallComposite instans dengan payload kamus.

Saat Anda menggunakan handlePushNotification() dan opsi CallKit diatur, Anda mendapatkan pemberitahuan CallKit untuk menerima atau menolak panggilan.

    // App is in the background
    // push notification contains from/to communication identifiers and event type
    let pushNotification = PushNotification(data: payload.dictionaryPayload)
    let callKitOptions = CallKitOptions(...//CallKit options)
    CallComposite.reportIncomingCall(pushNotification: pushNotification,
                                    callKitOptions: callKitOptions) { result in
        if case .success() = result {
            DispatchQueue.global().async {
                // You don't need to wait for a Communication Services token to handle the push because 
                // Communication Services common receives a callback function to get the token with refresh options
                // create call composite and handle push notification
                callComposite.handlePushNotification(pushNotification: pushNotification)
            }
        }
    }

    // App is in the foreground
    let pushNotification = PushNotification(data: dictionaryPayload)
    callComposite.handlePushNotification(pushNotification: pushNotification) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

Mendaftar untuk pemberitahuan panggilan masuk saat menangani pendorongan

Untuk menerima pemberitahuan panggilan masuk setelah handlePushNotification, berlangganan onIncomingCall dan onIncomingCallCancelled. IncomingCall berisi informasi callId dan penelepon masuk. IncomingCallCancelled berisi pemecahan masalah kode pembatalan panggilan dan panggilan di Azure Communication Services.

    let onIncomingCall: (IncomingCall) -> Void = { [] incomingCall in
        // Incoming call id and caller info
    }
    let onIncomingCallEnded: (IncomingCallCancelled) -> Void = { [] incomingCallCancelled in
        // Incoming call cancelled code with callId
    }
    callComposite.events.onIncomingCall = onIncomingCall
    callComposite.events.onIncomingCallEnded = onIncomingCallEnded

Menonaktifkan pendorongan internal untuk panggilan masuk

Untuk menerima pemberitahuan push hanya dari EventGrid dan APNS diatur disableInternalPushForIncomingCall ke true di CallCompositeOptions. Jika disableInternalPushForIncomingCall benar, peristiwa pemberitahuan push dari pustaka ui hanya diterima ketika handlePushNotification akan dipanggil. Opsi disableInternalPushForIncomingCall ini membantu berhenti menerima pemberitahuan dari CallComposite dalam mode latar depan. Pengaturan ini tidak mengontrol EventGrid dan NotificationHub menyetel.

    let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)

Luncurkan komposit pada panggilan masuk yang diterima dari panggilan SDK CallKit

Azure Communication Services Calling iOS SDK mendukung integrasi CallKit. Anda dapat mengaktifkan integrasi ini di Pustaka UI dengan mengonfigurasi instans CallCompositeCallKitOption. Untuk informasi selengkapnya, lihat Mengintegrasikan dengan CallKit.

Berlangganan onIncomingCallAcceptedFromCallKit jika CallKit dari memanggil SDK diaktifkan. Saat panggilan diterima, luncurkan callComposite dengan ID panggilan.

    let onIncomingCallAcceptedFromCallKit: (callId) -> Void = { [] callId in
        // Incoming call accepted call id
    }
    
    callComposite.events.onIncomingCallAcceptedFromCallKit = onIncomingCallAcceptedFromCallKit

    // launch composite with/without local options
    // Note: as call is already accepted, setup screen will not be displayed
    callComposite.launch(callIdAcceptedFromCallKit: callId)

Menangani panggilan dengan CallComposite

Untuk menerima panggilan, lakukan panggilan ke accept. Untuk menolak panggilan, lakukan panggilan ke reject.

// Accept call
callComposite.accept(incomingCallId, 
                     ... // CallKit and local options
                     )

// Decline call
callComposite.reject(incomingCallId)

Putar-putar peserta lain

Untuk memulai panggilan dengan peserta lain, luncurkan callComposite dengan daftar peserta .CommunicationIdentifier

    // [CommunicationIdentifier]
    // use createCommunicationIdentifier(fromRawId: "raw id")
    callComposite.launch(participants: <list of CommunicationIdentifier>,
                         localOptions: localOptions)

Langkah berikutnya