Supportare le app di pagamento Android in WebView utilizzando l'API Payment Request

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:

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:

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 aIS_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.