Swift

VGVoiceClient

Antes de que puedas recibir una llamada, el Client SDK necesita autenticarse en los servidores de Vonage. Las siguientes adiciones son necesarias para ViewController.swift.

NOTA: Tenga en cuenta que ya ha importado VGVoiceClient al principio del archivo.

Añade un VonageClientSDKVoice por debajo del connectionStatusLabel.

class ViewController: UIViewController {
    ...
    let connectionStatusLabel = UILabel()
    let client = VGVoiceClient()
    ...
}

Añadir el JWT

Al final de viewDidLoadestablezca el delegado del cliente y cree una sesión; asegúrese de sustituir ALICE_JWT para la JWT que has creado en un paso anterior.

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
            }
        }
    }
}

NOTA: En enableWebsocketInvites opción de configuración del cliente y el isUsingCallKit Esta configuración no debe utilizarse en entornos de producción. Activa las notificaciones push para asegurarte de recibir las llamadas entrantes incluso cuando la aplicación esté en segundo plano utilizando CallKit. Consulta el notificaciones push Consulta la guía para obtener más información.

El delegado del cliente

Para que el delegado funcione, debe tener ViewController ajustarse a VGVoiceClientDelegate. Añada la extensión al final del archivo.

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
        }
    }
}

Si se encuentra un error, se mostrará connectionStatusLabel se actualiza con el estado de la conexión correspondiente.

Construir y ejecutar

Pulse Cmd + R para construir y ejecutar de nuevo:

Interface connected