Aracılığıyla paylaş


App Center Distribute – Android Uygulama içi güncelleştirmeleri

Önemli

Visual Studio App Center, 30 Haziran 2026'ya kadar desteklenmeye devam edecek Analiz ve Tanılama özellikleri dışında 31 Mart 2025'te kullanımdan kaldırılmıştır. Daha fazla bilgi edinin.

App Center Distribute, app Center aracılığıyla dağıttığınızda kullanıcılarınızın uygulamanın yeni bir sürümünü yüklemesine olanak verir. Uygulamanın yeni bir sürümü kullanılabilir durumdaysa SDK, kullanıcılara yeni sürümü indirmeleri veya ertelemeleri için bir güncelleştirme iletişim kutusu sunar. Güncelleştirmeyi seçtikten sonra SDK uygulamanızı güncelleştirmeye başlar.

Uyarı

Google Play, uygulama içi güncelleştirme kodunu çalışma zamanında kullanılmasa bile kötü amaçlı davranış olarak kabul eder. Uygulamanızı Google Play'e göndermeden önce , bu bölümde belirtildiği gibi SDK'nın bir değişkenini kullanın veya uygulama içi güncelleştirme kodu içeren Distribute SDK'sını tamamen kaldırın. Bunun yapılmaması, uygulamanın Google Play'den uyumsuzluğuna ve kaldırılmasına neden olabilir.

Uyarı

Otomatik kullanıcı arabirimi testleri çalıştırıyorsanız, uygulama içi güncelleştirmeler App Center arka uçta kimlik doğrulaması yapmaya çalışacakları için otomatik kullanıcı arabirimi testlerinizi engeller. Ui testleriniz için App Center Distribute'ı etkinleştirmemenizi öneririz.

Uygulamanıza uygulama içi güncelleştirmeler ekleme

Henüz uygulamanızda SDK'yı ayarlamadıysanız ve başlatmadıysanız Başlarken bölümünü izleyin.

1. App Center Distribute modülünü ekleme

App Center SDK modüler bir yaklaşımla tasarlanmıştır; bir geliştiricinin yalnızca ilgilendiği hizmetlerin modüllerini tümleştirmesi gerekir.

  1. Projenin uygulama düzeyi build.gradle dosyasını (app/build.gradle) açın ve sonra apply pluginaşağıdaki satırları ekleyin.

    dependencies {
       def appCenterSdkVersion = '5.0.6'
       implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
    }
    

    Uyarı

    Android Gradle Plugin sürümünüz 3.0.0'dan düşükse implementationcompile ile değiştirmeniz gerekir.

  2. build.gradle dosyanızı kaydedin ve Android Studio'da bir Gradle eşitlemesi tetiklediğinize emin olun.

  3. DownloadManager güncelleştirmeleri indirmek için kullanılır. App Center SDK'sı güvenliği geliştirmek için TLS 1.2'yi zorunlu kıldı.

2. App Center Dağıtımını Başlat

App Center'ı kullanmak için, kullanmak istediğiniz modülleri kabul edin. Varsayılan olarak hiçbir modül başlatılmaz ve SDK'yı başlatırken bunların her birini açıkça çağırmanız gerekir.

App Center Distribute hizmetini başlatmak için Yönteminize AppCenter.start() Distribute sınıfını ekleyin.

AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)

Kod örneğindeki {Your App Secret}'yi uygulama gizli anahtarınızla değiştirdiğinizden emin olun. Android Studio'ya sınıf Distribute başvurusunu start() yöntemine eklediğinizde gerekli içeri aktarma deyimini otomatik olarak önerir. Ancak sınıf adlarının tanınmadığını belirten bir hata varsa, etkinlik sınıfınızdaki içeri aktarma deyimlerine aşağıdaki satırları ekleyin.

import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute

Uyarı

Android 10 veya üzeri sürümlerde arka planda başlatma etkinliği kısıtlamaları vardır. Etkinlikleri arka planda başlatmayla ilgili kısıtlamalarla ilgili makaleye bakın.

