Android uygulamanızda ağ işlemleri gerçekleştirmek için Cronet Kitaplığı'nı nasıl kullanacağınızı öğrenin. Cronet, uygulamalarınızda kitaplık olarak kullanıma sunulan Chromium ağ yığınıdır. Kitaplık özellikleri hakkında daha fazla bilgi için Cronet'i kullanarak ağ işlemleri gerçekleştirme bölümüne bakın.
Projenizde kitaplığı oluşturma
Projenizde Cronet Kitaplığı'na bir bağımlılık eklemek için şu adımları uygulayın:
Aşağıdaki örnekte gösterildiği gibi, Android Studio'nun projenizin
settings.gradle
dosyasına Google'ın Maven deposuna bir referans içerdiğini doğrulayın:Modern
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Aşağıdaki örnekte gösterildiği gibi, uygulama modülünüzün
build.gradle
dosyasınındependencies
bölümüne Cronet için Google Play Hizmetleri İstemci Kitaplığı referansı ekleyin:Modern
dependencies { implementation 'com.google.android.gms:play-services-cronet:18.0.1' }
Kotlin
dependencies { implementation("com.google.android.gms:play-services-cronet:18.0.1") }
Bu bağımlılık eklendikten sonra oluşturulan CronetEngine
nesne, Google Play hizmetlerinden yüklenen Cronet'i kullanır. Google Play Hizmetleri'nin güncellenmiş sürümünü gerektiren cihazlar gibi hatalardan dolayı CronetEngine
nesnesi oluşturma sırasında beklenmedik istisnaların oluşmasını önlemek için CronetEngine
nesneleri oluşturmadan önce CronetProviderInstaller.installProvider(Context)
çağrısı yapın.
Cronet'in Google Play hizmetlerinden yüklenemediği durumlarda, Cronet API'sinin kullanılabilecek daha düşük performanslı bir uygulaması vardır. Bu yedek uygulamayı kullanmak için org.chromium.net:cronet-fallback
hizmetinden yararlanın ve new JavaCronetProvider(context).createBuilder()
yöntemini çağırın.
Ağ isteği oluştur
Bu bölümde, Cronet Kitaplığı kullanılarak ağ isteğinin nasıl oluşturulacağı ve gönderileceği gösterilmektedir. Ağ isteğini gönderdikten sonra, uygulamanız ağ yanıtını işlemesi gerekir.
CronetEngine örneği oluşturma ve yapılandırma
Kitaplık, CronetEngine
örneğini oluşturmak için kullanabileceğiniz bir CronetEngine.Builder
sınıfı sağlar. Aşağıdaki örnekte CronetEngine
nesnesinin nasıl oluşturulacağı gösterilmektedir:
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
CronetEngine
nesnesi yapılandırmak için Builder
sınıfını kullanabilirsiniz. Örneğin, önbelleğe alma ve veri sıkıştırma gibi seçenekler sağlayabilirsiniz. Daha fazla bilgi için CronetEngine.Builder
bölümünü inceleyin.
Geri çağırma isteğinin uygulamasını sağlama
Geri çağırmanın uygulanmasını sağlamak için bir UrlRequest.Callback
alt sınıfı oluşturun ve aşağıdaki örnekte gösterildiği gibi gerekli soyut yöntemleri uygulayın:
Kotlin
private const val TAG = "MyUrlRequestCallback" class MyUrlRequestCallback : UrlRequest.Callback() { override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { Log.i(TAG, "onRedirectReceived method called.") // You should call the request.followRedirect() method to continue // processing the request. request?.followRedirect() } override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onResponseStarted method called.") // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request?.read(ByteBuffer.allocateDirect(102400)) } override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { Log.i(TAG, "onReadCompleted method called.") // You should keep reading the request until there's no more data. byteBuffer.clear() request?.read(byteBuffer) } override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onSucceeded method called.") } }
Java
class MyUrlRequestCallback extends UrlRequest.Callback { private static final String TAG = "MyUrlRequestCallback"; @Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { Log.i(TAG, "onRedirectReceived method called."); // You should call the request.followRedirect() method to continue // processing the request. request.followRedirect(); } @Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onResponseStarted method called."); // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request.read(ByteBuffer.allocateDirect(102400)); } @Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { Log.i(TAG, "onReadCompleted method called."); // You should keep reading the request until there's no more data. byteBuffer.clear(); request.read(byteBuffer); } @Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onSucceeded method called."); } }
Ağ görevlerini yönetmek için Yürütücü nesnesi oluşturma
Ağ görevlerini yürütmek için Executor
sınıfını kullanabilirsiniz.
Executor
örneği almak için Executors
sınıfının Executor
nesnesi döndüren statik yöntemlerinden birini kullanın. Aşağıdaki örnekte newSingleThreadExecutor()
yöntemi kullanılarak Executor
nesnesinin nasıl oluşturulacağı gösterilmektedir:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
UrlRequest nesnesi oluşturma ve yapılandırma
Ağ isteğini oluşturmak için hedef URL'yi geçiren CronetEngine
için newUrlRequestBuilder()
yöntemini, geri çağırma sınıfınızın bir örneğini ve yürütme nesnesini çağırın.
newUrlRequestBuilder()
yöntemi, aşağıdaki örnekte gösterildiği gibi, UrlRequest
nesnesini oluşturmak için kullanabileceğiniz bir UrlRequest.Builder
nesnesi döndürür:
Kotlin
val requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", MyUrlRequestCallback(), executor ) val request: UrlRequest = requestBuilder.build()
Java
UrlRequest.Builder requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", new MyUrlRequestCallback(), executor); UrlRequest request = requestBuilder.build();
UrlRequest
örneğini yapılandırmak için Builder
sınıfını kullanabilirsiniz. Örneğin, bir öncelik veya HTTP fiili belirtebilirsiniz. Daha fazla bilgi için UrlRequest.Builder
bölümünü inceleyin.
Ağ görevini başlatmak için isteğin start()
yöntemini çağırın:
Kotlin
request.start()
Java
request.start();
Bu bölümdeki talimatları uygulayarak, Cronet'i kullanarak bir ağ isteği oluşturabilir ve gönderebilirsiniz. Ancak basitlik sağlamak amacıyla, UrlRequest.Callback
örnek uygulaması günlüğe yalnızca bir mesaj yazdırır. Aşağıdaki bölümde, yanıttan veri ayıklama ve istekteki bir hatayı tespit etme gibi daha yararlı senaryoları destekleyen bir geri çağırma uygulamasının nasıl sağlanacağı gösterilmektedir.
Ağ yanıtını işleme
start()
yöntemini çağırdıktan sonra Cronet isteğinin yaşam döngüsü başlatılır. Uygulamanız, isteği yaşam döngüsü boyunca bir geri çağırma belirterek yönetmelidir. Yaşam döngüsü hakkında daha fazla bilgi edinmek için Cronet istek yaşam döngüsü bölümüne bakın. UrlRequest.Callback
alt sınıfı oluşturup aşağıdaki yöntemleri uygulayarak geri çağırma belirtebilirsiniz:
onRedirectReceived()
Sunucu, orijinal isteğe yanıt olarak bir HTTP yönlendirme kodu yayınladığında çağrılır. Yeni hedefe yönlendirmeyi izlemek için
followRedirect()
yöntemini kullanın. Aksi takdirdecancel()
yöntemini kullanın. Aşağıdaki örnekte, yöntemin nasıl uygulanacağı gösterilmektedir:Kotlin
override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { // Determine whether you want to follow the redirect. ... if (shouldFollow) { request?.followRedirect() } else { request?.cancel() } }
Java
@Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { // Determine whether you want to follow the redirect. … if (shouldFollow) { request.followRedirect(); } else { request.cancel(); } }
onResponseStarted()
Son başlık grubu alındığında çağrılır.
onResponseStarted()
yöntemi yalnızca tüm yönlendirmeler takip edildikten sonra çağrılır. Aşağıdaki kod, yöntemin bir örneğini gösterir:Kotlin
override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { val httpStatusCode = info?.httpStatusCode if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request?.read(myBuffer) } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request?.read(myBuffer) } responseHeaders = info?.allHeaders }
Java
@Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { int httpStatusCode = info.getHttpStatusCode(); if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request.read(myBuffer); } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request.read(myBuffer); } responseHeaders = info.getAllHeaders(); }
onReadCompleted()
Yanıt gövdesinin bir bölümü okunduğunda çağrılır. Aşağıdaki kod örneğinde, yöntemin nasıl uygulanacağı ve yanıt gövdesinin nasıl çıkarılacağı gösterilmektedir:
Kotlin
override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { // The response body is available, process byteBuffer. ... // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer?.clear() request?.read(myBuffer) }
Java
@Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { // The response body is available, process byteBuffer. … // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer.clear(); request.read(myBuffer); }
onSucceeded()
Ağ isteği başarıyla tamamlandığında çağrılır. Aşağıdaki örnekte, yöntemin nasıl uygulanacağı gösterilmektedir:
Kotlin
override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { // The request has completed successfully. }
Java
@Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { // The request has completed successfully. }
onFailed()
start()
yöntemi çağrıldıktan sonra istek herhangi bir nedenle başarısız olursa çağrılır. Aşağıdaki örnekte, yöntemin nasıl uygulanacağı ve hatayla ilgili nasıl bilgi alınacağı gösterilmektedir:Kotlin
override fun onFailed(request: UrlRequest?, info: UrlResponseInfo?, error: CronetException?) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error) }
Java
@Override public void onFailed(UrlRequest request, UrlResponseInfo info, CronetException error) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error); }
onCanceled()
İstek,
cancel()
yöntemi kullanılarak iptal edildiyse çağrılır. Çağrıldıktan sonra başkaUrlRequest.Callback
sınıfı yöntemi çağrılmaz. Bir isteği işlemek üzere ayrılan kaynakları serbest bırakmak için bu yöntemi kullanabilirsiniz. Aşağıdaki örnekte, yöntemin nasıl uygulanacağı gösterilmektedir:Kotlin
override fun onCanceled(request: UrlRequest?, info: UrlResponseInfo?) { // Free resources allocated to process this request. ... }
Java
@Override public void onCanceled(UrlRequest request, UrlResponseInfo info) { // Free resources allocated to process this request. … }