Verwalten von Anruf-Haltefunktionen
Das Vonage Client SDK verfügt über keine eigene „Hold“-API. Stattdessen Die Stummschaltung erfolgt durch eine Kombination aus Stummschaltung und Ohrenschützern:
mute(callId)— unterbricht die Audioübertragung an den GesprächspartnerenableEarmuff(callId)— erhält keinen Ton mehr vom Gesprächspartner
An Freigeben, beides umkehren: Aufruf unmute(callId) und disableEarmuff(callId).
Unter iOS und Android bietet die Benutzeroberfläche für Systemanrufe (CallKit / Telecom-Framework) eine native Warteschleifentaste. Die folgenden Plattformanleitungen zeigen, wie diese Taste mit den Funktionen „Stummschalten“ und „Kopfhörer“ des SDK verknüpft wird.
Dieser Leitfaden führt Sie Schritt für Schritt durch den Prozess der Implementierung der Anruf-Haltefunktion in Ihren iOS- und Android-Applications mithilfe unseres VoIP-SDKs.
Die Anrufwarteschleife wird derzeit im Web-SDK nicht unterstützt.
Telekommunikationsintegration
Bevor Sie mit diesem Tutorial beginnen, stellen Sie bitte sicher, dass Sie das Android Telecom-Framework in Ihre Applications integriert haben.
Sie können der offiziellen Anleitung folgen hier oder probieren Sie unsere Android-App „Voice Sample“ aus, die hier verfügbar ist hier.
Unterstützung der Holding über die Implementierung der Verbindung
Sobald Sie Ihre Implementierung des Verbindung Klasse,
du musst die CAPABILITY_SUPPORT_HOLD zu den Verbindungsfunktionen
und überschreiben die onHold() und onUnhold() Methoden.
Nachfolgend finden Sie ein Beispiel in Kotlin:
class CallConnection(val callId: CallId) : Connection() {
private lateinit var clientManager: VoiceClientManager
var isOnHold = false
private set
init {
connectionProperties = connectionProperties or PROPERTY_SELF_MANAGED
connectionCapabilities = connectionCapabilities or CAPABILITY_SUPPORT_HOLD /** add other capabilities */
audioModeIsVoip = true
}
// ... Other methods ...
override fun onHold() {
if (!isOnHold) {
clientManager.holdCall(this)
}
}
override fun onUnhold() {
if (isOnHold) {
clientManager.unholdCall(this)
}
}
fun toggleHoldState() {
isOnHold = !isOnHold
if (isOnHold) setOnHold() else setActive()
}
}
Interaktion mit dem Voice SDK
Um den Haltezustand für einen Anruf zu aktivieren, aktivieren Sie Stummschalten und Ohrenschützer gleichzeitig.
Der folgende Code innerhalb der VoiceClientManager Die Klasse veranschaulicht dies:
class VoiceClientManager(private val context: Context) {
private lateinit var client : VoiceClient
fun holdCall(call: CallConnection){
call.apply{
client.mute(callId){ error ->
error?.let {
println("Error muting when holding call with id: $callId")
} ?: run {
client.enableEarmuff(callId){ error ->
error?.let {
println("Error enabling earmuff when holding with id: $callId")
} ?: run {
println("Call $callId successfully put on hold")
toggleHoldState()
}
}
}
}
}
}
fun unholdCall(call: CallConnection){
call.apply{
client.unmute(callId){ error ->
error?.let {
println("Error unmuting when unholding call with id: $callId")
} ?: run {
client.disableEarmuff(callId){ error ->
error?.let {
println("Error disabling earmuff unholding call with id: $callId")
} ?: run {
println("Call $callId successfully removed from hold")
toggleHoldState()
}
}
}
}
}
}
}
Sie können die Codeausschnitte gerne an Ihre spezifische Umsetzung und Ihre Anforderungen anpassen.
Callkit-Integration
Bevor Sie mit diesem Tutorial beginnen, stellen Sie bitte sicher, dass Sie das Callkit-Framework in Ihre Applications integriert haben.
Sie können dem offizieller Reiseführer, oder probieren Sie unsere iOS-App „Voice Sample“ aus, die hier verfügbar ist hier.
Support-Holding über CXUpdate
Sobald Sie Ihre CallController Klasse, die einen Verweis auf ein CXProvider und eine CXCallController Sie müssen die supportsHolding Flag auf dem CXCallUpdate sowohl für ausgehende als auch für eingehende Anrufe.
Nachfolgend finden Sie ein Beispiel in Swift:
import CallKit
class CallController {
let callProvider: CXProvider
let cxController = CXCallController()
// ... Other methods ...
func reportOutgoingCall(callId: String){
self.callProvider.reportOutgoingCall(with: callId, connectedAt: Date.now)
let update = CXCallUpdate()
/** add other capabilities */
update.supportsHolding = true
self.callProvider.reportCall(with: callId, updated: update)
}
func reportIncomingCall(callId: String){
let update = CXCallUpdate()
/** add other capabilities */
update.supportsHolding = true
self.callProvider.reportNewIncomingCall(with: callId, update: update)
}
}
Interaktion mit dem Voice SDK
Sobald Sie Ihre CXProviderDelegate Umsetzung,
hören Sie sich das CXSetHeldCallAction Anrufe mithilfe des Voice SDK in die Warteschleife zu stellen.
Um den Haltezustand für einen Anruf zu aktivieren, aktivieren Sie Stummschalten und Ohrenschützer gleichzeitig.
Der folgende Code innerhalb der CallController Die Klasse veranschaulicht dies:
import VonageClientSDKVoice
class CallController: NSObject {
let callProvider: CXProvider
let cxController = CXCallController()
let client: VGVoiceClient
var activeCalls: [UUID: String] = [:] // Maps CallKit UUID to Vonage callId
// ... initialization and other methods ...
}
extension CallController: CXProviderDelegate {
func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction) {
guard let callId = self.activeCalls[action.callUUID] else {
action.fail()
return
}
if action.isOnHold {
self.client.mute(callId) { error in
if let error = error {
print("Error muting when holding call: \(error)")
return
}
self.client.enableEarmuff(callId) { error in
if let error = error {
print("Error enabling earmuff when holding call: \(error)")
return
}
print("Call \(callId) successfully put on hold")
}
}
} else {
self.client.unmute(callId) { error in
if let error = error {
print("Error unmuting when unholding call: \(error)")
return
}
self.client.disableEarmuff(callId) { error in
if let error = error {
print("Error disabling earmuff when unholding call: \(error)")
return
}
print("Call \(callId) successfully removed from hold")
}
}
}
// CallKit requires fulfilling the action synchronously
action.fulfill()
}
}
Sie können die Codeausschnitte gerne an Ihre spezifische Umsetzung und Ihre Anforderungen anpassen.