Mit der Payment Request API können Sie Android-Zahlungs-Apps von Websites aus starten, die in einer WebViewausgefü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
Wenn Sie
Android-Zahlungs-Apps
aus WebView starten möchten, fragt die Payment Request API das System mithilfe von Android-Intents ab.
Dazu muss die WebView-Host-App diese Intents in der Datei AndroidManifest.xml deklarieren.
Die Zahlungsanfrage ist in WebView standardmäßig deaktiviert.
So aktivieren Sie sie mit WebSettingsCompat aus Jetpack Webkit Version 1.14.0 oder höher:
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 sie von der Website mit JavaScript ausgelöst werden kann.
In 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 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 Ihrer AndroidManifest.xml, um wichtige Funktionen der Zahlungsanfrage zu unterstützen:
org.chromium.intent.action.PAY: Ermöglicht der WebView, Android-Zahlungs-Apps aufzurufen und Zahlungsantworten zu empfangen. Weitere Informationen finden Sie in dem 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 in dem 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 Kontaktinformationen aus einer Android-Zahlungs-App bereitstellen.
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 Google Play Store.
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 bezahlen. Websites können 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 mit dem folgenden Code einen ähnlichen Schalter 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 Schnittstelle window.PaymentRequest in JavaScript verfügbar. Sie kann zur Funktionserkennung 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 Zahlungsanfragen einbinden
Um Zahlungsanfragen zu unterstützen, müssen Android-Zahlungs-Apps auf bestimmte System-Intents reagieren und Zahlungsdaten sicher verarbeiten. In diesen Leitfäden erfahren Sie, wie Sie Zahlungsmethoden registrieren, Ihren Zahlungsdienst implementieren und Ihre App schützen:
- Entwicklerleitfaden für Android-Zahlungs-Apps: Erstellen und konfigurieren Sie Ihre Zahlungs-App, einschließlich der Verarbeitung von Intents und der Überprüfung der aufrufenden App.
- Zahlungsmethode einrichten: Registrieren Sie Ihre Zahlungsmethode und definieren Sie ihre Funktionen.
App vor Missbrauch schützen
Jede App kann die Android-Zahlungs-Intents org.chromium.intent.action.PAY, IS_READY_TO_PAY und UPDATE_PAYMENT_DETAILS aufrufen. WebView-Host-Apps können auch Zahlungsanfragen 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ö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 einbauen, um sich vor dieser Art von Missbrauch zu schützen.
Mit den folgenden Strategien können Sie Missbrauch verhindern:
- Anfragen drosseln: Beschränken Sie, wie oft Ihre App auf
IS_READY_TO_PAYantwortet. Antworten Sie beispielsweise nur einmal alle 30 Minuten. - Verschlüsselung verwenden: Verschlüsseln Sie vertrauliche Antworten, damit nur Ihre vertrauenswürdigen Händlerserver sie entschlüsseln können. Führen Sie die Verschlüsselung und Entschlüsselung immer serverseitig durch.
- Zugriff beschränken: Führen Sie eine Zulassungsliste vertrauenswürdiger WebView-Host-Apps mit ihren Paketnamen und SHA256-Signaturzertifikaten. Weitere Informationen finden Sie in dem Entwicklerleitfaden für Android-Zahlungs-Apps.