添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

您可以使用 Payment Request API ,從在 WebView 中執行的網站啟動 Android 付款應用程式。這項功能會使用 Chrome 中已提供的 相同 JavaScript API

這項功能從 WebView 136 版開始提供,通常會隨 Chrome 136 版一併發布。

在 WebView 主機應用程式中設定付款要求

如要從 WebView 啟動 Android 付款應用程式 ,Payment Request API 會使用 Android 意圖查詢系統。為支援這項功能,WebView 主機應用程式必須在 AndroidManifest.xml 檔案中宣告這些意圖。

根據預設,WebView 會停用付款要求。

如要使用 AndroidX WebKit 1.14.0 以上版本的 WebSettingsCompat 啟用此功能,請按照下列步驟操作:

步驟 1:新增 AndroidX WebKit 依附元件

Kotlin (build.gradle.kts)

dependencies {
  implementation("androidx.webkit:webkit:1.14.0")

Groovy (build.gradle)

dependencies {
  implementation 'androidx.webkit:webkit:1.14.0'

版本目錄

[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }

步驟 2:匯入必要的類別

這些類別可讓您存取及設定 WebView 設定,並在執行階段檢查功能支援情形。

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

步驟 3:在 WebView 程式碼中啟用付款要求

這個步驟會在 WebView 中啟用 Payment Request 功能,並確保網站可以使用 JavaScript 觸發這項功能。

這個步驟會在 WebView 中啟用付款要求功能,並確保網站可以使用 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);

步驟 4:在 AndroidManifest.xml 中新增意圖篩選器

這些篩選器可讓 WebView 使用系統意圖,探索及叫用 Android 付款應用程式:

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

AndroidManifest.xml 中使用下列意圖,支援主要的 PaymentRequest 功能:

  • org.chromium.intent.action.PAY:讓 WebView 叫用 Android 付款應用程式並接收付款回應。詳情請參閱 Android 付款應用程式開發人員指南
  • org.chromium.intent.action.IS_READY_TO_PAY:允許網站檢查使用者是否已設定支援的付款方式。詳情請參閱 Android 付款應用程式開發人員指南
  • org.chromium.intent.action.UPDATE_PAYMENT_DETAILS:支援動態更新,例如使用者在付款應用程式中變更運送地址或選項。如需更多資訊,請參閱「透過 Android 付款應用程式提供運送和聯絡資訊」。
  • 步驟 5:重新建構並發布應用程式

    完成這些變更後,請重建應用程式,並將更新版發布至 Play 商店。

    選用:自訂就緒檢查

    除了啟動 Android 付款應用程式,Payment Request API 還可讓網站檢查使用者是否已準備好付款。舉例來說,網站可以偵測使用者是否已設定支援的付款方式。

    Chrome 提供設定,可讓使用者啟用或停用這項檢查。WebView 主機應用程式可以使用以下方式提供類似的切換按鈕:

    WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
    

    這項設定預設為啟用 (true)。啟用後,在 WebView 中執行的網站就能偵測使用者是否已註冊付款工具。

    檢查 JavaScript 是否支援付款要求

    在 Java 或 Kotlin 中呼叫 WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) 後,JavaScript 就會提供 window.PaymentRequest 介面。這可用於偵測網頁上的功能:

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

    window.PaymentRequest 可用時,網頁可以繼續啟動付款交易

    將 Android 付款應用程式與 Payment Request 整合

    為了支援付款要求,Android 付款應用程式必須回應特定系統意圖,並安全地處理付款資料。以下指南說明如何註冊付款方式、導入付款服務,以及保護應用程式:

  • Android 付款應用程式開發人員指南:建構及設定付款應用程式,包括如何處理意圖和驗證呼叫應用程式。
  • 設定付款方式:註冊付款方式並定義其功能。
  • 保護應用程式免於遭到濫用

    任何應用程式都可以呼叫 Android 付款意圖 org.chromium.intent.action.PAYIS_READY_TO_PAYUPDATE_PAYMENT_DETAILS。WebView 主機應用程式也可以觀察、啟動及攔截付款要求呼叫。由於 WebView 會在主機應用程式程序中執行,因此無法限制這些意圖的使用方式。惡意應用程式可以利用這項功能發動Oracle 攻擊

    在 Oracle 攻擊中,付款應用程式會不小心洩漏不該洩漏的資訊。舉例來說,攻擊者可能會使用 IS_READY_TO_PAY 來找出使用者可用的付款工具。

    您必須在付款應用程式中加入防護機制,以防範這類濫用行為。

    請採用下列策略,減少濫用行為:

  • 調節要求數:限制應用程式回應 IS_READY_TO_PAY 的頻率。例如每 30 分鐘只回覆一次。
  • 使用加密功能:加密敏感回應,讓只有您信任的商家伺服器才能解密。一律在伺服器端執行加密和解密作業。
  • 限制存取權:使用信任的 WebView 主機應用程式套件名稱和 SHA256 簽署憑證,維護許可清單。詳情請參閱 Android 付款應用程式開發人員指南
  • 除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。

    上次更新時間:2025-04-15 (世界標準時間)。

    [[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-04-15 (世界標準時間)。"],[],[]]