SopagueDocs
v3

Controla se o aplicativo Vender pode ser usado diretamente pela sua interface no terminal. A alteração é feita por outro aplicativo instalado no mesmo POS Android.

Integração via Intent Android. Há um modo automático, sem interação, e um modo manual, no qual o operador escolhe o estado das vendas.

Escopo do bloqueio

Desabilitar vendas bloqueia somente a abertura e o uso direto da interface do Vender. Pagamentos iniciados por com.sopague.START continuam permitidos.

Contrato da Integração

Action

ParâmetroValor
Actioncom.sopague.TOGGLE_SALES
Categoriaandroid.intent.category.DEFAULT

Extras Opcionais

Resposta da Activity

ResultadoQuando ocorreExtras
RESULT_OKEstado alterado no modo manual ou automáticoSUCCESS=true e SALES_ENABLED
RESULT_CANCELEDOperador fechou ou cancelou o diálogo manualCANCELLED=true e estado atual em SALES_ENABLED

Exemplos de Integração

Kotlin com Activity Result API

private val toggleSalesLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    val data = result.data
    val salesEnabled = data?.getBooleanExtra("SALES_ENABLED", true)
 
    if (result.resultCode == Activity.RESULT_OK) {
        val success = data?.getBooleanExtra("SUCCESS", false) == true
        Log.i("VENDER", "Atualizado=$success; vendasAtivas=$salesEnabled")
    } else {
        val cancelled = data?.getBooleanExtra("CANCELLED", false) == true
        Log.i("VENDER", "Cancelado=$cancelled; vendasAtivas=$salesEnabled")
    }
}
 
fun definirVendas(ativar: Boolean) {
    val intent = Intent("com.sopague.TOGGLE_SALES").apply {
        addCategory(Intent.CATEGORY_DEFAULT)
        putExtra("enabled", ativar)
    }
    toggleSalesLauncher.launch(intent)
}

Modo Manual (com interface gráfica)

Exibe a tela de confirmação para o lojista escolher:

Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(intent, 1002);

Modo Automático — Ativar Vendas

Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("enabled", true);
startActivityForResult(intent, 1002);

Modo Automático — Desativar Vendas

Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("enabled", false);
startActivityForResult(intent, 1002);

Processando a Resposta

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
 
    if (requestCode == 1002 && resultCode == RESULT_OK && data != null) {
        boolean success = data.getBooleanExtra("SUCCESS", false);
        boolean salesEnabled = data.getBooleanExtra("SALES_ENABLED", false);
 
        if (success) {
            String status = salesEnabled ? "ativadas" : "desativadas";
            Log.d(TAG, "Vendas " + status + " com sucesso!");
        }
    } else if (requestCode == 1002 && resultCode == RESULT_CANCELED) {
        boolean cancelled = data != null
            && data.getBooleanExtra("CANCELLED", false);
        boolean salesEnabled = data == null
            || data.getBooleanExtra("SALES_ENABLED", true);
        Log.d(TAG, "Cancelada=" + cancelled + "; vendasAtivas=" + salesEnabled);
    }
}

Visibilidade de pacote no Android 11+

Se o aplicativo chamador verifica a disponibilidade com resolveActivity e usa targetSdkVersion 30 ou superior, inclua no AndroidManifest.xml:

<queries>
    <intent>
        <action android:name="com.sopague.TOGGLE_SALES" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent>
</queries>

Considerações Finais

  • O aplicativo Vender deve estar instalado no dispositivo POS
  • No modo automático, a operação é processada imediatamente sem interação do usuário
  • No modo manual, o usuário pode cancelar a operação, retornando CANCELLED como true
  • O estado fica persistido no terminal e continua válido após fechar ou reiniciar o Vender
  • Restrinja essa action a aplicativos parceiros confiáveis; ela altera o comportamento operacional do POS