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 A continuación, crea una sesión utilizando un JWT. Sustituye ALICE_JWT y BOB_JWT con los JWT que creó anteriormente.

Acciones de los botones

Para que los botones de inicio de sesión funcionen, debes añadirles acciones que ejecuten una función al pulsarlos. Actualiza el código de la vista en MainActivity.kt para instanciar un ChatViewModel objeto 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")
        }
    }
}