Android Uygulama İçi Güncellemeler

Bir uygulama oluşturduğunuzda herkesin en son sürüme sahip olmasını ve bu sürümün getirdiği özellikleri kullanmasını istiyorsunuz. Peki bu nasıl olacak? Hangi güncelleme yöntemi daha iyi yada hangisini kullanmalısınız? Cevabını bu yazıda alacaksınız.

Hadi başlayalım.


Uygulama içi güncellemeler yalnızca Android 5.0 (API düzeyi 21) ve üstü sürümlerde çalışan cihazlarda çalışır. Play Core Kütüphanesi 1.5.0 veya üstünü kullanmanızı gerektirir. Ayrıca, uygulama içi güncellemeler yalnızca Android mobil cihazlarda, tabletlerde ve Chrome OS cihazlarında çalışan uygulamaları destekler.



Immediate Güncelleme


Bu güncelleme akışında kullanıcı uygulamayı açtığı anda tam ekran güncelleme uyarısı görür. Güncelleme uygulamanın arkaplanında yapılır ve tamamlandıktan sonra kullanıcı uygulamayı kullanmaya devam edebilir. Eğer kullanıcı güncellemeyi yapmazsa uygulamayı kullanamaz. Bu akış yalnızca güncellemenin zorunlu olduğu durumlarda kullanılmalıdır.


Görsel Referansı


Flexible Güncelleme


Bu güncelleme akışında ise uygulama normal olarak başlatılır. Eğer yeni bir sürüm mevcut ise geliştiricinin daha önceden belirlediği bir yerde Update butonu gösterilir. Kullanıcı bu butonu kullanarak güncellemeyi başlatabilir. Güncelleme arkaplanda indirilirken kullanıcı uygulamayı kullanmaya devam edebilir. Güncelleme tamamlandığında küçük bir uyarıyla kullanıcıya bildirilir. Kullanıcı “Yeniden Yükle” butonuna bastığında uygulama güncel versiyonuyla birlikte yeniden başlatılır. Ayrıca flexible güncellemede kullanıcı uygulama güncellemek zorunda değildir. No thanks butonu ile mevcut versiyonu kullanmaya devam edebilir.


Görsel Referansı



Peki bu güncellemeleri nasıl yöneteceğiz?


Projeye Başlama


Proje ile ilgili dokümanları indirmek için bu linke tıklayın. Bir sorun ile karşılaşmamak için Android Studio 3.5 ve üzeri versiyonunu kullanın.

Örnek proje şehrimizin hava durumu ile ilgili bilgileri görüntüleyen minik bir demo uygulamadır. İçerisinde kullanıcıların uygulamanın en son sürümü kullanmasını sağlayacak örnekler bulunmaktadır.


Projenin yapısını inceleyelim


İndirdiğiniz dosyayı Android Studio ile açın. Açıldıktan sonra aşağıdaki gibi bir ekran göreceksiniz.



Derleyin ve çalıştırın. Uygulama aynı zamanda sıcaklık ve rüzgar değerlerini de gösterecek.


Görsel Referansı


Ardından, projenin farklı klasörlerini ve dosyalarını inceleyelim. Soldaki gezginde gezinirken, bir dizi alt klasör ve dizin göreceksiniz:


API: Şehrinize ilişkin mevcut hava durumu bilgilerini alma için OpenWeatherMap’i kullanır.

Model: Model sınıfları, yanıt gövdesinde alınan bilgileri ayrıştırmak ve tutmak için kullanılır.

MainActivity.kt: Hava durumu talebinde bulunmak için koşulların karşılanıp karşılanmadığını kontrol etmek için kullanılır. Ayrıca tüm görünümleri günceller ve uygulama içi güncelleme mantığının yazılacağı yerdir.


OpenWeatherMap’i Yapılandırma


OpenWeatherMap den hava durumu bilgilerini istememiz icin bir API anahtarına ihtiyacımız olacak ama endişelenmeyin anahtar ücretsiz ve kullanımı bir o kadar da kolaydır.