Uyarı

Android 10 (Go sürümü) üzerinde çalışan uygulamalar SYSTEM_ALERT_WINDOW izni alamaz. Go cihazlarında SYSTEM_ALERT_WINDOW hakkındaki makaleye bakın.

Uyarı

Android 11'dan başlayarak, ACTION_MANAGE_OVERLAY_PERMISSION amaçlar kullanıcıyı her zaman üst düzey Ayarlar ekranına getirir ve burada kullanıcı uygulamalar için izinleri verebilir veya iptal SYSTEM_ALERT_WINDOW edebilir. Android 11'de izin güncelleştirmeleri hakkındaki makaleye bakın.

Google Play sürümünüzü hazırlayın

Google Play, uygulama içi güncelleştirme kodunu çalışma zamanında kullanılmasa bile kötü amaçlı davranış olarak kabul eder. Uygulamanızı Google Play'e göndermeden önce, bu bölümde belirtildiği gibi SDK'nın bir değişkenini kullanın veya uygulama içi güncelleştirme kodu içeren Distribute SDK'sını tamamen kaldırın. Bunun yapılmaması, uygulamanın Google Play'den uyumsuzluğuna ve kaldırılmasına neden olabilir. Bunu kolaylaştırmak için App Center Distribute SDK'sının saplanmış API'ler içeren sürümünü sağlıyoruz, bu nedenle sizin için tek değişiklik bağımlılık değişimidir.

  1. Projenin uygulama düzeyi build.gradle dosyasını (app/build.gradle açın.

  2. Ürün tatları ekleyerek derleme değişkenlerini yapılandırın:

    android {
        flavorDimensions "distribute"
        productFlavors {
            appCenter {
                dimension "distribute"
            }
            googlePlay {
                dimension "distribute"
            }
        }
    }
    
  3. Ürün türüne göre farklı bağımlılıkları kullanmak için bağımlılık bloğunu değiştirin:

    dependencies {
        def appCenterSdkVersion = "5.0.6"
        appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
        googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}"
    }
    
  4. build.gradle dosyanızı kaydedin ve Android Studio'da bir Gradle eşitlemesi tetiklediğinize emin olun.

  5. Derleme değişkenini Derleme > Seçimi Derleme Değişkeni açılan menüsünde veya Araç penceresi çubuğundaki Derleme Varyantları'nda değiştirebilirsiniz.

Derleme değişkenlerini yapılandırma hakkında daha fazla bilgiyi Android belgelerinden okuyabilirsiniz.

Özel dağıtım grubunu kullanma

Varsayılan olarak, Distribute bir genel dağıtım grubu kullanır. Özel bir dağıtım grubu kullanmak istiyorsanız, bunu API aracılığıyla setUpdateTrack açıkça ayarlamanız gerekir.

Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)

Uyarı

Varsayılan değer şudur: UpdateTrack.PUBLIC. Bu yöntem yalnızca yöntem çağrısından AppCenter.start önce çağrılabilir. Uygulama işlemi yeniden başlatıldığında güncelleştirme izlemesinde yapılan değişiklikler kalıcı olmaz ve bu nedenle yöntem her zaman çağrıdan AppCenter.start önce çağrılmazsa varsayılan olarak genel olur.

