Swift

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:

Interface connected