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

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

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.