Uygulama etkin durumdayken (Distribute.setUpdateTrack(UpdateTrack.PRIVATE); ve 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 parçada en son sürümü alır.

Bir kullanıcı özel yoldaysa, başarılı kimlik doğrulamasından sonra üyesi olduğu tüm özel dağıtım gruplarından en son sürümü alacakları anlamına gelir. Bir kullanıcı genel yoldaysa, herhangi bir genel dağıtım grubundan en son sürümü edinecektir.

Güncelleştirme için Otomatik Denetimi Devre Dışı Bırak

Varsayılan olarak, SDK yeni sürümleri otomatik olarak denetler:

  • Uygulama başlatıldığında.
  • Uygulama arka plana geçtikten sonra ön plana çıktığında.
  • Daha önce devre dışı bırakılmışsa Distribute modülünü etkinleştirirken.

Yeni sürümleri el ile denetlemek istiyorsanız, güncelleştirme için otomatik denetimi devre dışı bırakabilirsiniz. Bunu yapmak için SDK başlamadan önce aşağıdaki yöntemi çağırın:

Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()

Uyarı

Bu yöntem, yöntem çağrısından AppCenter.start önce çağrılmalıdır.

Ardından, aşağıdaki bölümde açıklanan API'yi kullanabilirsiniz checkForUpdate .

Güncelleştirmeyi El ile Denetle

Distribute.checkForUpdate();
Distribute.checkForUpdate()

Bu, App Center'a bir istek gönderir ve kullanılabilir yeni bir sürüm olması durumunda bir güncelleştirme iletişim kutusu görüntüler.

Uyarı

Otomatik güncelleştirmeler etkinleştirildiğinde bile güncelleştirme araması için el ile yapılan bir denetim çalışır. Başka bir denetim zaten yapılıyorsa elle yapılan güncelleme denetimi yoksayılır. Kullanıcı güncelleştirmeleri ertelediyse (en son sürüm zorunlu bir güncelleştirme olmadığı sürece) güncelleştirmeyi el ile denetleme işlemi yapılmaz.

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ülenen metni değiştirmek veya yerelleştirmek istiyorsanız kendi kaynak dizelerinizi kolayca sağlayabilirsiniz. Bu kaynak dosyasındaki dize dosyalarına bakın. Aynı dize adını/anahtarını kullanın ve kendi uygulama kaynak dosyalarınızdaki iletişim kutusuna yansıtılacak yerelleştirilmiş değeri belirtin.

2. Güncelleştirme iletişim kutusunu özelleştirme

Arabirimi uygulayarak DistributeListener varsayılan güncelleştirme iletişim kutusunun görünümünü özelleştirebilirsiniz. AppCenter.start fonksiyonunu çağırmadan önce, aşağıdaki örnekte gösterildiği gibi dinleyiciyi kaydetmeniz gerekir.

Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)

SDK iletişim kutusunun yerine özel bir tane koyan 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, dinleyiciniz true döndürüyorsa, Distribute.notifyUpdateAction(UpdateAction.UPDATE); veya Distribute.notifyUpdateAction(UpdateAction.POSTPONE); çağırmalısınız.

Eğer notifyUpdateAction öğesini çağırmazsanız, geri arama her etkinlik değişikliğinde yinelenir.

Kullanıcı eylemi SDK'ya bildirilmeden önce etkinlik değişirse dinleyici aynı sürümle yeniden çağrılabilir.

Bu davranış aşağıdaki senaryoları kapsayacak şekilde gereklidir:

  • Uygulamanız arka plana gönderilir ( HOME tuşuna basma gibi) sonra farklı bir etkinlikte sürdürülür.
  • Etkinliğiniz, uygulamadan çıkmadan (bazı bildirimlere tıklamak gibi) başka bir etkinlik kapsamındadır.
  • Diğer benzer senaryolar.

Bu durumda, iletişim kutusunu barındıran etkinlik kullanıcı etkileşimi olmadan değiştirilebilir. Özel iletişim kutusunu geri yükleyebilmeniz için SDK dinleyiciyi yeniden çağırır.

SDK güncelleştirmeleri denetlediğinde ve şu anda kullanılandan daha yeni kullanılabilir güncelleştirmeler bulamadığında arabirim onNoReleaseAvailableDistributeListener geri çağrısı çağrılır. Bu, bu tür senaryolarda özel kod yürütmenize olanak tanır. Yukarıdaki örnek, güncelleştirme bulunmadığında toast mesajının nasıl gösterileceğini göstermektedir.