Hesap oluşturmak için şu adımları izleyin:

  1. OpenWeatherMap sayfasına gidin ve ücretsiz bir şekilde üye olun.

  2. Ardından API anahtarları sayfasına gidin

  3. Bu sayfada size bir anahtar verilecek. Değeri unique'dir ve yeni oluşturduğunuz hesapta depolanır.



Anahtarı kopyalayın ve ardından Android Studio'ya geri dönün. API klasöründe bulunan OpenWeatherAPI kısmını açın. Boş bir sabit göreceksiniz. Anahtarı oraya yapıştırın.



Hava Durumu Verilerini Alma


Hava durumu verilerini almak için konum hizmetlerini etkinleştirin. Konum verilerinizin uygulama tarafından kullanılabilir hale gelmesi biraz zaman alabilir. Bu yüzden uygulamanın önce cihaz konumuna erişebildiğinden emin olun, aksi takdirde, aşağıdaki mesajlardan birini görürsünüz:

  • Konum izinleri verilmedi.

  • Konum mevcut değil, lütfen ayarlardan etkinleştirin.

Eğer koşulları sağladıysanız çalıştırdığınızda buna benzer bir ekran görürsünüz.



Görsel Referansı


Play Core Kütüphanesi ekleme


Uygulama içi güncellemeler, Google Play'in otomatik güncelleme seçeneğinin bir özelliğidir. Uygulamanızın en son sürümünü otomatik olarak indirip yükler. Bazen uygulama içi güncellemelerin yeterli olmayacağı senaryolar ortaya çıkabilir. Bu nedenle, yeni bir güncelleme kullanıma sunulduğunda kullanıcıları bilgilendirmek için destek sağlamanız gerekir.

Bu özelliği uygulamak için uygulamanızın aşağıdaki gereksinimleri karşılaması gerekir:

  • Cihazın en az Lollipop (API 21+) çalıştırması gerekiyor.

  • Play Core Library 1.5.0 veya daha yenisini kullanmanız gerekir .

Yazarken geçerli sürüm 1.6.4'tür , bu nedenle bu kütüphaneyi uygulamanın build.gradle'ın dependencies bölümüne eklersiniz:

Ardından "Sync Now” a tıklayın.


Güncellemeleri Kontrol Etme


Farklı türdeki güncellemelere dalmadan önce, mevcut güncellemelerin olup olmadığını öğrenmeniz gerekir.


Bunun için aşağıdaki metodu MainActivity kısmına ekleyin.


Not : Kod otomatik olarak içe aktarılmazsa IDE'nize yapıştırarak sınıfları içe aktarmak için Mac'te Option + enter tuşlarına veya PC'de alt + enter tuşlarına basın . Birden fazla paket arasından seçim yapmanız istendiğinde, com.google.android.play.core. paketini seçin.


Uygulama içi güncellemeler iki türe ayrılabilir: İmmediate ve flexible.


Her birinin ayrı güncelleme akışı vardır, bu nedenle uygulamanızın gereksinimlerine uygun olanı seçin. Google Play şu anda yeni bir sürüm için güncelleme türünü tanımlamak için destek sunmamaktadır. Bu nedenle, bu adım uygulama tarafında yapılmalıdır.


Bu öğreticide, her iki tür uygulama içi güncellemeyi de uygulayacaksınız. Biri veya diğeri arasında kolayca seçim yapabilirsiniz. MainActivity'de önce aşağıdakileri ekleyerek başlayın :


onCreate'ten sonra aşağıdakileri ekleyin


Bu, daha önce tanımlanmış sabite göre yapılması gereken güncelleme türünü doğrular



Immediate Güncellemeler Ekleme


Immediate güncelleme, uygulamanızın üstünde güncelleme kabul edilinceye veya iptal edilene kadar tüm kullanıcı etkileşimlerini engelleyen bir etkinlik görüntüler. Bu nedenle, bu tür güncelleme kritik senaryolar içindir.


