É necessário inicializar o SDK sem passar as credenciais, a fim de realizar a requisição para recuperar as credenciais.
import com.zoop.pos.application
Zoop.initialize(context) {
application { // Exceto em dispositivos Android.
id = "{your-app-package-or-name}"
version = "X.Y.Z"
}
}
A extensão application {} está disponível apenas para a plataforma JVM.
id: pacote ou nome da sua aplicação.version: número de versão da sua aplicação no formato X.Y.Z.
Neste momento, é necessário injetar o plugin para desktop, conforme abaixo:
Zoop.plug(DesktopPlugin(Zoop.constructorParameters()))
Com o SDK inicializado, é necessário fazer uma ativação pelo seu dashboard para recuperar as credenciais*, utilizando um token gerado com a requisição de ativação, conforme exemplo a seguir.
Cada dispositivo só precisa fazer essa ativação uma única vez a fim de criar o dispositivo na nossa base de dados, associando o dispositivo ao estabelecimento, após isso, é possível inicializar o plugin diretamente com as credenciais recebidas.
val activationRequest = ZoopFoundationPlugin.createDashboardActivationRequestBuilder()
.tokenCallback(object: Callback<DashboardTokenResponse>() {
override fun onSuccess(response: DashboardTokenResponse) {
// "Apresentar token ao usuário: ${response.token}"
displayActivationToken(response.token)
}
override fun onFail(error: Throwable) {
// "Falha ao requisitar token"
displayTokenGenerationError()
}
}
.confirmCallback(object: Callback<DashboardConfirmationResponse>() {
override fun onSuccess(response: DashboardConfirmationResponse) {
/**
* Nesse ponto, é necessário guardar as credenciais localmente em um banco de dados/shared preferences,
* para usar na próxima inicialização, passando como parâmetro na ativação
*/
saveCredentials(response)
displayTokenActiveMessage()
}
override fun onFail(error: Throwable) {
/**
* Caso o login seja cancelado, receberá a resposta aqui, com mensagem "request canceled"
*/
// "Apresentar erro na confirmação do token: ${error.message}"
when (error) {
is ZoopTimeoutException -> displayTokenExpiredMessage()
else -> displayGenericTokenActivationMessageError()
}
}
})
.themeCallback(object: Callback<DashboardThemeResponse>() {
override fun onSuccess(response: DashboardThemeResponse) {
/**
* Aqui você recebe o esquema de cores configurado para o seller no dashboard,
* e também sinaliza o sucesso no fluxo de ativação do terminal.
*/
applyBackgroundTheme(response)
}
override fun onFail(error: Throwable) {
warnDownloadBackgroundThemeError()
}
})
.build()
Zoop.post(activationRequest)
O método Zoop.post() processa uma requisição ao SDK de forma assíncrona (paralela à chamada). Caso você precise que a requisição seja processada de forma síncrona (sequencial à chamada), use o método Zoop.enqueue().
*Observação: Você pode armazenar as credenciais localmente com a resposta do confirmCallback. Fazendo isso, é possível informá-las na próxima inicialização sem precisar passar pela ativação via dashboard.
O cancelamento da operação pode ser comandado chamando o método cancel() a partir do objeto da requisição que se deseja cancelar (o mesmo que foi passado ao método Zoop.post() ou Zoop.enqueue()).
O cancelamento é assíncrono e cooperativo. Isto é, o método cancel() sinaliza a intenção de cancelamento para o SDK e retorna imediatamente, sem aguardar pela conclusão do cancelamento. Por sua vez, o SDK interromperá e cancelará a operação na primeira oportunidade possível.
var activationRequest: Request? = null
fun activate() {
activationRequest = ZoopFoundationPlugin.createDashboardActivationRequestBuilder()
// ...
.build()
Zoop.post(activationRequest)
}
fun cancelActivation() {
activationRequest?.cancel()
}