Puoi utilizzare l' API Payment Request per avviare app di pagamento Android da siti web in esecuzione all'interno di una WebView. Questa funziona utilizzando la stessa API JavaScript già disponibile in Chrome.
Questa funzionalità è disponibile a partire dalla versione 136 di WebView, che in genere viene fornita con Chrome 136.
Configurare la richiesta di pagamento nelle app host WebView
Per avviare
app di pagamento per Android
da WebView, l'API Payment Request esegue query sul sistema utilizzando gli intent Android.
Per supportare questa funzionalità, l'app host WebView deve dichiarare questi intent nel file
AndroidManifest.xml.
Per impostazione predefinita, la richiesta di pagamento è disattivata in WebView.
Segui questi passaggi per attivarlo utilizzando WebSettingsCompat da Jetpack Webkit
versione 1.14.0 o successive:
Passaggio 1: aggiungi la dipendenza 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'
}
Catalogo delle versioni
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
Passaggio 2: importa le classi richieste
Queste classi ti consentono di accedere e configurare le impostazioni di WebView e verificare il supporto delle funzionalità in fase di runtime.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
Passaggio 3: attiva la richiesta di pagamento nel codice WebView
Questo passaggio attiva la funzionalità Richiesta di pagamento in WebView e garantisce che il sito possa attivarla utilizzando JavaScript.
Questo passaggio attiva la funzionalità Richiesta di pagamento in WebView e garantisce che il sito possa attivarla utilizzando 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);
}
Passaggio 4: aggiungi filtri per intent in AndroidManifest.xml
Questi filtri consentono a WebView di rilevare e richiamare le app di pagamento Android utilizzando gli intent di 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>
Utilizza i seguenti intent nel tuo AndroidManifest.xml per supportare le funzionalità chiave di richiesta di pagamento:
org.chromium.intent.action.PAY: consente a WebView di richiamare le app di pagamento Android e ricevere risposte di pagamento. Scopri di più nella Guida per gli sviluppatori di app di pagamento per Android.org.chromium.intent.action.IS_READY_TO_PAY: Consente ai siti web di controllare se l'utente ha configurato un metodo di pagamento supportato. Scopri di più nella guida per gli sviluppatori di app di pagamento per Androidorg.chromium.intent.action.UPDATE_PAYMENT_DETAILS: supporta gli aggiornamenti dinamici, ad esempio quando l'utente modifica l'indirizzo o l'opzione di spedizione nell'app di pagamento. Scopri di più in Fornire i dati di spedizione e di contatto da un'app di pagamento per Android.
Passaggio 5: ricompila e pubblica l'app
Dopo aver apportato queste modifiche, ricompila l'app e rilascia una versione aggiornata sul Play Store.
(Facoltativo) Personalizza i controlli di idoneità
Oltre ad avviare app di pagamento per Android, l'API Payment Request consente ai siti web di verificare se l'utente è pronto a pagare. Ad esempio, i siti web possono rilevare se l'utente ha configurato un metodo di pagamento supportato.
Chrome include un'impostazione che consente agli utenti di attivare o disattivare questo controllo. Le app host WebView possono offrire un pulsante di attivazione/disattivazione simile utilizzando:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
Questa impostazione è attiva per impostazione predefinita (true). Quando è attiva, consente ai siti web
in esecuzione in WebView di rilevare se l'utente ha uno strumento di pagamento registrato.
Verificare il supporto della richiesta di pagamento in JavaScript
Dopo che WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) è stato
chiamato in Java o Kotlin, l'interfaccia window.PaymentRequest diventa
disponibile in JavaScript. Può essere utilizzato per il rilevamento delle funzionalità sulla pagina web:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Quando window.PaymentRequest è disponibile, la pagina web può continuare a
avviare una transazione di pagamento.
Integrare le app di pagamento per Android con Richiesta di pagamento
Per supportare la richiesta di pagamento, le app di pagamento per Android devono rispondere a intent di sistema specifici e gestire i dati di pagamento in modo sicuro. Queste guide spiegano come registrare i metodi di pagamento, implementare il servizio di pagamento e proteggere l'app:
- Guida per gli sviluppatori di app di pagamento per Android: Crea e configura la tua app di pagamento, incluso come gestire gli intent e verificare l'app chiamante.
- Configura un metodo di pagamento: Registra il tuo metodo di pagamento e definisci le sue funzionalità.
Proteggere la tua app da un utilizzo improprio
Qualsiasi app può chiamare gli intent di pagamento Android org.chromium.intent.action.PAY,
IS_READY_TO_PAY e UPDATE_PAYMENT_DETAILS. Le app host WebView possono anche
osservare, avviare e intercettare le chiamate Payment Request. Poiché WebView viene eseguito
all'interno del processo dell'app host, non può limitare la modalità di utilizzo di questi intent.
Le app dannose possono sfruttare questa vulnerabilità per lanciare attacchi Oracle.
In un attacco oracle, un'app di pagamento rivela involontariamente informazioni che
non dovrebbe. Ad esempio, un malintenzionato potrebbe utilizzare IS_READY_TO_PAY per scoprire quali strumenti di pagamento sono disponibili per l'utente.
Devi integrare protezioni nella tua app di pagamento per difenderti da questo tipo di uso improprio.
Utilizza le seguenti strategie per mitigare gli abusi:
- Richieste di limitazione: limita la frequenza con cui la tua app risponde a
IS_READY_TO_PAY. Ad esempio, rispondi solo una volta ogni 30 minuti. - Utilizza la crittografia: cripta le risposte sensibili in modo che solo i tuoi server commerciante attendibili possano decriptarle. Esegui sempre la crittografia e la decrittografia sul lato server.
- Limitare l'accesso: gestisci una lista consentita di app host WebView attendibili utilizzando i nomi dei pacchetti e i certificati di firma SHA256. Scopri di più nella Guida per gli sviluppatori di app di pagamento per Android.