Kullanıcı güncellemeyi kabul ettiğinde, güncelleme sistemi; indirmeden yüklemeye ve yeniden başlatmaya kadar olan tüm akıştan sorumlu olacaktır. Bu akış şemasında gösterildiği gibi:


Geliştiricinin bakış açısından, yalnızca güncelleme işleminin başlatılması ve kullanıcı güncellemeyi iptal ederse veya bir hata oluşursa duruma yanıt verilmesi gerekir.


Daha sonra aşağıdakileri ekleyin:


Fonksiyonun adım adım açıklaması:


1. Güncellemeye başlamadan önce Play Store'dan gelen yanıtı analiz etmek önemlidir. Güncelleme kullanılabilirliği aşağıdaki değerlerden biri olabilir:

  • DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS : Devam eden bir güncelleme olduğunda.

  • UPDATE_AVAILABLE : Yeni bir güncelleme olduğunda.

  • UPDATE_NOT_AVAILABLE : Herhangi bir güncelleme olmadığında.

  • UNKNOWN : Uygulama mağazasına bağlanırken bir sorun olduğunda.

2. Bu işleme başlamadan önce, kullanılabilir bir güncelleme veya devam eden bir güncelleme olduğunu doğrulayın.


3. Immediate türün desteklenip desteklenmediğini doğrulayın.


4. Yalnızca önceki koşullar doğruysa güncellemeyi startUpdateFlowForResult ile başlatın veya devam ettirin.

startUpdateFlowForResult 'ı çağırdıktan sonra harici bir etkinlik başlatacak bir istek kodu ayarlamanız gerekir. Bu şekilde bittiğinde, işlemin başarılı olup olmadığını kontrol edebilirsiniz.

Bildiriminden önce MainActivity'ye aşağıdaki sabiti ekleyin :


startUpdateFlowForResult 'yi AppUpdateType.IMMEDIATE ile çağırdıktan sonra, Play Core etkinliği güncellemeyi halledecek ve bittiğinde uygulamayı yeniden başlatacaktır.


Güncellemenin anlık durumunu ve ne kadar sürede tamamlanacağını gösteren bir ilerleme çubuğu görürsünüz. Uygulamayı test etmeden, flexible güncelleme akışına da bir bakalım.



Flexible Güncellemeler Ekleme


Flexible bir güncelleme, immadiate güncelleme kadar müdahaleci değildir. Kullanıcıları yeni sürüm hakkında nasıl bilgilendireceğinize siz karar verirsiniz ve üzerinde daha fazla kontrole sahip olursunuz. Hava Durumu uygulaması için bir buton kullanacağız. Aşağıdaki akış şemasının gösterdiği gibi:



handleFlexibleUpdate 'i tanımlamadan önce activity_main.xml 'de RelativeLayout içine bu iki görünümü ekleyin.



TextView güncellemenin geçerli durumunu görüntüler ve Button bu eylemi tetikler. Gördüğünüz gibi, her ikisininde görünürlüğü yok oldu. Yalnızca flexible bir güncelleme varsa görünür hale gelmelidir.


Flexible güncelleme türünün uygulanmasından sorumlu olan handleImmediateUpdate'den sonra handleFlexibleUpdate ekleyin.


Immediate güncellemelere benzer şekilde, flexible güncellemelerde de önce mevcut güncellemeler kontrol edilir. Güncelleme bulunursa, işlemi başlatmak için setUpdateAction çağrılır


Ancak, flexible güncellemelerde otomatik güncelleme akışı yoktur. Uygulamanın işlemi yerine getirmesi gerekir


Bunun için önce aşağıdaki kod satırını ekleyin:

Ardından, handleFlexibleUpdate fonksiyonundan sonra aşağıdaki kodu MainActivity kısmına ekleyin:

Adım adım kod analizi:


