Ondersteun Android-betalingsapps in WebView met behulp van de Payment Request API

Je kunt de Payment Request API gebruiken om Android-betaalapps te starten vanuit websites die in een WebView worden weergegeven. Dit werkt met dezelfde JavaScript API die al beschikbaar is in Chrome.

Deze functie is beschikbaar vanaf WebView versie 136, die doorgaans wordt meegeleverd met Chrome 136.

Stel een betalingsverzoek in in WebView-hostapps.

Om Android-betaalapps vanuit WebView te starten, gebruikt de Payment Request API Android-intents om het systeem te bevragen. Om dit te ondersteunen, moet de host-app van de WebView deze intents in het AndroidManifest.xml bestand declareren.

Standaard is de betalingsaanvraag uitgeschakeld in WebView.

Volg deze stappen om het in te schakelen met WebSettingsCompat vanuit Jetpack Webkit versie 1.14.0 of hoger:

Stap 1: Voeg de Jetpack Webkit-afhankelijkheid toe.

Kotlin (build.gradle.kts)

dependencies {
  implementation("androidx.webkit:webkit:1.14.0")
}

Groovy (build.gradle)

dependencies {
  implementation 'androidx.webkit:webkit:1.14.0'
}

Versiecatalogus

[versions]
webkit = "1.14.0"

[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }

Stap 2: Importeer de benodigde klassen

Met deze klassen kunt u de WebView-instellingen openen en configureren en controleren of functies tijdens de uitvoering worden ondersteund.

import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;

Stap 3: Schakel betalingsverzoeken in de WebView-code in

Deze stap activeert de functie 'Betalingsverzoek' in uw WebView en zorgt ervoor dat de site deze via JavaScript kan uitvoeren.

Deze stap activeert de functie 'Betalingsverzoek' in uw WebView en zorgt ervoor dat de site deze via JavaScript kan uitvoeren.

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);
}

Stap 4: Voeg intentfilters toe in AndroidManifest.xml

Met deze filters kan WebView Android-betaalapps ontdekken en aanroepen via systeemintenties:

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

Gebruik de volgende intents in uw AndroidManifest.xml om belangrijke functies van Payment Request te ondersteunen:

Stap 5: Herbouw en publiceer je app

Nadat je deze wijzigingen hebt aangebracht, compileer je de app opnieuw en publiceer je een bijgewerkte versie in de Play Store.

Optioneel: Pas de gereedheidscontroles aan.

Naast het lanceren van Android-betaalapps, stelt de Payment Request API websites in staat om te controleren of de gebruiker klaar is om te betalen. Websites kunnen bijvoorbeeld detecteren of de gebruiker een ondersteunde betaalmethode heeft ingesteld.

Chrome biedt een instelling waarmee gebruikers deze controle kunnen in- of uitschakelen. WebView-hostapplicaties kunnen een vergelijkbare schakelaar aanbieden met behulp van:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

Deze instelling is standaard ingeschakeld ( true ). Wanneer deze actief is, kunnen websites die in WebView draaien detecteren of de gebruiker een geregistreerd betaalmiddel heeft.

Controleer of betalingsverzoeken worden ondersteund in JavaScript.

Nadat WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) in Java of Kotlin is aangeroepen, wordt de window.PaymentRequest -interface beschikbaar in JavaScript. Deze kan worden gebruikt voor het detecteren van specifieke kenmerken op de webpagina.

if (window.PaymentRequest) {
  // Payment Request is available.
} else {
  // Payment Request is not available.
}

Wanneer window.PaymentRequest beschikbaar is, kan de webpagina doorgaan met het initiëren van een betalingstransactie .

Integreer Android-betaalapps met Payment Request.

Om betalingsverzoeken te ondersteunen, moeten Android-betaalapps reageren op specifieke systeemintenties en betaalgegevens veilig verwerken. Deze handleidingen leggen uit hoe u betaalmethoden registreert, uw betaalservice implementeert en uw app beveiligt:

Beveilig uw app tegen misbruik.

Elke app kan de Android-betaalintents org.chromium.intent.action.PAY , IS_READY_TO_PAY en UPDATE_PAYMENT_DETAILS aanroepen. WebView-hostapps kunnen ook Payment Request-aanroepen observeren, initiëren en onderscheppen. Omdat WebView binnen het proces van de hostapp draait, kan het niet beperken hoe deze intents worden gebruikt. Kwaadwillende apps kunnen dit misbruiken om oracle-aanvallen uit te voeren.

Bij een oracle-aanval onthult een betaalapp onbedoeld informatie die niet openbaar gemaakt zou mogen worden. Een aanvaller kan bijvoorbeeld IS_READY_TO_PAY gebruiken om te achterhalen welke betaalmethoden de gebruiker tot zijn beschikking heeft.

Je moet beveiligingsmaatregelen in je betaalapp inbouwen om dit soort misbruik te voorkomen.

Gebruik de volgende strategieën om misbruik tegen te gaan:

  • Beperk het aantal verzoeken : Beperk hoe vaak uw app reageert op IS_READY_TO_PAY . Reageer bijvoorbeeld slechts één keer per 30 minuten.
  • Gebruik encryptie : Versleutel gevoelige reacties zodat alleen uw vertrouwde servers deze kunnen decoderen. Voer encryptie en decryptie altijd aan de serverzijde uit.
  • Beperk de toegang : Stel een lijst samen van vertrouwde WebView-hostapps die toegang hebben, op basis van hun pakketnamen en SHA256-ondertekeningscertificaten. Lees meer in de handleiding voor ontwikkelaars van Android-betaalapps .