Za pomocą Payment Request API możesz uruchamiać aplikacje płatnicze na Androida z witryn działających w WebView. Działa to dzięki temu samemu interfejsowi JavaScript API, który jest już dostępny w Chrome.
Ta funkcja jest dostępna od wersji 136 komponentu WebView, która jest zwykle dostarczana z Chrome 136.
Konfigurowanie żądania płatności w aplikacjach hostujących WebView
Aby uruchomić aplikacje płatnicze na Androida z WebView, interfejs Payment Request API wysyła do systemu zapytania za pomocą intencji Androida.
Aby to było możliwe, aplikacja hostująca WebView musi zadeklarować te intencje w pliku AndroidManifest.xml.
Domyślnie interfejs Payment Request jest wyłączony w komponencie WebView.
Aby włączyć tę funkcję za pomocą WebSettingsCompat z pakietu Jetpack Webkit w wersji 1.14.0 lub nowszej, wykonaj te czynności:
Krok 1. Dodaj zależność Jetpack Webkit
Kotlin (build.gradle.kts)
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
}
Groovy (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ę żądania płatności w widoku WebView i zapewnia, że witryna może ją wywoływać za pomocą JavaScriptu.
Ten krok włącza funkcję żądania płatności w widoku 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ą komponentowi 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ć kluczowe funkcje Payment Request, użyj w AndroidManifest.xml tych intencji:
org.chromium.intent.action.PAY: umożliwia komponentowi WebView wywoływanie aplikacji płatniczych na Androidzie i otrzymywanie 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 do płatności. Więcej informacji znajdziesz w artykule Przekazywanie informacji o dostawie i danych kontaktowych z aplikacji do płatności na Androida.
Krok 5. Ponownie skompiluj i opublikuj aplikację
Po wprowadzeniu tych zmian ponownie skompiluj aplikację i opublikuj zaktualizowaną wersję w Sklepie Play.
Opcjonalnie: dostosowywanie kontroli gotowości
Oprócz uruchamiania aplikacji do płatności na Androidzie interfejs Payment Request API umożliwia witrynom sprawdzanie, czy użytkownik jest gotowy do zapłaty. Na przykład witryny mogą wykrywać, czy użytkownik ma skonfigurowaną obsługiwaną formę płatności.
Chrome zawiera ustawienie, które pozwala użytkownikom włączyć lub wyłączyć to sprawdzanie. Aplikacje hostujące WebView mogą oferować podobny przełącznik za pomocą tego kodu:
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 zarejestrowaną formę płatności.
Sprawdzanie obsługi interfejsu Payment Request API w JavaScript
Po wywołaniu funkcji WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) w języku Java lub Kotlin interfejs window.PaymentRequest staje się dostępny w JavaScript. Możesz go użyć do wykrywania funkcji na stronie:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Gdy usługa window.PaymentRequest jest dostępna, strona internetowa może nadal inicjować transakcję płatniczą.
Integracja aplikacji płatniczych na Androida z Payment Request
Aby obsługiwać żądanie płatności, 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, wdrożyć 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.
- Skonfiguruj formę płatności: zarejestruj formę płatności i określ jej możliwości.
Zabezpieczanie aplikacji przed nadużyciami
Każda aplikacja może wywoływać intencje płatności na Androidzie org.chromium.intent.action.PAY,IS_READY_TO_PAY i UPDATE_PAYMENT_DETAILS. Aplikacje hostujące komponent WebView mogą też obserwować, inicjować i przechwytywać wywołania interfejsu Payment Request API. Ponieważ komponent WebView działa w procesie aplikacji hosta, nie może ograniczać sposobu używania tych intencji.
Złośliwe aplikacje mogą wykorzystać tę lukę do przeprowadzania ataków typu oracle.
W ataku typu oracle aplikacja do płatności 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 instrumenty płatnicze są dostępne dla użytkownika.
Musisz wbudować w aplikację do płatności zabezpieczenia, które będą chronić przed tego rodzaju nadużyciami.
Aby ograniczyć nadużycia, zastosuj te strategie:
- Ograniczaj żądania: ogranicz częstotliwość odpowiadania aplikacji na żądania.
IS_READY_TO_PAYMożesz na przykład odpowiadać tylko raz na 30 minut. - Używaj szyfrowania: szyfruj poufne odpowiedzi, aby tylko zaufane serwery sprzedawcy mogły je odszyfrować. Szyfrowanie i odszyfrowywanie zawsze wykonuj po stronie serwera.
- Ograniczanie dostępu: prowadź listę dozwolonych zaufanych aplikacji hosta 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.