您可以使用 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.PAY
、IS_READY_TO_PAY
和 UPDATE_PAYMENT_DETAILS
。WebView 主機應用程式也可以觀察、啟動及攔截付款要求呼叫。由於 WebView 會在主機應用程式程序中執行,因此無法限制這些意圖的使用方式。惡意應用程式可以利用這項功能發動Oracle 攻擊。
在 Oracle 攻擊中,付款應用程式會不小心洩漏不該洩漏的資訊。舉例來說,攻擊者可能會使用 IS_READY_TO_PAY
來找出使用者可用的付款工具。
您必須在付款應用程式中加入防護機制,以防範這類濫用行為。
請採用下列策略,減少濫用行為:
- 調節要求數:限制應用程式回應
IS_READY_TO_PAY
的頻率。例如每 30 分鐘只回覆一次。 - 使用加密功能:加密敏感回應,讓只有您信任的商家伺服器才能解密。一律在伺服器端執行加密和解密作業。
- 限制存取權:使用信任的 WebView 主機應用程式套件名稱和 SHA256 簽署憑證,維護許可清單。詳情請參閱 Android 付款應用程式開發人員指南。