Ana içeriğe geç

Android - VideoCall Modülü

VideoCall modülü, arka veya ön kamera kullanarak müşterinin müşteri temsilcisiyle anlık görüntülü görüşme yapmasını sağlar. Görüşme sırasında temsilci gerekli gördüğünde OCR, NFC veya Face işlemlerini "İşlem Tekrarlatma" olarak başlatabilir.

⚠️ Ön Koşul: VideoCall Modülünü kullanmadan önce Maven erişimi sağlanmış ve Core Modülü projeye eklenmiş olmalıdır. İşlem tekrarlatmaların çalışabilmesi için OCR, NFC ve Face modüllerinin de implemente edilmiş olması gerekir.


Projeye Eklenmesi

1. libs.versions.toml dosyasına ekleyin:

wide760[versions] ... enqualify-plus = "x.x.x.x" [libraries] ... enqualify-plus-videocall = { group = "com.enqualify.plus", name = "videocall", version.ref = "enqualify-plus" }

2. build.gradle.kts dosyasına bağımlılığı ekleyin:

wide760implementation(libs.enqualify.plus.videocall)

3. Gradle Sync

"Sync Now" seçeneğine tıklayarak Gradle dosyalarını senkronize edin.


İmplementasyon

1. İzinler

Kamera ve mikrofon izinleri SDK tarafından manifeste otomatik olarak eklenir. Aşağıdaki satırlar yalnızca bilgi amaçlıdır:

wide760

Kamera veya mikrofon izni verilmezse VideoCall modülü çalışmaz.

PiP (Picture-in-Picture) Desteği

v2.1.0.0 sürümüyle gelen PiP özelliğinin çalışması için Activity'nin AndroidManifest.xml içine aşağıdaki tanımın eklenmesi gerekir:

wide760

2. Activity Layout — FrameLayout

VideoCall işleminin yapılacağı Activity'nin layout'una tam ekran kaplayan bir FrameLayout eklenmelidir:

wide760<FrameLayout android:id="@+id/fragmentContainer" android:layout_width="match_parent" android:layout_height="match_parent" />

3. VideoCallCallbacks Interface'inin Eklenmesi

VideoCallCallbacks interface'i mutlaka bir Activity ile çalışmalıdır.

Sınıfa eklenmesi:

wide760class EnQualifyPlusActivity : AppCompatActivity(), VideoCallCallbacks

Callback'lerin override edilmesi:

wide760class EnQualifyPlusActivity : AppCompatActivity(), VideoCallCallbacks { override fun initializeCompleted(moduleName: EnModules) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") when (moduleName) { EnModules.VideoCall -> { // VideoCall işlemleri başlatılabilir } } } override fun initializeFailed(failureCode: FailureCode, additionalMessage: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun callStarted() { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun agentRequest(agentRequestType: AgentRequestType) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") // Agent tekrarlatma isteklerini burada yönetin } override fun hangupConfirmation() { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun callResultCompleted(result: String, description: String, reference: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun callResultFailed(errorMessage: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun cameraFailed() { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun sessionAddFailed(errorMessage: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun sessionCloseCompleted(status: CallSessionTypeStatus) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun integrationAddCompleted() { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun integrationAddFailed(errorMessage: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } }

4. EnQualifyVideoCall'un Initialize Edilmesi

wide760val sessionModel = SessionModel( callType = "NewCustomer", reference = UUID.randomUUID().toString() ) val baseModel = BaseModel( baseURL = "https://deveqmapi.enqura.com", signallingCertificateList = listOf("enqura"), mapiCertificateList = listOf("enqura"), mobileUser = "mobile", countryCode = "TUR", locale = "TR", useEmbeddedLocalSound = false ) EnQualifyVideoCall.initialize( context = this, fragmentManager = supportFragmentManager, containerID = R.id.fragmentContainer, sessionModel = sessionModel, baseModel = baseModel )

Initialize Parametreleri

Parametre Tip Açıklama
context Context Uygulamanın çalışma zamanı bağlamı
sessionModel SessionModel VideoCall işlemi sırasında kullanılacak oturum bilgileri
baseModel BaseModel Doğrulama sürecinde temel verileri taşıyan model
fragmentManager FragmentManager VideoCall fragment'lerinin yönetimini sağlar
containerID Int VideoCall fragment'inin ekleneceği container'ın ID'si

Initialize tamamlandığında initializeCompleted tetiklenir ve görüşme başlatılabilir.


VideoCall İşlemleri

Fonksiyonlar

Fonksiyon Açıklama
startVideoCall() Görüntülü görüşmeyi başlatır; Socket ve WebRTC bağlantılarını kurar
faceRetry() Agent tarafından istenen Face işlemini tekrarlatır
ocrRetry() Agent tarafından istenen OCR işlemini tekrarlatır
backToVideoCall() OCR veya Face tekrarlatmasından sonra görüşmeye geri döner
backToVideoCallAfterNfc() NFC tekrarlatmasından sonra görüşmeye geri döner
endVideoCall() Görüntülü görüşmeyi sonlandırır
setupCallLayout(...) Görüşme ekranındaki Rotate ve Close butonlarını yapılandırır
updateSession(...) Engelli kullanıcı için session günceller
addFragment(fragment) Mevcut fragment üzerine yeni fragment ekler
replaceFragment(fragment) Mevcut fragment'i yenisiyle değiştirir
addIntegration(integrationModel) Entegrasyon verisi ekler
closeSession(isFinished: Boolean) Session'ı kapatır
clear() SDK'yı temizler

