CodePush ile Mobil Uygulamanızı Anında Güncelleyin
Mobil uygulama geliştiriciler, uygulamalarını uygulama mağazalarında(store) yayınlamanın ve güncellemenin zorlu bir süreç olduğunu iyi bilirler. Başvuru yaptıktan sonra duruma göre Google Play’de birkaç saat, App Store’da birkaç gün denecek süreler sonrasında yaptığınız güncelleme yayına alınır. Bu yazıda tam olarak bu sorunun çözümüne yönelik bir bulut servisi olan CodePush‘u anlatacağım.
Eğer React Natvie veya Cordova gibi hibrit uygulamalar geliştiriyorsanız, CodePush sizin için uygulamanızın kaynak kodunu sunucuda tutuyor ve güncelleme gerçekleştireceğiniz zaman kodunuzun sadece değişen (JS, HTML, CSS ve image gibi) kısımları istemcilere ileterek güncellemeyi gerçekleştiriyor. Bu sayedede kullanıcıların karşılaştıkları sorunlara anında müdahale etmeyi veya geliştirilen küçük uygulama özelliklerini store başvurusu yapmadan kullanıcılara iletmeyi sağlıyor.
CodePush’un komut satırından nasıl kullanıldığını, uygulamaya nasıl dahil edileceğini ve güncellemelerin nasıl yayımlanacağına örnekler eşliğinde bakalım.
CodePush CLI
CodePush hesabınızı komut satırından yönetebilmeniz için öncelikle NodeJS temelli CLI aracını edinmeniz gerekiyor. Aşağıdaki komutu girerek yükleyelim:
npm install -g code-push-cli
Not: OSX ve Linux ortamında sudo
ile çalıştırılması gerekmektedir.
CodePush hesabı oluşturma
Herhangi bir güncelleme yayınlamadan önce CudePush ile ilişkili bir hesap oluşturmak gerekiyor. Bunu gerçekleştirmek için aşağıdaki komutu yazıp, tarayıcıda GitHub veya Microsoft hesabınız ile giriş yapmanız gerekiyor
code-push register
Komutu yazdıktan sonra tarayıcıda otomatik olarak aşağıdaki gibi bir sayfa açılacaktır. Burada GitHub, Outlook veya Exchange hesaplarınızı kullanabilmeniz için ilgili butona tıklamanız gerekmektedir:
Sonrasında eğer Outlook hesabınızı bağlamayı seçtiyseniz, aşağıdaki şekilde izin ekranı görüntülenecektir.
İlgili izni verdikten sonra CodePush’un uygulamanıza dahil edileceği gizli erişim anahtarınız görüntülenecektir. Bunu kopyalayalım ve komut satırındaki alana yapıştıralım
Artık bizim de bir CodePush hesabımız bulunuyor. Şimdi CodePush servisine bir uygulama nasıl eklenir ona bakalım.
CodePush’a uygulama ekleme
Uygulamamız için bir isim belirleyelim ve aşağıdaki komutu girerek uygulamamızı CodePush servisine kayıt edelim:
code-push app add FilmUygulamasi
Burada Production
ve Staging
isminde iki adet deployment key’imiz oluşturulmuş durumda. Şimdilik bunları bir yere kaydedelim, daha sonra ihtiyacımız olacak.
Mobil uygulamanın CodePush ile entegre edilmesi
CodePush’un React Native ve Cordova için ayrı ayrı entegrasyon süreçleri var. Bu bölümde Cordova projesi ile olan entegrasyondan bahsedeceğim. React Natvie için ise CodePush’un sitesine bakabilirsiniz.
Cordova projesinde CodePush ile ilgili plugin’i projemize dahil etmemiz gerekiyor. Aşağıdaki komutu çalıştıralım ve CodePush plug’inini ve ilgili bağımlı olduğu diğer plugin’leri indirelim:
cordova plugin add cordova-plugin-code-push@latest
Plugin indikten sonra, CodePush’un uygulamamızı tanıyabilmesi için önceki adımda oluşturduğumuz deployment key’lericonfig.xml
dosyasındaki android ve ios platformları için ayrı ayrı eklememiz gerekiyor:
<platform name="android">
<preference name="CodePushDeploymentKey" value="ANDROID-DEPLOYMENT-KEY'İNİZ" />
</platform>
<platform name="ios">
<preference name="CodePushDeploymentKey" value="IOS-DEPLOYMENT-KEY'İNİZ" />
</platform>
Uygulamamızın CodePush sunucusu ile iletişim sağlayabilmesi için index.html’deki CSP meta etiketine https://codepush.azurewebsites.net adresini aşağıdaki şekilde eklememiz gerekiyor:
<meta http-equiv="Content-Security-Policy" content="default-src https://codepush.azurewebsites.net" ... />
Üstteki ilgili ayarları yaptıktan sonra CodePush plugin’inin JavaScript kodlarımız ile entegrasyonu için hazırız demektir.
CodePush plugin’inin kullanımı
Plugin’i kullanımından öncelikle aşağıdaki ilkeleri takip etmemiz gerekiyor:
- Ne zaman ve hangi sıklıkla güncelleme kontrolü yapılacak? (Örn: uygulama başlangıcında, ayarlar sayfasındaki bir butona tıklandığında, belirli süre aralıklarla kontrol edilerek yapılması)
- Güncelleme mevcut olduğunda kullanıcı bilgilendirilecek mi? Güncellemelerin yüklenmesinin en kolay yolu uygulamamızın
deviceready
metoduna aşağıdaki kodu eklememizle gerçekleşir:
codePush.sync();
Bu şekilde, bir güncelleme mevcut olduğunda arka planda sessizce ilgili güncelleme indirilir ve kullanıcı uygulamayı tekrar açtığında yüklenir. Bu sayede kullanıcıyı irite etmeyen bir güncelleme ortamı oluşturulmuş olur. Eğer güncelleme kritik ve zorunlu olmalı ise son kullanıcının güncellemeyi olası en yakın zamanda alabilmesini sağlamak için derhal yüklenmesi gerekmektedir.
Eğer güncelleme kontrollerinin daha çabuk yapılmasını istersek, aşağıdaki gibi bir kodu (veya benzerini) ekleyerek, uygulamamız her defasında arkaplandan ön plana alındığında sync()
fonksiyonunun çalışmasını sağlamış oluruz.
document.addEventListener("resume", function () {
codePush.sync();
});
Aktif olarak bir yükleme diyaloğu gösterme istiyorsanız sync
metodunun API dokümanını inceleyebilirsiniz.
Not: Apple geliştirici sözleşmesi, JavaScript ve diğer uygulama dosyalarının OTA güncellemelerine izin verse de, bir güncelleme diyaloğunun gösterilmesi, Apple’ın ilgili kullanım politikasına karşı bir kullanımdır. Bu nedenden dolayı AppStore’da yayımlanacak uygulamalarda uygulama sync edilirken güncelleme diyaloğunun gösterilmemesi önerilir. Google Play ve diğer kurum içi uygulamalarda diyalog gösterimini etkinleştirebilir veya özelleştirebilirsiniz.
Güncellemelerin yayımlanması
Uygulamayı yukarıdaki yönergelere göre yapılandırıp kullanıcılarımızla paylaştığımızı ve birkaç kod değişikliği yaptığımızı farzedelim. Artık güncellemenin vakti gelmiş demektir ve bunu yapmanın en kolay yolu CodePush CLI’daki release-cordova
komutunun kullanılması ile sağlanır. Bu sayede CodePush sunucusuna gönderilecek değişiklik için ilgili hazırlıklar ve güncelleme yapılmış olur.
Komut en basit haliyle iki parametre içerir; CodePush’a kaydettiğimiz uygulama adı ve güncellemeyi gerçekleştireceğimiz platformun ismi (ios veya android).
code-push release-cordova <uygulamaAdi> <platform>
code-push release-cordova FilmUygulamasi ios
code-push release-cordova FilmUygulamasi android
Not: CodePush’a güncelleme yayımlarken, uygulamamızın config.xml’deki versiyon numarasını değiştirmeye gerek yoktur. Zira, uygulamamızı mağazaya dahi göndermediğimiz için veriyon numarasında bir değişiklik oluşmayacaktır. Versiyon numarası sadece Cordova veya uygulamamızın ilişkili olduğu bir plugin yükseltildiğinde, AppStore/Google Play’e uygulamamızın güncellemesini göndermemiz gerekeceği için değiştirilmelidir. Her güncelleme yayınladığımızda ilgili güncellemelerin kaydının sağlıklı olarak tutulabilmesi için CodePush otomatik olarak bir versiyon etiketi üretir (Örn: v3
).
release-cordova
komutu, bir Cordova uygulamasının şablonunu ve tam olarak hangi dosyaların güncellemeye dahil edileceğini bildiğinden dolayı basit bir iş akışı sunar. Buna ek olarak daha esnek bir şekilde güncelleme stratejilerinin gerçekleştirilmesi için, release-cordova
komutu kullanıcılarınıza güncellemenin dağıtımının farklı varyasyonlarda gerçekleştirilmesine yönelik muhtelif parametreler sunar (Örn: hangi binary versiyonlar bu güncelleme ile ilişkilidir? Bu güncelleme zorunlu olarak görülmeli midir?):
# Değişim günlüğü ile birlikte zorunlu bir güncellemenin gerçekleştirimini sağlar
code-push release-cordova FilmUygulamasi-iOS ios -m --description "AppBar rengi değiştirildi. "
# Kullanıcıların 4'te birine geliştirim güncellemesinin yayımlanmasını sağlar.
code-push release-cordova FilmUygulamasi-Android android --rollout 25%
# config.xml dosyasında belirtilen versiyon numarası ile ilişkili olarak
# 1.1.* versiyonuna sahip kullanıcılar için güncelleme yayınlar.
code-push release-cordova FilmUygulamasi-Android android --targetBinaryVersion "~1.1.0"
# Güncellemeyi yayınla fakat deaktif olarak işaretle,
# böylece hiçbir kullanıcı henüz güncellemeyi indirmesin
code-push release-cordova FilmUygulamasi-ios ios -x
Uygulamamızın güncelleştirmesini yayımladık. Bir sonraki yazımızda görüşmek dileğiyle. Sağlıcakla kalın.
3 Comments
hasan
7 Ocak 2018 at 12:53hocam merhaba,
Github sectigimiz zaman kaynak kodlarini insanlardan gizleyerek guncelleme gondermek mumkunmudur?
Zafer Ayan
15 Ocak 2018 at 23:51Merhaba Hasan,
Github’ı seçtiğinde o sadece senin için CodePush hesabına girmek için bir ön ayak oluyor. “Log in with Facebook”‘un “Login with Github” hali gibi düşünebilirsin. Kodunu github’da paylaşmana gerek yok yerel bilgisayarından CodePush’a gönderim yapabilirsin.
Değerli yorumun için teşekkürler,
Adnan çakaltepe
17 Kasım 2018 at 18:48Muhteşem bir yazı olmuş arkadaşım. Böyle yararlı Türkçe makaleleri gördüğümde mutlu oluyorum. Yabancılar bilgisini paylaşırken bizlerin kapalı kalmasına üzülüyorum. Eline sağlık.