Você pode usar a API Payment Request para iniciar apps de pagamento Android em sites executados em uma WebView. Isso funciona usando a mesma API JavaScript já disponível no Chrome.
Esse recurso está disponível a partir da versão 136 da WebView, que normalmente é enviada com o Chrome 136.
Configurar a solicitação de pagamento em apps host da WebView
Para iniciar apps de pagamento Android na WebView, a API Payment Request consulta o sistema usando intents do Android. Para oferecer suporte a isso, o app host da WebView precisa declarar essas intents no arquivo AndroidManifest.xml
.
Por padrão, a solicitação de pagamento fica desativada na WebView.
Siga estas etapas para ativar o recurso usando WebSettingsCompat
do AndroidX WebKit versão 1.14.0
ou mais recente:
Etapa 1: adicionar a dependência do AndroidX WebKit
Kotlin (build.gradle.kts)
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
}
Groovy (build.gradle)
dependencies {
implementation 'androidx.webkit:webkit:1.14.0'
}
Catálogo de versões
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
Etapa 2: importar as classes necessárias
Essas classes permitem acessar e configurar as configurações da WebView e verificar o suporte a recursos no momento da execução.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
Etapa 3: ativar a solicitação de pagamento no código da WebView
Esta etapa ativa o recurso de solicitação de pagamento na WebView e garante que o site possa acionar esse recurso usando JavaScript.
Essa etapa ativa o recurso de solicitação de pagamento na WebView e garante que o site possa acionar esse recurso usando JavaScript.
Kotlin (Compose)
AndroidView(
factory = {
WebView(it).apply {
settings.javaScriptEnabled = true
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(settings, true);
}
}
},
update = {it.loadUrl(url)
}
)
Java
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavascriptEnabled(true);
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(webSettings, true);
}
Etapa 4: adicionar filtros de intent em AndroidManifest.xml
Esses filtros permitem que o WebView descubra e invoque apps de pagamento Android usando intents do sistema:
<queries>
<intent>
<action android:name="org.chromium.intent.action.PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.IS_READY_TO_PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
</intent>
</queries>
Use as seguintes intents no AndroidManifest.xml
para oferecer suporte aos principais recursos de solicitações de pagamento:
org.chromium.intent.action.PAY
: permite que a WebView invoque apps de pagamento do Android e receba respostas de pagamento. Saiba mais no guia para desenvolvedores de apps de pagamento Android.org.chromium.intent.action.IS_READY_TO_PAY
: permite que os sites verifiquem se o usuário tem uma forma de pagamento compatível configurada. Saiba mais no guia para desenvolvedores de apps de pagamento Android .org.chromium.intent.action.UPDATE_PAYMENT_DETAILS
: oferece suporte a atualizações dinâmicas, como quando o usuário muda o endereço de entrega ou a opção no app de pagamento. Saiba mais em Como fornecer informações de envio e contato em um app de pagamento Android.
Etapa 5: recriar e publicar o app
Depois de fazer essas mudanças, crie uma nova versão do app e lance-a na Play Store.
Opcional: personalizar as verificações de prontidão
Além de iniciar apps de pagamento para Android, a API Payment Request permite que os sites verifiquem se o usuário está pronto para pagar. Por exemplo, os sites podem detectar se o usuário tem uma forma de pagamento compatível configurada.
O Chrome inclui uma configuração que permite aos usuários ativar ou desativar essa verificação. Os apps de host da WebView podem oferecer uma alternância semelhante usando:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
Essa configuração é ativada por padrão (true
). Quando ativa, ela permite que os sites em execução na WebView detectem se o usuário tem um instrumento de pagamento registrado.
Verificar a compatibilidade com a solicitação de pagamento em JavaScript
Depois que WebSettingsCompat.setPaymentRequestEnabled(webSettings, true)
for chamado em Java ou Kotlin, a interface window.PaymentRequest
vai ficar disponível no JavaScript. Isso pode ser usado para detectar recursos na página da Web:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Quando window.PaymentRequest
estiver disponível, a página da Web poderá continuar iniciando uma transação de pagamento.
Integrar apps de pagamento Android com a solicitação de pagamento
Para oferecer suporte à solicitação de pagamento, os apps de pagamento Android precisam responder a intents e processar dados de pagamento de forma segura. Estes guias explicam como registrar formas de pagamento, implementar seu serviço de pagamento e proteger seu app:
- Guia para desenvolvedores de apps de pagamento Android: crie e configure seu app de pagamento, incluindo como processar intents e verificar o app de chamada.
- Configurar uma forma de pagamento: registre sua forma de pagamento e defina as capacidades dela.
Proteger seu app contra uso indevido
Qualquer app pode chamar as intents de pagamento do Android org.chromium.intent.action.PAY
, IS_READY_TO_PAY
e UPDATE_PAYMENT_DETAILS
. Os apps de host da WebView também podem observar, iniciar e interceptar chamadas de solicitação de pagamento. Como o WebView é executado dentro do processo do app host, ele não pode restringir como essas intents são usadas. Apps maliciosos podem explorar isso para lançar ataques de oráculo.
Em um ataque Oracle, um app de pagamento revela acidentalmente informações que não deveria. Por exemplo, um invasor pode usar IS_READY_TO_PAY
para descobrir quais instrumentos de pagamento o usuário tem disponíveis.
É necessário criar proteções no app de pagamento para se defender contra esse tipo de uso indevido.
Use as seguintes estratégias para reduzir o abuso:
- Limitar solicitações: limite a frequência com que o app responde a
IS_READY_TO_PAY
. Por exemplo, responda apenas uma vez a cada 30 minutos. - Usar criptografia: criptografe respostas sensíveis para que apenas seus servidores de comerciante confiáveis possam descriptografá-las. Sempre realize a criptografia e a descriptografia do lado do servidor.
- Restringir acesso: mantenha uma lista de permissões de apps host da WebView confiáveis usando os nomes de pacote e os certificados de assinatura SHA256. Saiba mais no guia para desenvolvedores de apps de pagamento Android.