É possível 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 normalmente é enviada com o Chrome 136.
Configurar a Payment Request em apps host da WebView
Para iniciar
apps de pagamento do 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 Payment Request está desativada na WebView.
Siga estas etapas para ativá-la 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
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 Payment Request no código da WebView
Essa etapa ativa o recurso Payment Request na WebView e garante que o site possa acioná-lo usando JavaScript.
Essa etapa ativa o recurso Payment Request 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 no AndroidManifest.xml
Esses filtros permitem que a 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 intents a seguir no AndroidManifest.xml para oferecer suporte aos principais recursos da Payment Request:
org.chromium.intent.action.PAY: permite que a WebView invoque apps de pagamento do Android e receba respostas de pagamento. Saiba mais em o guia do desenvolvedor 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 compatível configurada. Saiba mais no guia do desenvolvedor de apps de pagamento do 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 entrega e contato de um app de pagamento do Android.
Etapa 5: recriar e publicar o app
Depois de fazer essas mudanças, recrie o app e lance uma versão atualizada no Google Play Store.
Opcional: personalizar as verificações de prontidão
Além de iniciar apps de pagamento do 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 host da WebView podem oferecer uma alternância semelhante usando:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
Essa configuração fica ativada por padrão (true). Quando ativa, ela permite que os sites executados na WebView detectem se o usuário tem um instrumento de pagamento registrado.
Verificar o suporte da Payment Request em JavaScript
Depois que WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) for chamado em Java ou Kotlin, a interface window.PaymentRequest ficará disponível em JavaScript. Ela pode ser usada 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 estiver disponível, a página da Web poderá continuar a
iniciar uma transação de pagamento.
Integrar apps de pagamento do Android com a Payment Request
Para oferecer suporte à Payment Request, os apps de pagamento do Android precisam responder a intents específicas do sistema e processar dados de pagamento com segurança. Estes guias explicam como registrar formas de pagamento, implementar o serviço de pagamento e proteger o app:
- Guia do desenvolvedor de apps de pagamento do 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 os recursos dela.
Proteger o 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. Como a WebView é executada no processo do app host, ela não pode restringir o uso dessas intents.
Apps maliciosos podem aproveitar isso para iniciar ataques de oráculo.
Em um ataque de oráculo, um app de pagamento revela 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 estratégias a seguir para mitigar 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 confidenciais para que apenas os servidores de comerciantes confiáveis possam descriptografá-las. Sempre realize a criptografia e a descriptografia no lado do servidor.
- Restringir o 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 em o guia do desenvolvedor de apps de pagamento do Android.