Ö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:
org.chromium.intent.action.PAY: WebView'ın Android ödeme uygulamalarını çağırmasına ve ödeme yanıtları almasına olanak tanır. Daha fazla bilgiyi Android ödeme uygulamaları geliştirici kılavuzunda bulabilirsiniz.org.chromium.intent.action.IS_READY_TO_PAY: Web sitelerinin, kullanıcının desteklenen bir ödeme yöntemi ayarlayıp ayarlamadığını kontrol etmesine olanak tanır. Daha fazla bilgiyi Android ödeme uygulaması geliştiricileri kılavuzunda bulabilirsiniz.org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: Kullanıcı, ödeme uygulamasında kargo adresini veya seçeneğini değiştirdiğinde olduğu gibi dinamik güncellemeleri destekler. Android ödeme uygulamasından kargo ve iletişim bilgilerini sağlama başlıklı makalede daha fazla bilgi edinin.
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:
- Android ödeme uygulamaları geliştirici kılavuzu: Amaçları işleme ve arayan uygulamayı doğrulama dahil olmak üzere ödeme uygulamanızı oluşturma ve yapılandırma.
- Ödeme yöntemi ayarlama: Ödeme yönteminizi kaydedin ve özelliklerini tanımlayın.
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_PAYyanı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.