Swift

VGChatClient

Antes de que puedas iniciar un chat, el Client SDK necesita autenticarse en los servidores de Vonage. Las siguientes adiciones son necesarias para ContentView.swift.

En la parte superior del archivo, importe VonageClientSDKChat:

import SwiftUI
import VonageClientSDKChat

Crea una nueva clase al final del archivo llamada LoginViewModel:

@MainActor
final class LoginViewModel: ObservableObject {
    @Published var error = ""
    @Published var isError = false
    @Published var isLoggedIn = false
    
    private let aliceJwt = "ALICE_JWT"
    private let bobJwt = "BOB_JWT"
    
    let client = VGChatClient()
    
    func login(_ username: String) async {
        do {
            let jwt = username == "Alice" ? aliceJwt : bobJwt
            try await client.createSession(jwt)
            isLoggedIn = true
        } catch {
            self.error = error.localizedDescription
            self.isError = true
        }
    }
}

Esta clase creará una instancia de VGChatClient y luego crear una sesión utilizando un JWT. Sustituir ALICE_JWT y BOB_JWT con los JWT que creó anteriormente.

Botón Acciones

Para que los botones de inicio de sesión funcionen, tienes que añadirles acciones que ejecuten una función cuando se pulsen. Actualiza el código de la vista para instanciar un LoginViewModel y llamar a su login función:

struct ContentView: View {
    @StateObject private var loginModel = LoginViewModel()
    
    var body: some View {
        NavigationStack {
            VStack {
                Button("Login as Alice") {
                    Task {
                        await loginModel.login("Alice")
                    }
                }.buttonStyle(.bordered)
                Button("Login as Bob") {
                    Task {
                        await loginModel.login("Bob")
                    }
                }.buttonStyle(.bordered)
            }
            .padding()
            .navigationDestination(isPresented: $loginModel.isLoggedIn) {
                let chatViewModel = ChatViewModel(client: loginModel.client)
                ChatView(chatViewModel: chatViewModel)
            }
        }.alert(isPresented: $loginModel.isError) {
            Alert(title: Text(loginModel.error))
        }
    }
}

Si se produce un error al crear una sesión, se mostrará un mensaje Alert aparecerá el mensaje de error. También hay un navigationDestination que abrirá la pantalla de chat si la sesión se ha creado correctamente. Lo construirás en el siguiente paso.