Za pomocą Payment Request API możesz uruchamiać aplikacje płatnicze na Androida z witryn działających w WebView. Działa to za pomocą tego samego interfejsu JavaScript API, który jest już dostępny w Chrome.
Ta funkcja jest dostępna od wersji WebView 136, która zwykle jest dostarczana z Chrome 136.
Konfigurowanie Payment Request w aplikacjach hostujących WebView
Aby uruchamiać
aplikacje płatnicze na Androida
z WebView, Payment Request API wysyła zapytania do systemu za pomocą intencji Androida.
Aby to było możliwe, aplikacja hostująca WebView musi zadeklarować te intencje w pliku AndroidManifest.xml.
Domyślnie Payment Request jest wyłączony w WebView.
Aby go włączyć, wykonaj te czynności, używając WebSettingsCompat z Jetpack Webkit w wersji 1.14.0 lub nowszej:
Krok 1. Dodaj zależność Jetpack Webkit
Kotlin (build.gradle.kts)
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
}
Dynamiczny (build.gradle)
dependencies {
implementation 'androidx.webkit:webkit:1.14.0'
}
Katalog wersji
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
Krok 2. Zaimportuj wymagane klasy
Te klasy umożliwiają dostęp do ustawień WebView i ich konfigurowanie oraz sprawdzanie obsługi funkcji w czasie działania.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
Krok 3. Włącz Payment Request w kodzie WebView
Ten krok włącza funkcję Payment Request w komponencie WebView i zapewnia, że witryna może ją wywoływać za pomocą JavaScriptu.
Ten krok włącza funkcję Payment Request w komponencie WebView i zapewnia, że witryna może ją wywoływać za pomocą JavaScriptu.
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);
}
Krok 4. Dodaj filtry intencji w pliku AndroidManifest.xml
Te filtry umożliwiają WebView wykrywanie i wywoływanie aplikacji płatniczych na Androida za pomocą intencji systemowych:
<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>
Aby obsługiwać najważniejsze funkcje Payment Request, użyj tych intencji w pliku AndroidManifest.xml:
org.chromium.intent.action.PAY: umożliwia WebView wywoływanie aplikacji płatniczych na Androida i odbieranie odpowiedzi dotyczących płatności. Więcej informacji znajdziesz w przewodniku dla deweloperów aplikacji płatniczych na Androida.org.chromium.intent.action.IS_READY_TO_PAY: umożliwia witrynom sprawdzanie, czy użytkownik ma skonfigurowaną obsługiwaną formę płatności. Więcej informacji znajdziesz w przewodniku dla deweloperów aplikacji płatniczych na Androida .org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: obsługuje dynamiczne aktualizacje, np. gdy użytkownik zmieni adres dostawy lub opcję w aplikacji płatniczej. Więcej informacji znajdziesz w artykule Udostępnianie informacji o wysyłce i danych kontaktowych z aplikacji płatniczej na Androida.
Krok 5. Ponownie skompiluj i opublikuj aplikację
Po wprowadzeniu tych zmian ponownie skompiluj aplikację i opublikuj jej zaktualizowaną wersję w Sklepie Play.
Opcjonalnie: dostosuj sprawdzanie gotowości
Oprócz uruchamiania aplikacji płatniczych na Androida Payment Request API umożliwia witrynom sprawdzanie, czy użytkownik jest gotowy do zapłaty. Witryny mogą na przykład wykrywać, czy użytkownik ma skonfigurowaną obsługiwaną formę płatności.
Chrome zawiera ustawienie, które umożliwia użytkownikom włączanie i wyłączanie tego sprawdzania. Aplikacje hostujące WebView mogą oferować podobny przełącznik za pomocą:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
To ustawienie jest domyślnie włączone (true). Gdy jest aktywne, umożliwia witrynom działającym w WebView wykrywanie, czy użytkownik ma zarejestrowany instrument płatniczy.
Sprawdzanie obsługi Payment Request w JavaScript
Gdy w Javie lub Kotlinie zostanie wywołana funkcja WebSettingsCompat.setPaymentRequestEnabled(webSettings, true), interfejs window.PaymentRequest stanie się dostępny w JavaScript. Można go używać do wykrywania funkcji na stronie:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Gdy window.PaymentRequest jest dostępny, strona może kontynuować
inicjowanie transakcji płatniczej.
Integracja aplikacji płatniczych na Androida z Payment Request
Aby obsługiwać Payment Request, aplikacje płatnicze na Androida muszą odpowiadać na określone intencje systemowe i bezpiecznie obsługiwać dane płatności. Z tych przewodników dowiesz się, jak zarejestrować formy płatności, zaimplementować usługę płatności i zabezpieczyć aplikację:
- Przewodnik dla deweloperów aplikacji płatniczych na Androida: tworzenie i konfigurowanie aplikacji płatniczej, w tym obsługa intencji i weryfikacja aplikacji wywołującej.
- Konfigurowanie formy płatności: rejestrowanie formy płatności i określanie jej możliwości.
Zabezpieczanie aplikacji przed nadużyciami
Każda aplikacja może wywoływać intencje płatnicze na Androida org.chromium.intent.action.PAY, IS_READY_TO_PAY i UPDATE_PAYMENT_DETAILS. Aplikacje hostujące WebView mogą też obserwować, inicjować i przechwytywać wywołania Payment Request. Ponieważ WebView działa w procesie aplikacji hostującej, nie może ograniczać sposobu używania tych intencji.
Złośliwe aplikacje mogą wykorzystywać to do przeprowadzania ataków typu oracle.
W ataku typu oracle aplikacja płatnicza nieumyślnie ujawnia informacje, których nie powinna. Na przykład atakujący może użyć IS_READY_TO_PAY, aby dowiedzieć się, jakie formy płatności są dostępne dla użytkownika.
Aby chronić się przed tego typu nadużyciami, musisz wbudować zabezpieczenia w aplikacji płatniczej.
Aby ograniczyć nadużycia, zastosuj te strategie:
- Ograniczanie liczby żądań: ogranicz, jak często aplikacja odpowiada na
IS_READY_TO_PAY. Na przykład odpowiadaj tylko raz na 30 minut. - Szyfrowanie: szyfruj poufne odpowiedzi, aby tylko zaufane serwery sprzedawcy mogły je odszyfrować. Szyfrowanie i odszyfrowywanie zawsze wykonuj po stronie serwera.
- Ograniczanie dostępu: utrzymuj listę dozwolonych zaufanych aplikacji hostujących WebView używając ich nazw pakietów i certyfikatów podpisywania SHA256. Więcej informacji znajdziesz w przewodniku dla deweloperów aplikacji płatniczych na Androida.