VGVoiceClient
Bevor Sie einen Anruf empfangen können, muss sich das Client SDK bei den Vonage-Servern authentifizieren. Die folgenden Ergänzungen sind erforderlich, um ViewController.swift.
HINWEIS: Beachten Sie, dass Sie bereits importiert haben VGVoiceClient am Anfang der Datei.
Hinzufügen einer VonageClientSDKVoice Instanz, unterhalb der connectionStatusLabel.
class ViewController: UIViewController {
...
let connectionStatusLabel = UILabel()
let client = VGVoiceClient()
...
}
Hinzufügen des JWT
Am Ende des viewDidLoadsetzen Sie den Client-Delegaten und erstellen Sie eine Sitzung - stellen Sie sicher, dass Sie die ALICE_JWT für die JWT die Sie in einem früheren Schritt erstellt haben.
override func viewDidLoad() {
...
VGVoiceClient.isUsingCallKit = false
let config = VGClientConfig(region: .US)
config.enableWebsocketInvites = true
client.setConfig(config)
client.delegate = self
client.createSession("ALICE_JWT") { error, sessionId in
DispatchQueue.main.async { [weak self] in
guard let self else { return }
if error == nil {
self.connectionStatusLabel.text = "Connected"
} else {
self.connectionStatusLabel.text = error?.localizedDescription
}
}
}
}
HINWEIS: Die enableWebsocketInvites Flagge in der Client-Konfiguration und die isUsingCallKit Einstellung sollte nicht in der Produktion verwendet werden. Aktivieren Sie Push-Benachrichtigungen, um sicherzustellen, dass Sie eingehende Anrufe erhalten, auch wenn Ihre Anwendung im Hintergrund läuft. CallKit. Siehe die Push-Benachrichtigungen Leitfaden für weitere Informationen.
Der Kundenbeauftragte
Damit der Delegierte funktioniert, müssen Sie folgende Voraussetzungen erfüllen ViewController entsprechen VGVoiceClientDelegate. Fügen Sie die Erweiterung am Ende der Datei hinzu.
extension ViewController: VGVoiceClientDelegate {
func client(_ client: VGBaseClient, didReceiveSessionErrorWith reason: VGSessionErrorReason) {
let reasonString: String!
switch reason {
case .tokenExpired:
reasonString = "Expired Token"
case .pingTimeout, .transportClosed:
reasonString = "Network Error"
default:
reasonString = "Unknown"
}
DispatchQueue.main.async { [weak self] in
self?.connectionStatusLabel.text = reasonString
}
}
}
Wenn ein Fehler auftritt, wird eine Fehlermeldung angezeigt und die connectionStatusLabel wird mit dem entsprechenden Verbindungsstatus aktualisiert.
Bauen und Ausführen
Presse Cmd + R zu bauen und wieder zu starten:

Annehmen eines Anrufs in der App
Sie erhalten einen Anruf von einem Telefon zu Ihrer App