1. İlk olarak, kullanıcı butona dokunduğunda geri çağırmayı ayarlar. Bu eylem, 7.adımda tanımlanan güncelleme eylemini başlatır.


2. InstallStateUpdateListener sürecin her adımını uygulamaya bildirir.


3. tv_status güncelleme hakkındaki görsel bilgileri görüntüler.


4. whenBlok güncelleme akışında tüm olası durumları tanımlamaktadır.


5. Sistem .apk dosyasını indirmeyi bitirdiğinde, uygulama iki durumdan birinde olabilir:

• Ön plandaysa, kullanıcının uygulamanın yeniden başlatılabileceğini onaylaması gerekir. Bu, uygulamanın mevcut kullanımının kesintiye uğramasını önler.

• Arka plandaysa, kullanıcı yüklemeyi reddettikten sonra simge durumuna küçültür. Sistem otomatik olarak en yeni güncellemeyi yükler ve uygulama ön plana döndüğünde yeniden başlatılır.


6. Güncelleme başarıyla yüklendikten sonra dinleyicinin uygulamada kaydını tutmaya gerek yoktur. Yapılacak başka işlem yok, bu nedenle button 'u gizleyebilir ve geri arama kaydını geri alabilirsiniz.


7. Önceki dinleyiciyi kaydedin.


8. Flexible güncellemeyi başlatın.


Yükleme tamamlandığında kullanıcıya, uygulamanın en yeni sürümünün yüklenmeye hazır olduğunu bildiren bir bildirim gönderebiliriz. Bunun için yeniden başlatılması gerekiyor. SetUpdateAction fonksiyonundan sonra aşağıdakileri ekleyin.



setUpdateAction'dan sonra aşağıdaki fonksiyonu ekleyin:



Kullanıcı iletişim düğmesini(dialog button) tıkladığında uygulama yeniden başlatılır.



Kullanıcı Eylemlerini Kullanma


Bir güncellemeyi iptal etmek mümkün olduğunda, uygulamanın uygun şekilde yanıt verebilmesi için onActivityResult 'ı geçersiz kılmak ve resultCode 'u kontrol etmek önemlidir.


Bu senaryo her iki tür güncelleme için de geçerlidir. LaunchRestartDialog fonksiyonundan sonra aşağıdaki kod bloğunu ekleyin:



Burada kullanıcı işlemine bağlı olarak kullanıcıya bir iletişim kutusu göndereceksiniz:


1. Güncellemeden requestCode ile onActivityResult çağrıldığını doğrulayın. startUpdateFlowForResult – REQUEST_UPDATE ile tanımlanan kodla aynı kod olmalıdır.


2. Güncelleme başarıyla yüklendi.


3. Kullanıcı güncellemeyi iptal etti.


4. Güncelleme bilinmeyen bir nedenden dolayı başarısız oldu. Genellikle, bu Play Store'daki bir hatadır. Güncelleme işlemini yeniden başlatmayı deneyin.

Test Yapmak


Çok fazla kod yazdınız, ancak her şeyin beklendiği gibi çalıştığını nasıl test edersiniz? İdeal olarak, uygulamayı Play Store'da yayınlayıp ardından sürüm kodunu arttırıp başka bir versiyon yüklemek gerek.


Ancak bu işlem zaman alıcı olabilir, bu nedenle her şeyin beklendiği gibi çalışacağını garanti etmek için uygulamayı local olarak test etmeliyiz.


Bunun için FakeUpdateManager 'ı kullanacağız, bu her iki güncelleme türü için yapılandırılmıştır. Bu testin ne zaman çalıştırılacağını tanımlamak için BuildConfig.DEBUG kullanacağız, ancak yalnızca hata ayıklama yapılarında yürütülmesi gerektiğini unutmayın.


AppUpdateManager 'da ki checkForUpdates 'ı aşağıdaki kodla değiştiriyoruz:


Bununla, uygulama başlatıldığında Play Store’un AppUpdateManager fonksiyonunu ve yerel olarak test edildiğinde FakeAppUpdateManager fonksiyonunu kullanacağız.

