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:
- Entwicklerleitfaden für Android-Zahlungs-Apps: Hier erfahren Sie, wie Sie Ihre Zahlungs-App erstellen und konfigurieren, einschließlich der Verarbeitung von 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 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_PAYreagiert. 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.