Swift

VGVoiceClient

Antes que você possa receber uma chamada, o Vonage Client SDK precisa se autenticar nos servidores da Vonage. São necessárias as seguintes alterações para ViewController.swift.

NOTA: Observe que você já importou VGVoiceClient no início do arquivo.

Adicione um VonageClientSDKVoice por exemplo, abaixo do connectionStatusLabel.

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

Adicione o JWT

No final de viewDidLoad, defina o delegado do cliente e crie uma sessão — certifique-se de substituir ALICE_JWT para o JWT que você criou em uma etapa 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: O enableWebsocketInvites opção na configuração do cliente e o isUsingCallKit Essa configuração não deve ser usada em ambiente de produção. Ative as notificações push para garantir que você receba chamadas mesmo quando o aplicativo estiver em segundo plano, usando CallKit. Consulte o notificações push guia para obter mais informações.

O Representante do Cliente

Para que o delegado funcione, é necessário ter ViewController estar em conformidade com VGVoiceClientDelegate. Adicione a extensão ao final do arquivo.

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

Se ocorrer um erro, ele será exibido e o connectionStatusLabel é atualizado com o status da conexão correspondente.

Compilar e executar

Imprensa Cmd + R para compilar e executar novamente:

Interface connected