setUpdateAvailable üzerindeki 2 sayısı, uygulama sürüm koduna karşılık gelir. build.gradle da tanımlanan sürüm kodunuzdan daha yüksek olduğu sürece herhangi bir sayı olabilir.

Şimdi, immediate bir güncellemeyi simüle etmek için, bu mantığı handleImmediateUpdate sonuna ekliyoruz.


Tüm akışı simule etmek için yukarıdaki çağrıları yapmak gerekir.

Sadece startUpdateFlowForResult çağrıldıktan sonra isImmediateFlowVisible true'ya döner ve güncellemenin geri kalanı test edilebilir.


Derleyin ve çalıştırın. Benzer bir ekran göreceksiniz:


Görsel Referansı


İşlem flexible tip için de aynıdır. startUpdateFlowForResult içindeki setUpdateAction kısmına aşağıdaki kodu ekleyin:



APP_UPDATE_TYPE_SUPPORTED yi AppUpdateType.FLEXIBLE ile değiştiyoruz.

Build yaptıktan sonra çalıştıralım. Aşağıdaki gibi bir ekran gelecektir.



Görsel Referansı


Güncellemeyi Başlatma


FakeUpdateManager ilk çevrimdışı testleri yapmanıza olanak tanır, ancak gerçek bir senaryoda çalıştığını görmek için uygulamanızı mağazada da yayınlayabilirsiniz.


Yayınladığınız uygulamanın, bilgisayarınızdan test etmek için kullandığınız koddan daha yüksek bir sürüm koduna ve adına sahip olması gerektiğini unutmayın.


Bunun için build.gradle dosyasını açıp aşağıdaki değerleri güncelliyoruz:


Artık uygulamanın yeni sürümünü Google Play Store'da yayınlayabiliriz.


Play Store'dan test yaparken, immediate güncellemeler için bu ekranı göreceksiniz:


Görsel Referansı


Flexible güncellemeler için bunu göreceksiniz:


Görsel Referansı


Sorunlar


Güncellemeler birden fazla sunucuya dağıtılabildiğinden, işlem biraz zaman alabilir. Sürekli testlerle en son sürüm Play Store'da önbelleğe alınabilir. Bu nedenle önbelleği temizlemeniz gerekebilir, böylece yeni bir sürüm tespit edildiğinde bir bildirim alabilirsiniz.


Önbelleği aşağıdaki yöntem ile silebilirsiniz:

  • Yerel Ayarlar ▸ Uygulamalar ▸ Google Play Store ▸ Depolama ve önbellek ▸ Önbelleği temizle


Ayrıca, uygulama Google Play'in uygulama imzalamasını kullanıyorsa, yükleme aşamasında sık yaşanan bir sorun mevcuttur: INSTALL_FAILED_UPDATE_INCOMPATIBLE

Bunun nedeni aynı anahtarla imzalı bir apk'nın cihazda zaten yüklü olması kaynaklıdır. Güvenlik önemli nedeniyle çapraz doğrulamanın başarısız olması nedeniyle bu hata alınır.


Not : Bu senaryoyu ancak Logcat'teki mesajları analiz ederek tespit etmek mümkündür. 


Çözümü için: https://stackoverflow.com/questions/11891848/install-failed-update-incompatible-when-i-try-to-install-compiled-apk-on-device


Artık, uygulamanızın bir sonraki açılışında güncelleme ekranını tekrar görebiliriz.


Tebrikler


Kullanıcılarınızı güncellemeler hakkında bilgilendirmek için yeni bir teknik uygulamış olduk. Artık, kullanıcılar uygulamanızın en son sürümü kullanabilirler. 


Github : https://github.com/yusufkaran/Weather_app

Kaynaklar ve referanlar:

https://developer.android.com/guide/playcore/in-app-updates

https://www.raywenderlich.com


#android #playstore #update #immediate #flexible


0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın