Kotlin

ChatClient

Antes de que puedas iniciar un chat, el Client SDK necesita autenticarse en los servidores de Vonage. Comienza creando un nuevo archivo Kotlin ChatViewModel.kt.

Crear una nueva clase ChatViewModel:

class ChatViewModel(application: Application) : AndroidViewModel(application = application) {

    private val aliceJwt = "ALICE_JWT"
    private val bobJwt = "BOB_JWT" 

    var isLoggedIn by mutableStateOf(false)
    var isError by mutableStateOf(false)
    var error = ""

    var events : SnapshotStateList<PersistentConversationEvent> = mutableStateListOf()

    private var client = ChatClient(getApplication<Application>().applicationContext)

    fun login(username: String) {
        val jwt = if(username == "Alice") aliceJwt else bobJwt
        client.createSession(jwt) { err, sessionId ->
            when {
                err != null -> {
                    isError = true
                    error = err.localizedMessage?.toString() ?: ""
                }
                else -> {
                    isLoggedIn = true
                }
            }
        }
    }
}    

Esta clase creará una instancia de ChatClient 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. Actualice el código de la vista en MainActivity.kt para instanciar un ChatViewModel y llamar a su login función:

class MainActivity : ComponentActivity() {
    private val chatState by viewModels<ChatViewModel>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            CompositionLocalProvider(LocalChatState provides chatState) {
                LoginScreen()
            }
        }
    }
}

val LocalChatState = compositionLocalOf<ChatViewModel> { error("Login State Context Not Found!") }

@Composable
fun LoginScreen() {
    val vm = LocalChatState.current
    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(onClick = { vm.login("Alice") }) {
            Text("Login as Alice")
        }
        Button(onClick = { vm.login("Bob") }) {
            Text("Login as Bob")
        }
    }
}