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:
org.chromium.intent.action.PAY
: Ermöglicht es 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
: Websites können prüfen, ob der Nutzer eine unterstützte Zahlungsmethode eingerichtet hat. Weitere Informationen finden Sie im Entwicklerleitfaden für 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 finden Sie unter Versand- und Kontaktdaten über eine Android-Zahlungs-App angeben.
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:
- Entwicklerleitfaden für Android-Zahlungs-Apps: Informationen zum Erstellen und Konfigurieren Ihrer Zahlungs-App, einschließlich des Umgangs mit Intents und der Bestätigung der aufrufenden App.
- Zahlungsmethode einrichten: Registrieren Sie Ihre Zahlungsmethode und definieren Sie ihre Funktionen.
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.