Payment Request API'yi kullanarak WebView'de Android ödeme uygulamalarını destekleme

Ödeme İsteği API'si'ni kullanarak WebView içinde çalışan web sitelerinden Android ödeme uygulamalarını başlatabilirsiniz. Bu özellik, Chrome'da zaten bulunan aynı JavaScript API kullanılarak çalışır.

Bu özellik, genellikle Chrome 136 ile birlikte gelen WebView 136 sürümünden itibaren kullanılabilir.

WebView ana makine uygulamalarında ödeme isteğini ayarlama

WebView'dan Android ödeme uygulamalarını başlatmak için Ödeme İsteği API'si, Android amaçlarını kullanarak sistemi sorgular. Bunu desteklemek için WebView barındırıcı uygulamasının bu amaçları AndroidManifest.xml dosyasında belirtmesi gerekir.

Ödeme isteği, WebView'da varsayılan olarak devre dışıdır.

Jetpack Webkit 1.14.0 sürümü veya daha yeni bir sürümde WebSettingsCompat kullanarak etkinleştirmek için aşağıdaki adımları uygulayın:

1. adım: Jetpack Webkit bağımlılığını ekleyin

Kotlin (build.gradle.kts)

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

Groovy (build.gradle)

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

Sürüm kataloğu

[versions]
webkit = "1.14.0"

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

2. adım: Gerekli sınıfları içe aktarın

Bu sınıflar, WebView ayarlarına erişip bunları yapılandırmanıza ve çalışma zamanında özellik desteğini kontrol etmenize olanak tanır.

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

3. adım: WebView kodunda ödeme isteğini etkinleştirin

Bu adım, WebView'unuzda Ödeme İsteği özelliğini etkinleştirir ve sitenin JavaScript kullanarak bu özelliği tetikleyebilmesini sağlar.

Bu adım, WebView'unuzda Ödeme İsteği özelliğini etkinleştirir ve sitenin bu özelliği JavaScript kullanarak tetikleyebilmesini sağlar.

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. adım: AndroidManifest.xml dosyasına amaç filtreleri ekleyin

Bu filtreler, WebView'ın sistem amaçlarını kullanarak Android ödeme uygulamalarını keşfetmesine ve çağırmasına olanak tanır:

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

Önemli ödeme isteği özelliklerini desteklemek için AndroidManifest.xml'nizde aşağıdaki amaçları kullanın:

5. adım: Uygulamanızı yeniden oluşturup yayınlayın

Bu değişiklikleri yaptıktan sonra uygulamanızı yeniden oluşturun ve güncellenmiş bir sürümü Play Store'da yayınlayın.

İsteğe bağlı: Hazırlık kontrollerini özelleştirme

Ödeme İsteği API'si, Android ödeme uygulamalarını başlatmanın yanı sıra web sitelerinin kullanıcının ödemeye hazır olup olmadığını kontrol etmesine de olanak tanır. Örneğin, web siteleri kullanıcının desteklenen bir ödeme yöntemi ayarlayıp ayarlamadığını algılayabilir.

Chrome'da, kullanıcıların bu kontrolü etkinleştirmesine veya devre dışı bırakmasına olanak tanıyan bir ayar bulunur. WebView barındıran uygulamalar, aşağıdakileri kullanarak benzer bir açma/kapatma düğmesi sunabilir:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

Bu ayar varsayılan olarak etkindir (true). Etkin olduğunda, WebView'da çalışan web sitelerinin kullanıcının kayıtlı bir ödeme aracı olup olmadığını algılamasına olanak tanır.

JavaScript'te ödeme isteği desteğini kontrol etme

Java veya Kotlin'de WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) çağrıldıktan sonra window.PaymentRequest arayüzü JavaScript'te kullanılabilir. Bu, web sayfasında özellik algılama için kullanılabilir:

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

window.PaymentRequest kullanılabilir olduğunda web sayfası ödeme işlemi başlatmaya devam edebilir.

Android ödeme uygulamalarını Ödeme İsteği ile entegre etme

Ödeme İsteği'ni desteklemek için Android ödeme uygulamalarının belirli sistem amaçlarına yanıt vermesi ve ödeme verilerini güvenli bir şekilde işlemesi gerekir. Bu kılavuzlarda ödeme yöntemlerini kaydetme, ödeme hizmetinizi uygulama ve uygulamanızı koruma hakkında bilgi verilmektedir:

Uygulamanızı kötüye kullanıma karşı koruma

Tüm uygulamalar Android ödeme amaçlarını (org.chromium.intent.action.PAY, IS_READY_TO_PAY ve UPDATE_PAYMENT_DETAILS) çağırabilir. WebView'a sahip uygulamalar, Ödeme İsteği çağrılarını gözlemleyebilir, başlatabilir ve engelleyebilir. WebView, ana uygulamanın sürecinde çalıştığı için bu amaçların nasıl kullanıldığını kısıtlayamaz. Kötü amaçlı uygulamalar, oracle saldırıları başlatmak için bu durumdan yararlanabilir.

Oracle saldırısında bir ödeme uygulaması, istemeden paylaşmaması gereken bilgileri açığa çıkarır. Örneğin, bir saldırgan, kullanıcının hangi ödeme araçlarını kullandığını öğrenmek için IS_READY_TO_PAY kullanabilir.

Bu tür kötüye kullanıma karşı koruma sağlamak için ödeme uygulamanıza koruma özellikleri eklemeniz gerekir.

Kötüye kullanımı azaltmak için aşağıdaki stratejilerden yararlanın:

  • İstekleri kısıtlama: Uygulamanızın IS_READY_TO_PAY yanıt verme sıklığını sınırlayın. Örneğin, 30 dakikada yalnızca bir kez yanıt verin.
  • Şifreleme kullanma: Hassas yanıtları yalnızca güvenilir satıcı sunucularınızın şifresini çözebileceği şekilde şifreleyin. Şifreleme ve şifre çözme işlemlerini her zaman sunucu tarafında gerçekleştirin.
  • Erişimi kısıtlama: Paket adlarını ve SHA256 imza sertifikalarını kullanarak güvenilir WebView ana makine uygulamalarının izin verilenler listesini tutun. Daha fazla bilgiyi Android ödeme uygulaması geliştiricileri kılavuzunda bulabilirsiniz.