Payment Request API を使用すると、WebView 内で実行されているウェブサイトから Android 支払いアプリを起動できます。これは、Chrome ですでに利用可能な同じ JavaScript API を使用して機能します。
この機能は WebView バージョン 136 以降で利用できます。通常、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 で支払いリクエスト機能を有効にし、サイトが 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
で次のインテントを使用して、Payment Request の主要な機能をサポートします。
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: アプリを再ビルドして公開する
これらの変更を加えた後、アプリを再ビルドして、更新されたバージョンを Google Play ストアにリリースします。
省略可: 準備状況チェックをカスタマイズする
Payment Request API を使用すると、Android 支払いアプリを起動するだけでなく、ユーザーが支払いの準備ができているかどうかをウェブサイトで確認できます。たとえば、ウェブサイトは、ユーザーがサポートされているお支払い方法を設定したかどうかを検出できます。
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 ホストアプリは、Payment Request 呼び出しを監視、開始、インターセプトすることもできます。WebView はホストアプリのプロセス内で実行されるため、これらのインテントの使用方法を制限することはできません。悪意のあるアプリはこれを悪用してオラクル攻撃を仕掛ける可能性があります。
オーラクル攻撃では、支払いアプリが意図せず、公開すべきでない情報を開示します。たとえば、攻撃者は IS_READY_TO_PAY
を使用して、ユーザーが利用できる支払い方法を見つける可能性があります。
このような不正使用を防ぐには、お支払いアプリに保護機能を組み込む必要があります。
不正行為を軽減するには、次の戦略を使用します。
- リクエストのスロットリング: アプリが
IS_READY_TO_PAY
に応答する頻度を制限します。たとえば、30 分ごとに 1 回だけ返信します。 - 暗号化を使用する: 機密性の高いレスポンスを暗号化して、信頼できる販売者サーバーのみが復号できるようにします。暗号化と復号は常にサーバー側で行う。
- アクセスを制限する: パッケージ名と SHA256 署名証明書を使用して、信頼できる WebView ホストアプリの許可リストを維持します。詳しくは、Android 決済アプリのデベロッパー ガイドをご覧ください。