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

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:

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ę:

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_PAYUPDATE_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_PAY Moż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.