Identificar o usuário logado
Sem identificação, cada aparelho é um visitante anônimo: o histórico fica só naquele aparelho. Com o usuário identificado, ele vê as conversas em qualquer aparelho (e no site), e o atendente sabe com quem está falando.
É o mesmo mecanismo do webchat no site: o seu backend assina um JWT dizendo quem é o usuário, e o app entrega esse token à Atalia.
login no app → seu backend assina o JWT → app chama identify(jwt) → a Atalia confere a assinatura
O JWT é assinado no seu backend com o segredo do canal. Um segredo dentro do app pode ser extraído, e com ele qualquer pessoa se passa por qualquer usuário.
1. Gerar o JWT no seu backend
O segredo, as regras do token (sub, exp de no máximo 1 hora, name, email) e exemplos em Node e PHP estão em Identificação de usuários no Webchat. O app só recebe o token pronto, numa rota sua que exige login.
Duas regras pesam mais no app:
- Gere um token novo a cada identificação. Ele vale no máximo 1 hora, e um token com
jtijá usado é recusado (REPLAYED). - Ao abrir o app já logado, confira
isIdentified. O SDK guarda a sessão identificada entre aberturas do app, então normalmente não há o que fazer. Se estiver falso (a sessão identificada expira depois de 30 dias sem uso), identifique de novo.
2. Identificar depois do login
- Android
- iOS
lifecycleScope.launch {
try {
val contact = Atalia.identify(jwtDoSeuBackend)
// contact.externalId, contact.contactId, contact.name
} catch (error: AtaliaException) {
Log.w("Atalia", "identify falhou: ${error.code}")
}
}
De Java, use a versão com callback, que responde na thread principal:
Atalia.identify(jwtDoSeuBackend, new AtaliaCallback<AtaliaContact>() {
@Override public void onSuccess(AtaliaContact contact) { }
@Override public void onError(AtaliaException error) { }
});
do {
let contact = try await Atalia.identify(jwt: jwtDoSeuBackend)
// contact.externalId, contact.contactId, contact.name
} catch let error as AtaliaError {
print("identify falhou: \(error.code)")
}
Funciona com o chat aberto ou fechado. Com o chat na tela, a conversa recarrega já com o histórico do usuário.
3. Sair no logout do app
- Android
- iOS
lifecycleScope.launch { Atalia.logout() }
await Atalia.logout()
O logout encerra a sessão identificada na Atalia e o aparelho volta a ser um visitante anônimo, sem o histórico de quem saiu. Quem usar o app depois no mesmo aparelho não vê as conversas do usuário anterior e não recebe as notificações dele.
Códigos de erro
O identify falha com o mesmo código que a Atalia devolve, em AtaliaException.code (Android) ou AtaliaError.code (iOS).
| Código | O que aconteceu |
|---|---|
NO_SECRET_CONFIGURED | O canal não tem segredo de identificação. Gere no painel: Editar canal › Instalação › Identificação de usuários. |
INVALID_SIGNATURE | O token foi assinado com outro segredo (ou o segredo foi regenerado). |
EXPIRED | O token passou do exp. Confira o relógio do servidor que assina. |
INVALID_TOKEN | Token malformado, sem sub ou exp, com validade acima de 1 hora, ou vazio. |
REPLAYED | Um token com o mesmo jti já foi usado. Gere um novo a cada chamada. |
TIMEOUT | Com o chat aberto, ele não respondeu em 20 segundos (sem conexão, por exemplo). |
NOT_CONFIGURED | O configure ainda não foi chamado. |
Falha de rede chega como o erro da própria plataforma (IOException no Android, URLError no iOS). Na versão com callback do Android, ela vira AtaliaException com a mensagem do erro, ou NETWORK_ERROR.