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 einem WebView ausgeführt werden. Dazu wird die gleiche 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 mithilfe von 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 AndroidX WebKit-Version 1.14.0 oder höher:

Schritt 1: AndroidX 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 und sie konfigurieren sowie die Funktionsunterstützung zur Laufzeit prüfen.

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

Schritt 3: Zahlungsanfrage im WebView-Code aktivieren

Dadurch wird die Funktion „Zahlungsanfrage“ in Ihrer WebView aktiviert und sichergestellt, 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 mithilfe von Systemintents finden 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 von Zahlungsanfragen zu unterstützen:

Schritt 5: App neu erstellen und veröffentlichen

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

Optional: Bereitschaftsüberprüfungen anpassen

Mit der Payment Request API können nicht nur Android-Zahlungs-Apps gestartet, sondern auch Websites prüfen, ob der Nutzer bereit ist zu bezahlen. 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 Umschaltfunktion mit folgenden Elementen 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 Zahlungsanfragen in JavaScript prüfen

Nachdem WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) in Java oder Kotlin aufgerufen wurde, ist die window.PaymentRequest-Benutzeroberfläche in JavaScript verfügbar. Dies kann für die Funktionsprüfung 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 Zahlungsanfragen zu unterstützen, müssen Android-Zahlungs-Apps auf bestimmte Systemabsichten reagieren und Zahlungsdaten sicher verarbeiten. In diesen Anleitungen wird erläutert, 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 Zahlungsanfrageaufrufe beobachten, initiieren und abfangen. Da WebView im Prozess der Host-App ausgeführt wird, kann die Verwendung dieser Intents nicht eingeschränkt werden. Bösartige 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 beispielsweise IS_READY_TO_PAY verwenden, um herauszufinden, welche Zahlungsmittel der Nutzer zur Verfügung hat.

Sie müssen Schutzmaßnahmen in Ihre Zahlungs-App einbinden, um diese Art von Missbrauch zu verhindern.

Mit den folgenden Strategien können Sie Missbrauch minimieren:

  • Anfragen drosseln: Begrenzen Sie, wie oft Ihre App auf IS_READY_TO_PAY reagiert. Sie können beispielsweise nur alle 30 Minuten antworten.
  • Verschlüsselung verwenden: Verschlüsseln Sie sensible 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: Behalten Sie eine Zulassungsliste vertrauenswürdiger WebView-Host-Apps mit ihren Paketnamen und SHA256-Signaturzertifikaten bei. Weitere Informationen finden Sie im Entwicklerleitfaden für Android-Zahlungs-Apps.