皆さんは、WebView を使って Android アプリにウェブ購入手続きを埋め込んでいますか?
うれしいことに、このたび Android WebView で Google Pay がサポートされるようになりました。この機能はバージョン 137 以降の WebView で利用できます。
このソリューションは、Payment Request API を活用しています。これを使うと、WebView に埋め込まれているウェブサイトから Android 決済アプリを起動できます。
Google Play 開発者サービス 25.18.30(本日より利用可能)以降で、Google Pay がネイティブの支払いシートをトリガーするようになります。つまり、WebView でトリガーされた場合でもユーザー デバイス トークンが利用できるようになるので、決済プロセスがスムーズになります。
WebView の Payment Request API はデフォルトで無効になるので、以下の簡単な変更を実装する必要があります。
ビルドの依存関係を追加(または更新)します。
androidx.webkit:webkit:1.14.0
AndroidManifest.xml に次の queries
タグを追加します。
<!--
Chromium で定義されるアクション PAY、IS_READY_TO_PAY、
UPDATE_PAYMENT_DETAILS を Android アプリまたは SDK で初期化できるようにする
-->
<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>
アプリの WebView で Payment Request API が利用できるようにします。インポート文を正しく記述してください。必要な Google Pay 固有の変更はこれだけです。
Kotlin(Compose):
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
AndroidView(
factory = {
WebView(it).apply {
// WebView の設定を更新し、JavaScript と支払いリクエストを許可
settings.javaScriptEnabled = true
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(settings, true);
}
}
},
update = {
it.loadUrl(url)
}
)
Java:
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
// WebView の設定を更新し、JavaScript と支払いリクエストを許可
webSettings.setJavaScriptEnabled(true);
if (WebViewFeature.isFeatureSupported(WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(webSettings, true);
}
最後に、Pay & ウォレット コンソールから、アプリの本番環境アクセスをリクエストします。
Android WebView で Google Pay をサポートすると、Android アプリにウェブ購入手続きを埋め込んで、ユーザーに Google Pay を利用してもらうことができます。実装についてさらにサポートが必要な場合は、Google Pay & ウォレット コンソールにログインしてサポート チケットを作成してください。また、Discord の #payments チャンネルからデベロッパー コミュニティに参加することもできます。
X で@GooglePayDevs をフォローすると、今後の最新情報を受け取ることができます。ご不明な点がある場合は、@GooglePayDevs にタグ付けし、ツイートに #AskGooglePayDevs を含めてください。