Puoi utilizzare l' API Payment Request per avviare app di pagamento Android da siti web in esecuzione in un WebView. Questa funzionalità 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 Android
da WebView, l'API Payment Request esegue query sul sistema utilizzando le intent di Android.
Per supportare questa funzionalità, l'app host WebView deve dichiarare questi intent nel suo
AndroidManifest.xml
file.
Per impostazione predefinita, la richiesta di pagamento è disattivata in WebView.
Per attivarlo, utilizza WebSettingsCompat
dalla versione 1.14.0
o successiva di AndroidX WebKit:
Passaggio 1: aggiungi la dipendenza 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'
}
Catalogo delle versioni
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
Passaggio 2: importa i moduli obbligatori
Queste classi ti consentono di accedere e configurare le impostazioni di WebView e di verificare il supporto delle funzionalità in fase di esecuzione.
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 i filtri 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 le seguenti intenzioni in AndroidManifest.xml
per supportare le funzionalità principali di PaymentRequest:
org.chromium.intent.action.PAY
: consente a WebView di invocare le app di pagamento Android e di ricevere le relative risposte. 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 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ù nella sezione Fornire dati di contatto e spedizione da un'app di pagamento per Android.
Passaggio 5: ricostruisci e pubblica l'app
Dopo aver apportato queste modifiche, ricostruisci l'app e rilascia una versione aggiornata sul Play Store.
(Facoltativo) Personalizza i controlli di idoneità
Oltre a lanciare 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 eseguiti in WebView di rilevare se l'utente ha uno strumento di pagamento registrato.
Verificare il supporto di 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. Questo può essere utilizzato per il rilevamento di elementi 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 la 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 la tua app:
- Guida per gli sviluppatori di app di pagamento per Android: crea e configura la tua app di pagamento, inclusa la gestione degli intent e la verifica dell'app chiamante.
- Configura un metodo di pagamento: registra il metodo di pagamento e definisci le relative funzionalità.
Proteggere la tua app da usi impropri
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 di Richiesta di pagamento. Poiché WebView viene eseguito all'interno del processo dell'app host, non può limitare il modo in cui vengono utilizzati questi intent.
Le app dannose possono sfruttare questa vulnerabilità per lanciare attacchi oracolo.
In un attacco oracolo, 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 nella tua app di pagamento delle protezioni per difenderti da questo tipo di uso improprio.
Utilizza le seguenti strategie per mitigare gli abusi:
- Rallenta le richieste: 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 server dei tuoi commercianti attendibili possano decriptarle. Esegui sempre la crittografia e la decrittografia sul lato server.
- Limita l'accesso: mantieni una lista consentita di app host WebView attendibili utilizzando i relativi nomi pacchetti e certificati di firma SHA256. Scopri di più nella guida per gli sviluppatori di app di pagamento Android.