Obsługa aplikacji do płatności na Androida w WebView za pomocą interfejsu Payment Request API

Za pomocą interfejsu Payment Request API możesz uruchamiać aplikacje do płatności na Androida z witryn internetowych w komponencie 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 WebView 136, która jest zwykle dostarczana z Chrome 136.

Konfigurowanie żądania płatności w aplikacjach hosta WebView

Aby uruchomić aplikacje do płatności na Androida z WebView, interfejs Payment Request API wysyła zapytania do systemu za pomocą intencji Androida. Aby to umożliwić, aplikacja hosta WebView musi zadeklarować te intencje w pliku AndroidManifest.xml.

Domyślnie prośba o płatność jest wyłączona w komponencie WebView.

Aby włączyć tę funkcję za pomocą WebSettingsCompat z wersji 1.14.0 lub nowszej WebKit w AndroidX:

Krok 1. Dodaj zależność WebKit AndroidX

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 wykonywania.

import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;

Krok 3. Włącz prośbę o płatność w kodzie WebView

Ten krok powoduje włączenie funkcji żądania płatności w WebView i zapewnia, że witryna może ją wywołać za pomocą JavaScriptu.

Ten krok powoduje włączenie funkcji żądania płatności w WebView i zapewnia, że witryna może ją wywołać za pomocą JavaScript.

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 do płatności 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 PaymentRequest, użyj w AndroidManifest.xml tych intencji:

Krok 5. Zbuduj ponownie 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 płatniczych na Androida 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ć tę weryfikację. Aplikacje hosta WebView mogą oferować podobny przełącznik za pomocą:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

To ustawienie jest domyślnie włączone (true). Gdy jest aktywne, pozwala witrynom działającym w WebView wykrywać, czy użytkownik ma zarejestrowany instrument płatności.

Sprawdzanie obsługi żądań płatności w JavaScript

Po wywołaniu interfejsu WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) w języku Java lub Kotlin interfejs WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) staje się dostępny w JavaScript.window.PaymentRequest Można go użyć do wykrywania funkcji na stronie internetowej:

if (window.PaymentRequest) {
  // Payment Request is available.
} else {
  // Payment Request is not available.
}

Jeśli window.PaymentRequest jest dostępny, strona internetowa może kontynuować inicjowanie transakcji płatności.

Integracja aplikacji do płatności na Androida z Payment Request

Aby obsługiwać żądanie płatności, aplikacje do płatności na Androida muszą odpowiadać na określone intencje systemowe i bezpiecznie przetwarzać dane płatności. Z tych przewodników dowiesz się, jak rejestrować formy płatności, wdrażać usługę płatniczą i chronić aplikację:

Zabezpieczanie aplikacji przed niewłaściwym użyciem

Każda aplikacja może wywoływać intencje płatności na Androida org.chromium.intent.action.PAY, IS_READY_TO_PAY i UPDATE_PAYMENT_DETAILS. Aplikacje hosta WebView mogą też obserwować, inicjować i przechwytywać wywołania żądania płatności. Ponieważ komponent WebView działa w ramach procesu aplikacji hosta, nie może ograniczać sposobu korzystania z tych intencji. Złośliwe aplikacje mogą wykorzystywać tę funkcję do przeprowadzania ataków oracle.

Podczas 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 sprawdzić, jakie instrumenty płatnicze są dostępne dla użytkownika.

Aby chronić aplikację do płatności przed tego typu nadużyciami, musisz wdrożyć w niej odpowiednie zabezpieczenia.

Aby ograniczyć nadużycia, zastosuj te strategie:

  • Ograniczanie żądań: ogranicza częstotliwość, z jaką aplikacja odpowiada na IS_READY_TO_PAY. Możesz na przykład odpowiadać tylko raz co 30 minut.
  • Używanie szyfrowania: szyfruj poufne odpowiedzi, aby mogły je odszyfrowywać tylko zaufane serwery sprzedawcy. Zawsze wykonuj szyfrowanie i odszyfrowanie po stronie serwera.
  • Ogranicz dostęp: utrzymuj listę dozwolonych zaufanych aplikacji hosta WebView, korzystając z ich nazw pakietów i certyfikatów podpisujących SHA-256. Więcej informacji znajdziesz w przewodniku dla deweloperów aplikacji do płatności na Androida.