Görüşme Başlatma

wide760enQualifyVideoCall.startVideoCall()

Çağrı bir agent tarafından karşılandığında callStarted tetiklenir:

wide760override fun callStarted() { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") }


Agent İsteklerini Karşılama (İşlem Tekrarlatma)

Görüşme sırasında temsilci bir işlem tekrarlatma isteği gönderdiğinde agentRequest callback'i tetiklenir. İlgili SDK'nın önceden initialize edilmiş olması gerekir:

wide760lateinit var enQualifyOCR: EnQualifyOCR lateinit var enQualifyNFC: EnQualifyNFC lateinit var enQualifyFace: EnQualifyFace fun setupOCRSdk() { enQualifyOCR = EnQualifyOCR.getInstance() } fun setupNFCSdk() { enQualifyNFC = EnQualifyNFC.getInstance() } fun setupFaceSdk() { enQualifyFace = EnQualifyFace.getInstance() } override fun agentRequest(agentRequestType: AgentRequestType) { when (agentRequestType) { AgentRequestType.OCR -> enQualifyVideoCall.ocrRetry() AgentRequestType.FACE -> enQualifyVideoCall.faceRetry() AgentRequestType.NFC -> { /* NFC başlat, bitince backToVideoCallAfterNfc() */ } } }

Tekrarlatma sonrası görüşmeye dönüş:

wide760// OCR veya Face tekrarlatmasından sonra enQualifyVideoCall.backToVideoCall() // NFC tekrarlatmasından sonra enQualifyVideoCall.backToVideoCallAfterNfc()


Görüşmeyi Sonlandırma

wide760enQualifyVideoCall.endVideoCall() wide760override fun callResultCompleted(result: String, description: String, reference: String) { // Görüşme başarıyla sonlandı } override fun callResultFailed(errorMessage: String) { // Sonlandırma sırasında hata oluştu }


Arayüz Özelleştirme

Görüşme ekranındaki Rotate ve Close butonları özelleştirilebilir. Bu fonksiyon kullanılmazsa her iki buton da varsayılan SDK ikonlarıyla gösterilir:

wide760enQualifyVideoCall.setupCallLayout( showRotateButton = true, showCancelButton = true, rotateIconRes = R.drawable.ic_call_rotate, closeIconRes = R.drawable.ic_call_cancel )


Engelli Kullanıcı için Session Güncelleme

İşaret dili ile görüşme imkânı sağlamak için görüşme başlamadan önce çağrılmalıdır:

wide760enQualifyVideoCall.updateSession( handicapped = true, visuallyHandicapped = false )


Session Kapatma ve Temizleme

wide760enQualifyVideoCall.closeSession(isFinished = true) override fun sessionCloseCompleted(status: CallSessionTypeStatus) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name}") } override fun sessionCloseFailed(errorMessage: String) { Log.i(tag, "${object {}.javaClass.enclosingMethod?.name} $errorMessage") } enQualifyVideoCall.clear()


Proguard Kuralları

wide760-keep class org.webrtc.** { *; }


Callback Referansı

Token / Session / Settings

Callback Açıklama
tokenCreateCompleted(isNewCreatedToken: Boolean) Token oluşturulduğunda tetiklenir
tokenCreateFailed(errorMessage: String) Token oluşturma hatası
sessionAddFailed(errorMessage: String) Session oluşturma hatası
settingsGetFailed(errorMessage: String) Ayarlar alınamadığında tetiklenir
sessionCloseCompleted(status: CallSessionTypeStatus) Session kapatıldığında tetiklenir
sessionCloseFailed(errorMessage: String) Session kapatma hatası
integrationAddCompleted() Entegrasyon verisi başarıyla eklendi
integrationAddFailed(errorMessage: String) Entegrasyon verisi eklenemedi
initializeFailed(failureCode: FailureCode, additionalMessage: String) Core initialize hatası

VideoCall

Callback Açıklama
initializeCompleted(module: EnModules) Initialize tamamlandı, VideoCall hazır
callStarted() Görüşme agent tarafından karşılandı
agentRequest(agentRequestType: AgentRequestType) Agent işlem tekrarlatma isteği gönderdi
hangupConfirmation() Kullanıcı kapatma tuşuna bastı
callResultCompleted(result, description, reference) Görüşme başarıyla sonlandı
callResultFailed(errorMessage: String) Görüşme sonlandırma hatası
cameraFailed() Kamera başlatma hatası
videoCallFailed(videoCallFailure, additionalMessage) Görüşmeye bağlanma hatası
socketInitializeFailed() Socket bağlantısı kurulamadı
sessionRoomFailed(errorMessage: String) Room session oluşturma hatası