Inicialização do Terminal
Com o merchantId em mãos, inicialize o terminal. Isso carrega as tabelas EMV e as configurações do adquirente. O resultado do carregamento de tabelas chega também por onTablesLoaded(ok).
import com.tupifintech.apossdk.sdk.api.model.TerminalInitializationRequest
val initResponse = posPinpad.terminalInitialization(
request = TerminalInitializationRequest(merchantId = merchantId)
)
// Dados do estabelecimento (header, recibo, senha de acesso)
val merchant = initResponse.merchant
Para verificar o estado depois:
val ready = posPinpad.isTerminalInitialized()
val tables = posPinpad.getTablesInfo() // versões das tabelas EMV por adquirente
Coordenadas do Teclado PIN
Importante: as coordenadas do teclado PIN não são configuradas antecipadamente. O SDK as solicita de forma reativa, durante o pagamento, pelo callback
onStartGetPinCoordinates. O app deve medir as posições dos botões na tela e devolvê-las pela função recebida.
override fun onStartGetPinCoordinates(setPinCoordinates: (List<String>) -> Unit) {
// Exiba a tela de PIN, meça os botões e chame setPinCoordinates(coords)
showPinScreen(onCoordinatesReady = { coords -> setPinCoordinates(coords) })
}
Formato e ordem da lista
Cada item é uma string "left,top,right,bottom" em pixels (posição na janela). A ordem esperada é:
| Índice | Tecla |
|---|---|
| 0–8 | Números 1 a 9 |
| 9 | Número 0 |
| 10 | CANCELAR |
| 11 | OK / Confirma |
| 12 | Backspace |
No Compose, as coordenadas podem ser obtidas com onGloballyPositioned + positionInWindow(). Veja o exemplo completo em Exemplos.
Informações do Dispositivo
val info = posPinpad.getDeviceInfo()
Log.d("YBY", "Modelo: ${info.hardwareModel}")
Log.d("YBY", "Serial: ${info.serialNo}")
Log.d("YBY", "Firmware: ${info.firmwareVersion}")
Health Check
val health = posPinpad.checkInternetConnection()
if (!health.isConnected) {
showError(health.errorMessage ?: "Sem conexão")
}
Boas Práticas
Tratamento de erros
Implemente os callbacks de erro (onAppError, onNetworkConnectionError, onUnauthorizedError, onSessionExpired, etc.). Veja Callbacks.
override fun onAppError(error: SdkErrorCode, message: String) {
Log.e("YBY", "Erro ${error.name} (${error.code}): $message")
showErrorDialog(message)
}
override fun onNetworkConnectionError() {
showErrorDialog("Sem conexão com a internet")
}
Dados sensíveis
Nunca registre em log dados de pagamento (PAN, PIN, track) nem a accessPassword do merchant.