Çalışma zamanında App Center Distribute'ı etkinleştirme veya devre dışı bırakma

App Center Distribute'ı çalışma zamanında etkinleştirebilir ve devre dışı bırakabilirsiniz. Devre dışı bırakırsanız SDK, uygulama içi güncelleştirme işlevi sağlamaz, ancak Hizmeti App Center portalında dağıtma özelliğini kullanmaya devam edebilirsiniz.

Distribute.setEnabled(false);
Distribute.setEnabled(false)

App Center Distribute'ı yeniden etkinleştirmek için aynı API'yi kullanın ancak parametre olarak geçirin true .

Distribute.setEnabled(true);
Distribute.setEnabled(true)

Durum, uygulama başlatmaları arasında cihazın depolama alanında kalıcı olur.

Bu API zaman uyumsuzdur. Bu konuda daha fazla bilgiyi App Center Zaman Uyumsuz API'ler kılavuzumuzdan okuyabilirsiniz.

Uyarı

Distribute başlatıldıktan sonra bu yöntem yalnızca kullanılmalıdır.

App Center Distribute'ın etkinleştirilip etkinleştirilmediğini denetleyin

App Center Distribute'ın etkinleştirilip etkinleştirilmediğini de de de kontrol edebilirsiniz:

Distribute.isEnabled();
Distribute.isEnabled()

Bu API zaman uyumsuzdur. Bu konuda daha fazla bilgiyi App Center Zaman Uyumsuz API'ler kılavuzumuzdan okuyabilirsiniz.

Uyarı

Bu yöntem, Distribute başlatıldıktan sonra kullanılmalıdır, başlamadan önce her zaman false döndürecektir.

Hata ayıklama derlemeleri için uygulama içi güncelleştirmeleri etkinleştirme

App Center varsayılan olarak yalnızca sürüm derlemeleri için uygulama içi güncelleştirmeleri etkinleştirir.

Hata ayıklama derlemelerinde uygulama içi güncelleştirmeleri etkinleştirmek için, önce AppCenter.startaşağıdaki yöntemi çağırın:

Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)

Uyarı

Bu yöntem yalnızca hata ayıklama derlemelerini etkiler ve yayın derlemelerini etkilemez. Hata ayıklama derlemesi, android:debuggable bayrağının true olarak ayarlandığı anlamına gelir (bu genellikle, önceden tanımlanmış hata ayıklama derlemesi varyantları tarafından Gradle aracılığıyla otomatik olarak yapılır). Aksi takdirde, bu bir sürüm derlemesidir.

Uygulama içi güncelleştirmeler nasıl çalışır?

Uyarı

Uygulama içi güncelleştirmelerin çalışması için bağlantıdan bir uygulama derlemesi indirilmelidir. IDE'den veya el ile yüklenirse çalışmaz.

Uygulama içi güncelleştirmeler özelliği aşağıdaki gibi çalışır:

  1. Bu özellik yalnızca App Center Distribute hizmeti kullanılarak dağıtılan RELEASE derlemeleriyle (varsayılan olarak) çalışır.

  2. SDK'yı tümleştirdikten, uygulamanızın yayın sürümünü derleyip App Center'a yükledikten sonra, bu dağıtım grubundaki kullanıcılara yeni sürüm için e-posta yoluyla bildirim gönderilir.

  3. Her kullanıcı e-postasında bağlantıyı açtığında, uygulama kendi cihazına yüklenir. Yüklemek için e-posta bağlantısını kullanmaları önemlidir. Dışarıdan yüklemeyi desteklemiyoruz. Bir uygulama bağlantıdan indirildiğinde SDK, güncelleştirmeleri daha sonra denetlemek için tanımlama bilgilerinden önemli bilgileri kaydeder, aksi takdirde SDK'da bu anahtar bilgileri bulunmaz.

  4. Uygulama izlemeyi ö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. Kimlik doğrulama bilgileri genel parçaya geri dönüp daha sonra tekrar özel duruma geçtiğinde bile geçerli kaldığı sürece tarayıcı yeniden açılmaz. Tarayıcı kimlik doğrulaması başarılı olursa, kullanıcı otomatik olarak uygulamaya yeniden yönlendirilir. Parça genelse (varsayılan değerdir), sonraki adım doğrudan gerçekleşir.

  5. Uygulamanın yeni bir sürümü, aşağıdaki durumlarda kullanıcıların uygulamanızı güncelleştirmesini isteyen uygulama içi güncelleştirme iletişim kutusunu gösterir:

    • versionCode değerinin daha yüksek olması
    • versionCode eşit değerde, ancak versionName farklı değerde.

