Bu rehberde, Jetpack Webkit kitaplığının avantajları, işleyiş şekli ve projelerinizde nasıl uygulayabileceğiniz açıklanmaktadır.
Genel Bakış
WebView'lar Android geliştirmenin önemli bir parçasıdır ancak farklı Android OS sürümlerindeki özelliklerde tutarsızlıklar olabileceğinden bazen yönetilmesi zor olabilir. Her Android OS sürümü, sabit bir WebView API'leri grubu sağlar. Android, WebView'dan daha yavaş bir sıklıkta yayınlandığından Android API'leri, mevcut tüm WebView özelliklerini kapsamayabilir. Bu durum, özelliklerin daha yavaş kullanıma sunulmasına ve test maliyetlerinin artmasına neden olur.
Jetpack Webkit, uyumluluk katmanı olarak hareket ederek ve kullanıcının cihazındaki güncel WebView APK'sinden yararlanarak bu sorunları çözer. Ayrıca, yalnızca bu kitaplıkta kullanılabilen yeni ve modern API'ler de içerir.
Neden Jetpack Webkit kullanılmalı?
Jetpack Webkit, sürümler arası uyumluluk sunmanın yanı sıra geliştirme sürecini basitleştirebilecek ve uygulamanızın işlevselliğini iyileştirebilecek yeni ve modern API'ler de sunar:
Modern kimlik doğrulamayı etkinleştirir: WebView, WebAuthn gibi modern web kimlik doğrulama standartlarını sorunsuz bir şekilde işleyerek geçiş anahtarı tabanlı oturum açma işlemlerine olanak tanır.
androidx.webkit
kitaplığı, uygulamanızın ihtiyaç duyduğu destek düzeyini yapılandırmak için kullanabileceğinizWebSettingsCompat.setWebAuthenticationSupport()
yöntemini kullanarak bu entegrasyon üzerinde tam kontrol sahibi olmanızı sağlar.Performansı iyileştirir:
prefetchUrlAsync
,prerenderUrlAsync
vesetBackForwardCacheEnabled
gibi API'leri kullanarak WebView'un performansını uygulamanızın kullanım alanlarına göre hassas bir şekilde ayarlayın.Kararlılığı artırır: Kilitlenen veya yanıt vermeyen oluşturma işlemlerini kilitlenmeden kurtarır. Daha fazla bilgi için
WebViewRenderProcess#terminate()
konusuna bakın.Tarama verileri üzerinde ayrıntılı kontrol sunar: WebView tarafından belirli kaynaklar için depolanan tarama verilerini silmek üzere
WebStorageCompat
sınıfını kullanın.
Bileşenleri anlama
Jetpack Webkit'i etkili bir şekilde kullanmak için aşağıdaki bileşenler arasındaki ilişkiyi anlamanız gerekir:
Android System WebView: Bu, Google'ın Google Play Store üzerinden Chrome ile aynı sıklıkta düzenli olarak güncellediği Chromium tabanlı oluşturma motorudur. En güncel özellikleri içerir ve tüm WebView API'leri için temel uygulama kodunu sağlar.
Framework API'leri (
android.webkit
): Bunlar belirli bir Android OS sürümüne sabitlenmiş API'lerdir. Örneğin, Android 10'daki bir uygulama yalnızca bu sürüm yayınlandığında kullanılabilen API'lere erişebilir. Bu nedenle, WebView APK'sına daha yeni güncellemelerde eklenen yeni özellikleri kullanamaz. Örneğin,WebView#getWebViewRenderProcess()
ile yanıt vermeyen bir oluşturucuyu kontrol etmek için bu işlevi yalnızca Android 10 ve sonraki sürümlerde çağırabilirsiniz.Jetpack Webkit Library (
androidx.webkit
): Bu, uygulamanızda paketlenmiş küçük bir kitaplıktır. Bu kitaplık, sabit bir işletim sistemi sürümüne sahip olan Android platformunda tanımlanan API'leri çağırmak yerine WebView APK'sını çağıran bir köprü görevi görür. Bu sayede, Android 10 gibi eski bir işletim sistemi sürümünün yüklü olduğu cihazlara uygulamalar yüklendiğinde bile bu uygulamalar en yeni WebView özelliklerini kullanabilir. Örneğin,WebViewCompat.getWebViewRenderProcess()
, Framework API'ye benzer şekilde çalışır ancak Android 10'dan önceki tüm işletim sistemi sürümlerinde de çağrılabilir.
Bir API hem çerçevede hem de Jetpack Webkit'te kullanılabiliyorsa Jetpack Webkit sürümünü seçmenizi öneririz. Bu, en geniş cihaz yelpazesinde tutarlı davranış ve uyumluluk sağlar.
Jetpack Webkit ve APK etkileşimi
Jetpack Webkit'teki API'ler iki bölüm halinde uygulanır:
Statik Jetpack Webkit: Statik Jetpack Webkit kitaplığı, API'nin uygulanmasından sorumlu kodun küçük bir bölümünü içerir.
WebView APK'sı: Kodun büyük bir kısmı WebView APK'sında bulunur.
Uygulamanız, Jetpack Webkit API'yi çağırıyor. Bu API de WebView APK'sını çağırıyor.
Uygulamanızdaki Jetpack Webkit sürümünü kontrol edebilirsiniz ancak kullanıcıların cihazlarındaki WebView APK güncellemelerini kontrol edemezsiniz. Genellikle çoğu kullanıcı WebView APK'sının güncel sürümlerini kullanır ancak uygulamanız, WebView APK'sının söz konusu sürümünün desteklemediği API'leri çağırmamaya dikkat etmelidir.
Jetpack Webkit, WebView sürümlerinin manuel olarak kontrol edilmesi ihtiyacını da ortadan kaldırır.
Bir özelliğin kullanılıp kullanılamadığını belirlemek için özelliğin sabit değerini kontrol edin. Örneğin, WebViewFeature.WEB_AUTHENTICATION
.
Birlikte işleyiş şekli
Jetpack Webkit, statik Framework API ile sık sık güncellenen WebView APK arasındaki boşluğu doldurur. Jetpack Webkit API'yi özellik algılama kalıbıyla kullandığınızda kitaplık, özelliğin kullanıcının cihazına yüklenen WebView APK'sı tarafından desteklenip desteklenmediğini kontrol eder. Bu, Android OS (framework) sürümünü kontrol etme ihtiyacını ortadan kaldırır.
WebView APK'sı yeterince yeni bir sürümse kitaplık, özelliği çağırır. Aksi takdirde, özelliğin kullanılamadığını bildirerek uygulamanızın kilitlenmesini önler ve durumu sorunsuz bir şekilde yönetmenizi sağlar.
Jetpack Webkit ve Framework API'lerini karşılaştırma
Bu bölümde, Jetpack Webkit kitaplığıyla ve kitaplık olmadan kullanılan uygulama yöntemleri karşılaştırılmaktadır:
Modern kimlik doğrulamayı (WebAuthn) etkinleştirme
Without Jetpack Webkit
Çerçeve API'leri aracılığıyla mümkün değildir.
Jetpack Webkit ile
Uyumluluk kontrolleri için WebViewFeature.WEB_AUTHENTICATION
'dan yararlanır.
if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) {
WebSettingsCompat.setWebAuthenticationSupport(
webView.settings,
WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP
)
}
Bir kaynakla ilgili verileri silme (siteye özgü depolama)
Without Jetpack WebKit
Belirli kaynak verilerini temizlemek için doğrudan bir API yoktur. Genellikle tüm verilerin temizlenmesi gerekir.
Jetpack WebKit ile
Verilerin tam olarak silinmesi için uyumluluk API'lerini kullanır. Aşağıdaki seçeneklerden birini kullanabilirsiniz:
WebStorageCompat.getInstance().deleteBrowsingData()
Alternatif seçenek:
WebStorageCompat.getInstance().deleteBrowsingDataForSite()
WebView sürümünü alma
Without Jetpack WebKit
Standart çerçeve sınıfını kullanır.
val webViewPackage = WebView.getCurrentWebViewPackage()
Jetpack WebKit ile
Daha güvenli alma için uyumluluk katmanını kullanır.
val webViewPackage = WebViewCompat.getCurrentWebViewPackage()
Yanıt vermeyen oluşturucuyu (oluşturucu istemcisi) işleme
Without Jetpack WebKit
Standart çerçeve yöntemini kullanır.
webView.setWebViewRenderProcessClient(myClient)
Jetpack WebKit ile
İstemciyi ayarlamak için WebViewCompat ve özellik kontrolü kullanılır.
if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE)) {
WebViewCompat.setWebViewRenderProcessClient(webView, myClient)
}
Daha fazla bilgi için androidx.webkit
referans belgelerine bakın.
Jetpack Webkit'i kodunuza entegre etme
Jetpack Webkit'i kullanmak standart WebView sınıfının özelliklerini artırır ancak orijinal WebView sınıfının yerini tamamen almaz.
android.webkit.WebView
sınıfını kullanmaya devam edebilirsiniz. XML düzenlerinize ekleyebilir ve kodunuzda örneğe referans alabilirsiniz. Standart çerçeve özelliklerine erişmek için yöntemleri doğrudan WebView örneğinde veya ayarlar nesnesinde çağırabilirsiniz.
Modern özelliklere erişmek için Jetpack Webkit'in sağladığı statik yardımcı yöntemleri (ör. WebViewCompat
ve WebSettingsCompat
) kullanırsınız. Mevcut WebView örneğinizi bu yöntemlere iletirsiniz.
Kotlin
import android.webkit.WebView
import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature
// You still get your WebView instance the standard way.
val webView: WebView = findViewById(R.id.my_webview)
// To enable a modern feature, you pass that instance to a Jetpack Webkit helper.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)
}
Java
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
// You still get your WebView instance the standard way.
WebView webView = findViewById(R.id.my_webview);
// To enable a modern feature, you pass that instance to a Jetpack Webkit helper.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON);
}
Jetpack Webkit'i uygulama
Jetpack Webkit'i uygulamak için aşağıdaki prosedürü kullanın.
1. adım: Bağımlılığı ekleyin
Jetpack Webkit'i eklemek için modülünüzün build.gradle.kts
veya build.gradle
dosyasına aşağıdaki bağımlılığı ekleyin:
Eski
dependencies { implementation "androidx.webkit:webkit:1.14.0" }
Kotlin
dependencies { implementation("androidx.webkit:webkit:1.14.0") }
Jetpack Webkit, ince sarmalayıcılar içerdiğinden uygulamanızın boyutu üzerindeki etkisi minimum düzeydedir.
2. adım: Özellik algılama modelini benimseyin
Kullanılamayan API'ler çağrıldığında kilitlenmeleri önlemek için özellik kontrollerini kullanın. Her API çağrısının bir özellik kontrolüyle sarmalanmasını ve API'nin kullanılamadığı durumlarda yedek mantığı düşünülmesini öneririz.
Modern WebView API'yi kullanmak için aşağıdaki kalıbı öneririz:
import android.webkit.WebView
import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature
// In your Kotlin code where you configure your WebView
val webView: WebView = findViewById(R.id.my_webview)
// Before you use a modern API, first check if it is supported.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
// If the check passes, it is safe to call the API.
WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)
} else {
// Optionally, provide a fallback for older WebView versions.
}
Bu kalıp, uygulamanın sağlam olmasını sağlar. Özellik kontrolü önce yapıldığından, özellik kullanılamıyorsa uygulama kilitlenmez. WebViewFeature#isFeatureSupported()
kontrolünün performans ek yükü ihmal edilebilir düzeydedir.