Android-Zahlungs-Apps in WebView mit der Payment Request API unterstützen

Mit der Payment Request API können Sie Android-Zahlungs-Apps von Websites aus starten, die in einer WebView ausgeführt werden. Dazu wird dieselbe JavaScript API verwendet, die bereits in Chrome verfügbar ist.

Diese Funktion ist ab WebView-Version 136 verfügbar, die in der Regel mit Chrome 136 ausgeliefert wird.

Zahlungsanfrage in WebView-Host-Apps einrichten

Um Android-Zahlungs-Apps über WebView zu starten, fragt die Payment Request API das System über Android-Intents ab. Dazu muss die WebView-Host-App diese Intents in ihrer AndroidManifest.xml-Datei deklarieren.

Die Zahlungsanfrage ist in WebView standardmäßig deaktiviert.

So aktivieren Sie die Funktion mit WebSettingsCompat ab Jetpack Webkit-Version 1.14.0:

Schritt 1: Jetpack Webkit-Abhängigkeit hinzufügen

Kotlin (build.gradle.kts)

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

Groovy (build.gradle)

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

Versionskatalog

[versions]
webkit = "1.14.0"

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

Schritt 2: Erforderliche Klassen importieren

Mit diesen Klassen können Sie auf WebView-Einstellungen zugreifen, sie konfigurieren und zur Laufzeit prüfen, ob Funktionen unterstützt werden.

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

Schritt 3: Zahlungsanfrage im WebView-Code aktivieren

In diesem Schritt wird die Funktion „Zahlungsanfrage“ in Ihrer WebView aktiviert und dafür gesorgt, dass die Website sie mit JavaScript auslösen kann.

Mit diesem Schritt wird die Funktion „Zahlungsanfrage“ in Ihrer WebView aktiviert und dafür gesorgt, dass die Website sie mit JavaScript auslösen kann.

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

Schritt 4: Intent-Filter in „AndroidManifest.xml“ hinzufügen

Mit diesen Filtern kann WebView Android-Zahlungs-Apps über System-Intents erkennen und aufrufen:

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

Verwenden Sie die folgenden Intents in Ihrem AndroidManifest.xml, um wichtige Funktionen für Zahlungsanfragen zu unterstützen:

  • org.chromium.intent.action.PAY: Ermöglicht es der WebView, Android-Zahlungs-Apps aufzurufen und Zahlungsantworten zu empfangen. Weitere Informationen finden Sie im Entwicklerleitfaden für Android-Zahlungs-Apps.
  • org.chromium.intent.action.IS_READY_TO_PAY: Ermöglicht Websites, zu prüfen, ob der Nutzer eine unterstützte Zahlungsmethode eingerichtet hat. Weitere Informationen finden Sie im Leitfaden für Entwickler von Android-Zahlungs-Apps .
  • org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: Unterstützt dynamische Aktualisierungen, z. B. wenn der Nutzer seine Versandadresse oder ‑option in der Zahlungs-App ändert. Weitere Informationen

Schritt 5: App neu erstellen und veröffentlichen

Nachdem Sie diese Änderungen vorgenommen haben, müssen Sie Ihre App neu erstellen und eine aktualisierte Version im Play Store veröffentlichen.

Optional: Bereitschaftsprüfungen anpassen

Mit der Payment Request API können Websites nicht nur Android-Zahlungs-Apps starten, sondern auch prüfen, ob der Nutzer bereit ist zu zahlen. So können Websites beispielsweise erkennen, ob der Nutzer eine unterstützte Zahlungsmethode eingerichtet hat.

In Chrome gibt es eine Einstellung, mit der Nutzer diese Prüfung aktivieren oder deaktivieren können. WebView-Host-Apps können eine ähnliche Ein/Aus-Schaltfläche mit dem folgenden Code anbieten:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

Diese Einstellung ist standardmäßig aktiviert (true). Wenn sie aktiv ist, können Websites, die in WebView ausgeführt werden, erkennen, ob der Nutzer ein registriertes Zahlungsmittel hat.

Unterstützung für die Zahlungsanfrage in JavaScript prüfen

Nachdem WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) in Java oder Kotlin aufgerufen wurde, ist die window.PaymentRequest-Schnittstelle in JavaScript verfügbar. Dies kann für die Erkennung von Funktionen auf der Webseite verwendet werden:

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

Wenn window.PaymentRequest verfügbar ist, kann die Webseite weiterhin eine Zahlungstransaktion initiieren.

Android-Zahlungs-Apps in Payment Request einbinden

Um die Zahlungsanfrage zu unterstützen, müssen Android-Zahlungs-Apps auf bestimmte System-Intents reagieren und Zahlungsdaten sicher verarbeiten. In diesen Anleitungen wird beschrieben, wie Sie Zahlungsmethoden registrieren, Ihren Zahlungsdienst implementieren und Ihre App schützen:

App vor Missbrauch schützen

Jede App kann die Android-Zahlungsabsichten org.chromium.intent.action.PAY, IS_READY_TO_PAY und UPDATE_PAYMENT_DETAILS aufrufen. WebView-Host-Apps können auch Payment Request-Aufrufe beobachten, initiieren und abfangen. Da WebView im Prozess der Host-App ausgeführt wird, kann nicht eingeschränkt werden, wie diese Intents verwendet werden. Böswillige Apps können dies ausnutzen, um Oracle-Angriffe zu starten.

Bei einem Oracle-Angriff gibt eine Zahlungs-App unbeabsichtigt Informationen preis, die sie nicht preisgeben sollte. Ein Angreifer könnte IS_READY_TO_PAY beispielsweise verwenden, um herauszufinden, welche Zahlungsmittel dem Nutzer zur Verfügung stehen.

Sie müssen Schutzmaßnahmen in Ihre Zahlungs-App einbauen, um sich vor dieser Art von Missbrauch zu schützen.

Mit den folgenden Strategien können Sie Missbrauch minimieren:

  • Anfragen drosseln: Beschränken Sie, wie oft Ihre App auf IS_READY_TO_PAY reagiert. Antworte beispielsweise nur alle 30 Minuten.
  • Verschlüsselung verwenden: Verschlüsseln Sie vertrauliche Antworten, damit nur Ihre vertrauenswürdigen Händlerserver sie entschlüsseln können. Verschlüsselung und Entschlüsselung sollten immer serverseitig erfolgen.
  • Zugriff einschränken: Führen Sie eine Zulassungsliste mit vertrauenswürdigen WebView-Host-Apps anhand ihrer Paketnamen und SHA256-Signaturzertifikate. Weitere Informationen finden Sie im Entwicklerleitfaden für Android-Zahlungs-Apps.