Você pode usar a API Payment Request para iniciar apps de pagamento do 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 geralmente é lançada com o Chrome 136.
Configurar a Solicitação de pagamento em apps host do WebView
Para iniciar apps de pagamento do Android do WebView, a API Payment Request consulta o sistema usando intents do Android.
Para 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 usando WebSettingsCompat da versão 1.14.0 ou mais recente do Jetpack Webkit:
Etapa 1: adicionar a dependência do Jetpack 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
Com essas classes, é possível acessar e configurar as configurações do WebView e verificar o suporte a recursos durante a execução.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
Etapa 3: ativar a API Payment Request no código do WebView
Esta etapa ativa o recurso Payment Request na WebView e garante que o site possa acioná-lo usando JavaScript.
Esta etapa ativa o recurso Solicitação de pagamento na WebView e garante que o site possa acioná-lo 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 do 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 seu AndroidManifest.xml para oferecer suporte aos principais recursos da
PaymentRequest:
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 do Android.org.chromium.intent.action.IS_READY_TO_PAY: permite que os sites verifiquem se o usuário tem uma forma de pagamento aceita 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 ou a opção de entrega no app de pagamento. Saiba mais em Fornecer informações de entrega e contato de um app de pagamento Android.
Etapa 5: recriar e publicar o app
Depois de fazer essas mudanças, recrie o app e lance uma versão atualizada na Play Store.
Opcional: personalizar verificações de prontidão
Além de iniciar apps de pagamento do Android, a API Payment Request permite que 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 aceita configurada.
O Chrome inclui uma configuração que permite aos usuários ativar ou desativar essa verificação. Os apps host da WebView podem oferecer uma alternância semelhante usando:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
Essa configuração está ativada por padrão (true). Quando ativa, ela permite que sites
executados na WebView detectem se o usuário tem um instrumento de pagamento registrado.
Verificar o suporte à solicitação de pagamento em JavaScript
Depois que WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) é chamado em Java ou Kotlin, a interface window.PaymentRequest fica disponível em JavaScript. Isso pode ser usado para detecção de recursos na página da Web:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Quando window.PaymentRequest está disponível, a página da Web pode continuar a
iniciar uma transação de pagamento.
Integrar apps de pagamento do Android com a solicitação de pagamento
Para oferecer suporte à Solicitação de pagamento, os apps de pagamento para Android precisam responder a intents específicos do sistema e processar dados de pagamento com segurança. 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.
- Configure uma forma de pagamento: Registre sua forma de pagamento e defina as funcionalidades dela.
Proteja 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 host da WebView também podem
observar, iniciar e interceptar chamadas da Payment Request API. Como o WebView é executado
no 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 de oráculo, um app de pagamento revela sem querer informações que não deveria. Por exemplo, um invasor pode usar o IS_READY_TO_PAY para descobrir
quais instrumentos de pagamento o usuário tem disponíveis.
É preciso criar proteções no app de pagamentos 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. - Use criptografia: criptografe respostas sensíveis para que apenas seus servidores comerciantes confiáveis possam descriptografá-las. Sempre faça a criptografia e a descriptografia no lado do servidor.
- Restringir o acesso: mantenha uma lista de permissões de apps host do WebView confiáveis usando os nomes de pacotes e os certificados de assinatura SHA256. Saiba mais no guia para desenvolvedores de apps de pagamento Android.