Tavsiye

Aynı APK'yı ikinci kez yüklerseniz, sürümler aynı olduğundan iletişim kutusu GÖRÜNTÜLENMEZ .

Uygulama içi güncelleştirmeleri nasıl test ederim?

Uygulama içi güncelleştirmeleri test etmek ve her seferinde sürüm numaralarını artırmak için sürüm derlemelerini (App Center SDK'sının Dağıtma modülünü kullanan) App Center Portalı'na yüklemeniz gerekir.

  1. Henüz yapmadıysanız uygulamanızı App Center Portalı'nda oluşturun.
  2. Uygulama içi güncelleştirme özelliğini test etme amaçlı olduğunu fark edebilmeniz için yeni bir dağıtım grubu oluşturun ve grubu adlandırın.
  3. Kendinizi (veya uygulama içi güncelleştirme özelliği testinize dahil etmek istediğiniz tüm kişileri) ekleyin. App Center'da bu uygulama için kullanılmayan yeni veya geçici bir e-posta adresi kullanın. Bu, deneyiminizin gerçek testçilerinizin deneyimine yakın olmasını sağlar.
  4. Uygulamanızın App Center Distribute içeren ve yukarıda açıklandığı gibi kurulum mantığını içeren yeni bir derleme oluşturun. Grup özelse setUpdateTrack API'sini kullanmaya başlamadan önce özel uygulama içi güncelleştirme izlemesini ayarlamayı unutmayın.
  5. Portalda Yeni sürümü dağıt düğmesine tıklayın ve uygulama derlemenizi karşıya yükleyin.
  6. Karşıya yükleme tamamlandıktan sonra İleri'ye tıklayın ve bu uygulama dağıtımının Hedefi olarak oluşturduğunuz Dağıtım grubunu seçin.
  7. Dağıtım'ı gözden geçirin ve derlemeyi uygulama içi test grubunuzla dağıtın.
  8. Bu gruptaki kişiler, uygulamanın test edicileri olmak için bir davet alır. Daveti kabul ettikten sonra uygulamayı mobil cihazlarından App Center Portalı'ndan indirebilirler. Uygulama içi güncelleştirmeler yüklendikten sonra, uygulama içi güncelleştirmeleri test etmeye hazırsınız demektir.
  9. Uygulamanızın versionCode öğesini güncelleyin.
  10. Uygulamanızın yayın sürümünü derleyin ve önceki adımda yaptığınız gibi uygulamanızın yeni bir derlemesini karşıya yükleyin ve bunu daha önce oluşturduğunuz Dağıtım Grubuna dağıtın. Uygulama bir sonraki başlatıldığında Dağıtım Grubu üyelerinden yeni bir sürüm istenir.

Tavsiye

Dağıtım Grupları vb. hakkında daha ayrıntılı bilgi için App Center Distribute'ın nasıl kullanıldığına ilişkin bilgilere göz atın. App Center Distribute'ı kullanarak uygulamanızın yeni bir sürümünü kod eklemeden dağıtmak mümkün olsa da App Center Distribute'ı uygulamanızın koduna eklemek, uygulama içi güncelleştirme deneyimine sahip olan test kullanıcılarınız ve kullanıcılarınız için daha sorunsuz bir deneyim sağlar.