App Center dağıtma – Android uygulama Içi güncelleştirmeler
App Center dağıtım, kullanıcılarınızın App Center aracılığıyla dağıtırken uygulamanın yeni bir sürümünü yüklemesini sağlar. Uygulamanın yeni bir sürümü mevcut olduğunda SDK, kullanıcılara yeni sürümü indirmek veya erteleyemek için bir güncelleştirme iletişim kutusu sunacaktır. Güncelleştirmeyi seçtikten sonra SDK, uygulamanızı güncelleştirmeye başlar.
Uyarı
Google Play, çalışma zamanında kullanılmasa bile, uygulama içi güncelleştirme kodunu kötü amaçlı davranış olarak değerlendirir. Uygulamanızı Google Play göndermeden önce dağıtım SDK 'sının bir türevini Bu bölümde yönlendirilmek veya uygulama içi güncelleştirme kodu içeren dağıtım SDK 'sını tamamen kaldırmak için kullanın. Bunun başarısız olması, Google Play uygulamanın uyumsuzluk ve kaldırılmasına neden olabilir.
Not
Otomatik UI testleri çalıştırıyorsanız, etkin uygulama güncelleştirmeleri, App Center arka uca kimlik doğrulamaya çalıştıklarında otomatik UI testlerinizi engeller. UI testleriniz için App Center dağıtmayı etkinleştirmememiz önerilir.
Uygulamanıza uygulama içi güncelleştirmeler ekleyin
Uygulamanızda SDK 'Yı ayarlamadıysanız ve başlatmadıysanız, kullanmaya başlama bölümünü izleyin.
1. App Center dağıtım modülünü ekleyin
App Center SDK modüler bir yaklaşım ile tasarlanmıştır. bir geliştiricinin yalnızca ilgilendiğiniz hizmetlerin modüllerini tümleştirmeleri gerekir.
Projenin uygulama düzeyi Build. Gradle dosyasını açın
app/build.gradleve sonra aşağıdaki satırları ekleyinapply plugin.dependencies { def appCenterSdkVersion = '4.1.0' implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" }Not
Android Gradle eklentisinin sürümü 3.0.0 'den düşükse, uygulamayı Derle ile değiştirmeniz gerekir.
Build. Gradle dosyanızı kaydedin ve Android Studio bir Gradle eşitlemesini tetiklediğinizden emin olun.
Güncelleştirmeleri indirmek için DownloadManager kullanılır. App Center SDK, güvenliği artırmak için TLS 1.2'yi zorlar.
2. Dağıtımı App Center Başlat
Bu App Center kullanmak için kullanmak istediğiniz modülleri kabul edersiniz. Varsayılan olarak hiçbir modül başlamaz ve SDK'yı başlatmanız için bunların her biri açıkça çağrılması gerekir.
Dağıt hizmetini başlatmak için AppCenter.start() Yönteminize App Center ekleyin.
AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)
Yukarıdaki kod örneğinde yerine {Your App Secret} App Secret'inizi değiştirilebilir. Android Studio yöntemine sınıfına bir başvuru eklerken gerekli içeri aktarma deyimini otomatik olarak önerir, ancak sınıf adlarının tanınmayıldığına ilişkin bir hata görüyorsanız, etkinlik sınıfınıza aşağıdaki satırları içeri aktarma Distribute start() deyimlerine ekleyin:
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute
Derlemenizi Google Play hazırlama
Google Play çalışma zamanında kullanılmasa bile uygulama güncelleştirme kodunu kötü amaçlı bir davranış olarak kabul ediyor. Bu bölümdeki dağıtım SDK'sı çeşitlesini kullanın veya uygulama güncelleştirme kodunu içeren SDK'yı Dağıt'ı uygulamanıza göndermeden önce tamamen Google Play. Bunun yapilamamasi, yetersizlik ve uygulamanın uygulamanın Google Play. Bunu kolaylaştırmak için saplama api'leriyle SDK'App Center dağıtın sürümünü sağlaruz, bu nedenle sizin için tek değişiklik bağımlılık değiştirme işlemidir.
Projenin uygulama düzeyi build.gradle dosyasını ()
app/build.gradleaçın.Ürün çeşitlemeleri ekleyerek derleme çeşitlerini yapılandırma:
android { flavorDimensions "distribute" productFlavors { appCenter { dimension "distribute" } googlePlay { dimension "distribute" } } }Ürün özelliğine bağlı olarak farklı bağımlılıkları tüketmek için bağımlılıklar bloğunda değişiklik yapmak:
dependencies { def appCenterSdkVersion = "3.3.0" appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}" }build.gradle dosyanızı kaydedin ve bir Gradle eşitlemesi tetiklendiğinden emin Android Studio.
Derleme varyantını, araç pencere çubuğunda > Değişken Seç açılan menüsünden veya Derleme Çeşitlemeleri'den değiştirebilirsiniz.
Derleme çeşitlemelerini yapılandırma hakkında daha fazla bilgi için Android belgelerine bakın.
Özel dağıtım grubu kullanma
Varsayılan olarak, Dağıt bir genel dağıtım grubu kullanır. Özel dağıtım grubu kullanmak için API aracılığıyla açıkça ayarlamamız setUpdateTrack gerekir.
Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)
Not
UpdateTrack.PUBLIC varsayılan değerdir. Bu yöntem yalnızca yöntem çağrısı öncesinde AppCenter.start çağrıl olabilir. Uygulama işlemi yeniden başlatıldığında güncelleştirme izlemesi değişiklikleri kalıcı olmaz ve bu nedenle yöntem her zaman çağrılmadan önce çağrılmasa varsayılan olarak AppCenter.start genel olur.
Uygulama ön plandayken (ve Distribute.setUpdateTrack(UpdateTrack.PRIVATE); AppCenter.start sonrasında) kullanıcının kimliğini doğrulamak için bir tarayıcı penceresi açılır. Sonraki tüm güncelleştirme denetimleri özel yolda en son sürümü alır.
Bir kullanıcı özel yolda ise, bu, başarılı kimlik doğrulamasından sonra üyesi olduğu tüm özel dağıtım gruplarından en son sürümü al anlamına gelir. Bir kullanıcı genel yolda ise, herhangi bir genel dağıtım grubundan en son sürümü elde etmek anlamına gelir.
Güncelleştirme için Otomatik Denetimi Devre Dışı Bırakma
Varsayılan olarak, SDK yeni sürümler için otomatik olarak denetler:
- Uygulama başlatıldığında.
- Uygulama arka plana alındıktan sonra ön plana geldiğinde.
- Daha önce devre dışı bırakılmışsa Dağıt modülünü etkinleştiriyorsanız.
Yeni sürümler el ile kontrol etmek için güncelleştirme için otomatik denetimi devre dışı ekleyebilirsiniz. Bunu yapmak için SDK başlamadan önce aşağıdaki yöntemi çağırabilirsiniz:
Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()
Not
Bu yöntem, yöntem çağrısının öncesinde AppCenter.start çağrılmalı.
Ardından, aşağıdaki checkForUpdate bölümde açıklanan API'yi kullanabilirsiniz.
Güncelleştirmeyi El ile Denetleme
Distribute.checkForUpdate();
Distribute.checkForUpdate()
Bu, yeni bir App Center durumunda bir güncelleştirme iletişim kutusu görüntülemek için App Center'a bir istek gönderir.
Not
Güncelleştirme çağrısı için el ile denetim, otomatik güncelleştirmeler etkinleştirildiğinde bile çalışır. Başka bir denetim zaten yapılıyorsa, el ile güncelleştirme denetimi yoksayılır. Kullanıcı güncelleştirmeleri ertelendiğinde, güncelleştirme için el ile denetim işlenmeyecek (en son sürüm zorunlu bir güncelleştirme değilse).
Uygulama içi güncelleştirme iletişim kutusunu özelleştirme veya yerelleştirme
1. metni özelleştirme veya yerelleştirme
Güncelleştirme iletişim kutusunda görüntülenecek metni değiştirmek veya yerelleştirmek istiyorsanız kendi kaynak dizelerinizi kolayca sağlayabilirsiniz. Bu kaynak dosyasındakidize dosyalarına bakın. Aynı dize adını/anahtarını kullanın ve kendi uygulama kaynak dosyalarınızda iletişim kutusunda yansıtılacak yerelleştirilmiş değeri belirtin.
2. güncelleştirme iletişim kutusunu özelleştirme
Arabirimini uygulayarak varsayılan güncelleştirme iletişim kutusunun görünümünü özelleştirebilirsiniz DistributeListener . Aşağıdaki örnekte gösterildiği gibi çağrılmadan önce dinleyiciyi kaydetmeniz gerekir AppCenter.start :
Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)
SDK iletişim kutusunun yerine özel bir tane olan dinleyici uygulamasına bir örnek aşağıda verilmiştir:
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.net.Uri;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.distribute.DistributeListener;
import com.microsoft.appcenter.distribute.ReleaseDetails;
import com.microsoft.appcenter.distribute.UpdateAction;
public class MyDistributeListener implements DistributeListener {
@Override
public boolean onReleaseAvailable(Activity activity, ReleaseDetails releaseDetails) {
// Look at releaseDetails public methods to get version information, release notes text or release notes URL
String versionName = releaseDetails.getShortVersion();
int versionCode = releaseDetails.getVersion();
String releaseNotes = releaseDetails.getReleaseNotes();
Uri releaseNotesUrl = releaseDetails.getReleaseNotesUrl();
// Build our own dialog title and message
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setTitle("Version " + versionName + " available!"); // you should use a string resource instead, this is just a simple example
dialogBuilder.setMessage(releaseNotes);
// Mimic default SDK buttons
dialogBuilder.setPositiveButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.UPDATE);
}
});
// We can postpone the release only if the update isn't mandatory
if (!releaseDetails.isMandatoryUpdate()) {
dialogBuilder.setNegativeButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
}
});
}
dialogBuilder.setCancelable(false); // if it's cancelable you should map cancel to postpone, but only for optional updates
dialogBuilder.create().show();
// Return true if you're using your own dialog, false otherwise
return true;
}
@Override
public void onNoReleaseAvailable(Activity activity) {
Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show();
}
}
import android.app.Activity
import android.app.AlertDialog
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails
import com.microsoft.appcenter.distribute.UpdateAction
class MyDistributeListener : DistributeListener {
override fun onReleaseAvailable(activity: Activity, releaseDetails: ReleaseDetails): Boolean {
// Look at releaseDetails public methods to get version information, release notes text or release notes URL
val versionName = releaseDetails.shortVersion
val versionCode = releaseDetails.version
val releaseNotes = releaseDetails.releaseNotes
val releaseNotesUrl = releaseDetails.releaseNotesUrl
// Build our own dialog title and message
val dialogBuilder = AlertDialog.Builder(activity)
dialogBuilder.setTitle("Version $versionName available!") // you should use a string resource instead, this is just a simple example
dialogBuilder.setMessage(releaseNotes)
// Mimic default SDK buttons
dialogBuilder.setPositiveButton(
com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download
) { dialog, which ->
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.UPDATE)
}
// We can postpone the release only if the update isn't mandatory
if (!releaseDetails.isMandatoryUpdate) {
dialogBuilder.setNegativeButton(
com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone
) { dialog, which ->
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.POSTPONE)
}
}
dialogBuilder.setCancelable(false) // if it's cancelable you should map cancel to postpone, but only for optional updates
dialogBuilder.create().show()
// Return true if you're using your own dialog, false otherwise
return true
}
override fun onNoReleaseAvailable(activity: Activity) {
Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show()
}
}
Örnekte gösterildiği gibi, Distribute.notifyUpdateAction(UpdateAction.UPDATE); veya dinleyiciniz döndürüyorsa ya da çağrısı yapmanız gerekir Distribute.notifyUpdateAction(UpdateAction.POSTPONE); true .
Çağrı yapmazsanız notifyUpdateAction , geri arama her etkinlik değişikliğine yinelenir.
Kullanıcı eylemi SDK 'ya bildirilmeye başlamadan önce etkinlik değişirse, dinleyici aynı sürümle yeniden çağrılabilir.
Bu davranış, aşağıdaki senaryoları karşılamak için gereklidir:
- Uygulamanız arka plana gönderilir ( giriş'e basmak gibi), sonra farklı bir etkinlikte sürdürülür.
- Aktivitenizi uygulamadan çıkmadan başka bir uygulama tarafından ele alınmıştır (bazı bildirimlere tıklanması gibi).
- Benzer senaryolar.
Bu durumda, iletişim kutusunu barındıran etkinlik Kullanıcı etkileşimi olmadan değiştirilebilir. Bu nedenle, SDK, özel iletişim kutusunu geri yükleyebilmeniz için dinleyiciyi yeniden çağırır.
SDK, güncelleştirmeleri denetlediğinde ve şu anda kullanılandan daha yeni bir güncelleştirme bulmazsa, bir onNoReleaseAvailable DistributeListener arabirim geri çağırması çağrılır. Bu, bu tür senaryolarda özel kod yürütmenizi sağlar. Yukarıdaki örnekte, güncelleştirme bulunamadıken nasıl bir güncelleştirmenin görüntüleniyor olduğu gösterilir.
Çalışma zamanında Dağıt'App Center etkinleştirme veya devre dışı bırakma
Çalışma zamanında Dağıt'ı App Center ve devre dışı ağlayabilirsiniz. Bunu devre dışı bıraksanız da SDK herhangi bir uygulama güncelleştirme işlevi sağlamaz, ancak hizmeti App Center kullanabilirsiniz.
Distribute.setEnabled(false);
Distribute.setEnabled(false)
Dağıt'App Center etkinleştirmek için aynı API'yi kullanın ancak parametre true olarak geçişin.
Distribute.setEnabled(true);
Distribute.setEnabled(true)
Durum, uygulama başlatan tüm cihaz depolamalarında kalıcıdır.
Bu API zaman uyumsuz bir işlemdir, bu konuda daha fazla bilgi için App Center API'ler kılavuzumuza bakabilirsiniz.
Not
Bu yöntem yalnızca başlatıldıktan Distribute sonra kullanılmalıdır.
Dağıt'App Center etkin olup değildir
Ayrıca Dağıt'ın etkin App Center olmadığını da kontrol edin:
Distribute.isEnabled();
Distribute.isEnabled()
Bu API zaman uyumsuz bir işlemdir, bu konuda daha fazla bilgi için App Center API'ler kılavuzumuza bakabilirsiniz.
Not
Bu yöntem yalnızca başlatıldıktan Distribute sonra kullanılmalıdır, her zaman başlamadan false önce geri döner.
Hata ayıklama derlemeleri için uygulama içinde güncelleştirmeleri etkinleştirme
Varsayılan olarak App Center sürüm derlemeleri için uygulama güncelleştirmelerini sağlar.
Hata ayıklama derlemeleri içinde uygulama içinde güncelleştirmeleri etkinleştirmek için önce aşağıdaki yöntemi çağrısı AppCenter.start yapın:
Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)
Not
Bu yöntem yalnızca hata ayıklama derlemelerini etkiler ve yayın derlemelerini etkilemez.
Hata ayıklama derlemesi bayrağının (genellikle önceden tanımlanmış hata ayıklama derleme çeşitlemeleri tarafından otomatik olarak android:debuggable true ayarlanır) olarak ayarlanmasını sağlar. Aksi takdirde, bu bir yayın derlemesidir.
Uygulama güncelleştirmeleri nasıl çalışır?
Not
Uygulama güncelleştirmelerinin çalışması için bağlantıdan bir uygulama derlemesi indirilir. Bir IDE'den veya el ile yüklenirse çalışmaz.
Uygulama içi güncelleştirmeler özelliği aşağıdaki gibi çalışmaktadır:
Bu özellik yalnızca App Center dağıtım hizmeti kullanılarak dağıtılan yayın derlemeleri (varsayılan olarak) ile birlikte kullanılabilir.
SDK 'yı tümleştirdikten ve App Center sürümüne yükledikten sonra, söz konusu dağıtım grubundaki kullanıcılar bir e-posta aracılığıyla yeni sürüm için bilgilendirilir.
Her Kullanıcı bağlantıyı e-postalarıyla açtığında uygulama cihazlarına yüklenir. Yükleme için e-posta bağlantısını kullanmaları önemlidir; dışarıdan yüklemeyi desteklemiyoruz. Bir uygulama bağlantıdan indirildiyse, SDK daha sonra güncelleştirmeleri denetlemek için tanımlama bilgilerinden önemli bilgileri kaydeder, aksi takdirde SDK bu anahtar bilgilerine sahip değildir.
Uygulama parçayı özel olarak ayarlarsa, kullanıcının kimliğini doğrulamak ve uygulama içi güncelleştirmeleri etkinleştirmek için bir tarayıcı açılır. Tarayıcı, genel izlemeye geri dönerek ve daha sonra tekrar özel 'e geri dönürken bile geçerli kaldığı sürece yeniden açılmaz. Tarayıcı kimlik doğrulaması başarılı olursa, Kullanıcı uygulamaya otomatik olarak yeniden yönlendirilir. İzleme genel ise (varsayılan), sonraki adım doğrudan gerçekleşir.
Uygulamanın yeni bir sürümü, kullanıcılardan uygulamanızı güncelleştirmesini isteyen uygulama içi güncelleştirme iletişim kutusunu gösterir:
- veya daha yüksek bir değeri
versionCode - eşittir değeri,
versionCodeancak farklı bir değeriversionName.
- veya daha yüksek bir değeri
İpucu
Aynı APK 'yı ikinci kez karşıya yüklerseniz, sürümler özdeş olduğu için iletişim kutusu görünmez.
Uygulama içi güncelleştirmelerde Nasıl yaparım? test edilsin mi?
Uygulama içi güncelleştirmeleri test etmek ve sürüm numaralarını her seferinde artırarak, sürüm yapılarını (App Center SDK 'nın dağıtım modülünü kullanan) App Center portalına yüklemeniz gerekir.
- Henüz yapmadıysanız App Center portalında uygulamanızı oluşturun.
- Yeni bir dağıtım grubu oluşturun ve bunu adlandırın, bu sayede uygulama içi güncelleştirme özelliğinin test edilmesi gerektiğini anlayabilmenizi sağlayabilirsiniz.
- Kendinizi (veya uygulama içi güncelleştirme özelliğinin testine dahil etmek istediğiniz tüm kişileri) ekleyin. Bunun için, uygulamanın web üzerinde kullanılmadan yeni veya atılan bir e-posta App Center. Bu, deneyiminizin gerçek testçilerin deneyimine yakın bir deneyim yaşamanızı sağlar.
- Dağıt'a ve yukarıda açıklandığı gibi kurulum mantığını içeren App Center yeni bir derleme oluşturun. Grup özelse, setUpdateTrack API'sini kullanmaya başlamadan önce özel uygulama içinde güncelleştirme izlemesini ayarlamayı unutmayın.
- Portalda Yeni sürümü dağıt düğmesine tıklayın ve uygulama derlemenizi karşıya yükleyin.
- Karşıya yükleme tamamlandığında, Sonraki'ye tıklayın ve bu uygulama dağıtımının Hedefi olarak oluşturduğunuz Dağıtım grubunu seçin.
- Dağıtımı gözden geçirin ve derlemeyi uygulama içinde test grubunuzla dağıtın.
- Bu gruptaki kişiler, uygulamayı test etmek için bir davet alır. Daveti kabul eden kullanıcı, uygulamayı mobil cihazlarından App Center Portal'dan indirebilir. Uygulama içinde güncelleştirmeler yüklendikten sonra uygulama içinde güncelleştirmeleri test etmeye hazırsınızdır.
- Uygulamanın
versionCodeçarpması. - Uygulamanın yayın sürümünü derleme ve önceki adımda olduğu gibi uygulamanın yeni bir derlemesi yükleme ve bunu daha önce oluşturduğunuz Dağıtım Grubu'nda dağıtma. Uygulama bir sonraki başlatıldığında Dağıtım Grubu üyelerinden yeni bir sürüm istenir.
İpucu
Dağıtım Grupları vb. hakkında daha ayrıntılı bilgi için App Center Dağıtım'ın nasıl kullanılmasına ilişkin bilgilere göz atabilirsiniz. Herhangi bir kod eklemeden uygulamanın yeni bir sürümünü dağıtmak için App Center Dağıt'ın kullanılasa da, App Center Dağıt'ın uygulama içinde güncelleştirme deneyimi elde ederken testçiler ve kullanıcılar için daha sorunsuz bir deneyimle sonuçlandırabilirsiniz.