Kotlin

ChatClient

Antes de iniciar um bate-papo, o Vonage Client SDK precisa se autenticar nos servidores da Vonage. Comece criando um novo arquivo em Kotlin ChatViewModel.kt.

Criar uma nova classe 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 classe criará uma instância de ChatClient em seguida, crie uma sessão usando um JWT. Substitua ALICE_JWT e BOB_JWT com os JWTs que você criou anteriormente.

Ações dos botões

Para que os botões de login funcionem, é preciso adicionar ações a eles que executem uma função quando forem tocados. Atualize o código da visualização em MainActivity.kt para instanciar um ChatViewModel objeto e chamar seu login função:

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