Ativação

Ativação

É 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.

Dados da aplicação

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.

Ativação pelo dashboard

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.

Exemplo
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.

Cancelando

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.

Exemplo
var activationRequest: Request? = null

fun activate() {
    activationRequest = ZoopFoundationPlugin.createDashboardActivationRequestBuilder()
        // ...
        .build()

    Zoop.post(activationRequest)
}

fun cancelActivation() {
    activationRequest?.cancel()
}