Configuração
Pré-requisitos
- Terminal POS com o serviço BTG Pay (
com.btg.pay.service) instalado - Android Studio com suporte a
minSdk 30(Android 11) compileSdk 35ou superior nobuild.gradledo app- Java 17 configurado no projeto (
sourceCompatibilityetargetCompatibility)
Adicionar o AAR ao projeto
O arquivo btg-pay-client.aar deve ser colocado no diretório libs/ do módulo do app. Se o diretório não existir, ele deve ser criado manualmente.
app/
├── libs/
│ └── btg-pay-client.aar
├── src/
└── build.gradle.kts
Em seguida, declarar as dependências no build.gradle.kts:
// build.gradle.kts do módulo app
dependencies {
implementation(files("libs/btg-pay-client.aar"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
}
A dependência de kotlinx-coroutines-android é necessária porque as operações assíncronas do SDK — como impressão e consulta de status — utilizam coroutines.
Após essa configuração, sincronizar o projeto no Android Studio. O BtgPayClient e as demais interfaces do SDK estarão disponíveis para importação.
Conectar ao serviço
Toda operação do SDK exige uma conexão ativa com o serviço BTG Pay. A conexão é estabelecida chamando connect com um ConnectionListener.
import btgpay.client.BtgPayClient
class MinhaActivity : AppCompatActivity() {
private val client by lazy { BtgPayClient(applicationContext) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
client.connect(object : BtgPayClient.ConnectionListener {
override fun onConnected() {
// Client pronto para uso.
}
override fun onDisconnected() {
Log.w(TAG, "Serviço desconectado — aguardando reconexão automática")
}
override fun onBindFailed() {
Log.e(TAG, "Serviço BTG Pay não está instalado no terminal")
}
override fun onInitFailed(reason: String) {
Log.e(TAG, "Falha na inicialização: $reason")
}
})
}
override fun onDestroy() {
client.disconnect()
super.onDestroy()
}
}
A desconexão é feita com disconnect(), que cancela qualquer operação em andamento antes de desvincular o serviço.
Quando o processo do serviço morre, o Android mantém o binding e tenta reconectar automaticamente — o onConnected será chamado novamente quando o serviço voltar. Se connect for chamado com o client já conectado, o onConnected é invocado imediatamente. Se chamado durante uma conexão em andamento, o novo listener substitui o anterior e a conexão é reaproveitada.
Próximos passos
Com a conexão ativa, o terminal está pronto para operar. O próximo passo depende do cenário:
- Se o terminal ainda não foi ativado: Comissionamento
- Para imprimir texto, imagem ou QR code: Impressão
- Para customizar o comprovante de venda: Template de Comprovante