App Center Distribute – aktualizace přímo v aplikaci pro Android

Důležité

Visual Studio App Center bylo vyřazeno 31. března 2025 s výjimkou funkcí Analýzy a diagnostiky, které se budou dál podporovat až do 30. června 2026. Další informace.

App Center Distribute umožní uživatelům nainstalovat novou verzi aplikace, když ji distribuujete prostřednictvím App Center. Když je dostupná nová verze aplikace, sada SDK nabídne uživatelům dialogové okno aktualizace, které jim umožní buď stáhnout, nebo odložit novou verzi. Jakmile se rozhodnou aktualizovat, sada SDK začne aktualizovat vaši aplikaci.

Výstraha

Google Play považuje kód aktualizace v aplikaci za škodlivé chování, i když se nepoužívá za běhu. Před odesláním aplikace do Google Play použijte variantu sady SDK pro distribuci podle pokynů v této části nebo úplně odeberte sadu SDK pro distribuci obsahující kód pro aktualizaci. Pokud to neuděláte, může to vést k nedodržení předpisů a odebrání aplikace z Google Play.

Poznámka:

Pokud spouštíte automatizované testy uživatelského rozhraní, aktualizace povolené v rámci aplikace zablokují vaše automatizované testy uživatelského rozhraní, protože se pokusí ověřit vůči back-endu App Center. Doporučujeme nepovolit distribuci App Center pro vaše testy uživatelského rozhraní.

Přidání aktualizací v aplikaci

Pokud jste ještě nenastavili a spustili sadu SDK ve své aplikaci, postupujte podle části Začínáme .

1. Přidání modulu Distribuce App Center

Sada App Center SDK je navržená s modulárním přístupem – vývojář potřebuje integrovat jenom moduly služeb, které mají zájem.

  1. Otevřete soubor build.gradle na úrovni aplikace projektu (app/build.gradle) a přidejte následující řádky za apply plugin.

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

    Poznámka:

    Pokud je verze modulu plug-in Android Gradle nižší než 3.0.0, musíte implementaci nahraditkompilací.

  2. Uložte soubor build.gradle a nezapomeňte aktivovat synchronizaci Gradle v Android Studiu.

  3. DownloadManager se používá ke stahování aktualizací. Sada App Center SDK vynucuje protokol TLS 1.2, aby se zlepšilo zabezpečení.

2. Spuštění distribuce App Center

Pokud chcete používat App Center, přihlaste se k modulům, které chcete použít. Ve výchozím nastavení nejsou spuštěny žádné moduly a při spuštění sady SDK je nutné explicitně volat jednotlivé moduly.

Přidejte do své AppCenter.start() metody třídu Distribute, která spustí službu App Center Distribute.

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

Ujistěte se, že jste v ukázce kódu výše nahradili {Your App Secret} tajným kódem aplikace. Android Studio po přidání odkazu na Distribute třídu do start() metody automaticky navrhne požadovaný příkaz importu, ale pokud se zobrazí chyba, že se názvy tříd nerozpoznají, přidejte do příkazů importu ve třídě aktivity následující řádky:

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

Poznámka:

Android 10 nebo vyšší má omezení aktivity spouštění z pozadí. Přečtěte si článek o omezeních spouštění aktivit na pozadí.

Poznámka:

Aplikace spuštěné v edici Go (Android 10) nemůžou získat oprávnění SYSTEM_ALERT_WINDOW . Přečtěte si článek o SYSTEM_ALERT_WINDOW na zařízeních Go.

Poznámka:

Od Androidu 11 ACTION_MANAGE_OVERLAY_PERMISSION záměry vždy uživatele přenesou na obrazovku Nastavení nejvyšší úrovně, kde uživatel může udělit nebo odvolat SYSTEM_ALERT_WINDOW oprávnění pro aplikace. Přečtěte si článek o aktualizacích oprávnění v Androidu 11.

Příprava buildu Google Play

Google Play považuje kód aktualizace v aplikaci za škodlivé chování, i když se nepoužívá za běhu. Použijte variantu sady SDK Distribute podle pokynů v této části nebo úplně odeberte sadu SDK Distribute, která obsahuje kód pro aktualizaci aplikace, než aplikaci odešlete do Google Play. Pokud to neuděláte, může to vést k nedodržení předpisů a odebrání aplikace z Google Play. Abychom to usnadnili, poskytujeme verzi sady App Center Distribute SDK se stubovanými rozhraními API, takže jedinou změnou pro vás je výměna závislostí.

  1. Otevřete soubor build.gradle na úrovni aplikace projektu (app/build.gradle).

  2. Konfigurace variant sestavení přidáním příchutí produktů:

    android {
        flavorDimensions "distribute"
        productFlavors {
            appCenter {
                dimension "distribute"
            }
            googlePlay {
                dimension "distribute"
            }
        }
    }
    
  3. Upravte blok závislostí tak, aby spotřebovával různé závislosti podle varianty produktu.

    dependencies {
        def appCenterSdkVersion = "5.0.6"
        appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
        googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}"
    }
    
  4. Uložte soubor build.gradle a nezapomeňte aktivovat synchronizaci Gradle v Android Studiu.

  5. Variantu sestavení můžete změnit v rozevírací nabídce Build > Select Build Variant nebo Build Variants (Varianty sestavení ) na panelu nástrojů.

Další informace o konfiguraci variant sestavení najdete v dokumentaci k Androidu.

Použití privátní distribuční skupiny

Distribuce ve výchozím nastavení používá veřejnou distribuční skupinu. Pokud chcete použít privátní distribuční skupinu, budete ji muset explicitně nastavit přes setUpdateTrack rozhraní API.

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

Poznámka:

Výchozí hodnota je UpdateTrack.PUBLIC. Tuto metodu lze volat pouze před voláním AppCenter.start metody. Změny sledování aktualizací se při restartování procesu aplikace neuchovávají, takže pokud metoda není vždy volána před AppCenter.start voláním, bude ve výchozím nastavení veřejná.

Když je aplikace na popředí (po Distribute.setUpdateTrack(UpdateTrack.PRIVATE); a AppCenter.start), otevře se okno prohlížeče pro ověření uživatele. Všechny následné kontroly aktualizací získají nejnovější verzi na privátní stopě.

Pokud je uživatel na privátní cestě, znamená to, že po úspěšném ověření získá nejnovější verzi ze všech privátních distribučních skupin, kterých je členem. Pokud je uživatel na veřejné cestě, znamená to, že získá nejnovější verzi z jakékoli veřejné distribuční skupiny.

Zakázat automatickou kontrolu aktualizace

Ve výchozím nastavení sada SDK automaticky kontroluje nové verze:

  • Po spuštění aplikace.
  • Když aplikace přejde do popředí po přechodu na pozadí.
  • Při aktivaci modulu Distribuovat, pokud byl dříve zakázán.

Pokud chcete nové verze zkontrolovat ručně, můžete automatickou kontrolu aktualizace zakázat. Uděláte to tak, že před spuštěním sady SDK zavoláte následující metodu:

Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()

Poznámka:

Tato metoda musí být volána před voláním AppCenter.start metody.

Pak můžete použít checkForUpdate rozhraní API, které je popsáno v následující části.

Ruční kontrola aktualizace

Distribute.checkForUpdate();
Distribute.checkForUpdate()

Tím se odešle žádost do App Centeru a zobrazí se dialogové okno aktualizace pro případ, že je k dispozici nová verze.

Poznámka:

Ruční kontrola volání aktualizací funguje i v případě, že jsou povolené automatické aktualizace. Ruční kontrola aktualizace se ignoruje, pokud už probíhá jiná kontrola. Ruční kontrola aktualizace nebude zpracována, pokud uživatel odložil aktualizace (pokud nejnovější verze není povinná aktualizace).

Přizpůsobení nebo lokalizace dialogového okna aktualizace v aplikaci

1. Přizpůsobení nebo lokalizace textu

Pokud chcete změnit nebo lokalizovat text zobrazený v dialogovém okně aktualizace, můžete snadno zadat vlastní textové řetězce zdrojů. Podívejte se na textové soubory v tomto souboru prostředků. Použijte stejný název řetězce nebo klíč a zadejte lokalizovanou hodnotu, která se projeví v dialogu ve vašich vlastních souborech prostředků aplikace.

2. Přizpůsobení dialogového okna aktualizace

Vzhled výchozího dialogového okna aktualizace můžete přizpůsobit implementací DistributeListener rozhraní. Před voláním AppCenter.start musíte zaregistrovat naslouchač, jak je znázorněno v následujícím příkladu:

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

Tady je příklad implementace naslouchacího procesu, která nahrazuje dialogové okno sady SDK vlastní implementací:

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()
    }
}

Jak je znázorněno v příkladu, musíte buď zavolat Distribute.notifyUpdateAction(UpdateAction.UPDATE); nebo Distribute.notifyUpdateAction(UpdateAction.POSTPONE);, pokud váš posluchač vrátí true.

Pokud nezavoláte notifyUpdateAction, callback se bude opakovat při každé změně aktivity.

Posluchač může být znovu volán se stejným uvolněním, pokud se aktivita změní předtím, než je akce uživatele oznámena sadě SDK.

Toto chování je potřeba k pokrytí následujících scénářů:

  • Vaše aplikace se odešle na pozadí (například stisknutím klávesy HOME) a pak se obnoví v jiné aktivitě.
  • Vaše aktivita je pokryta jinou bez opuštění aplikace (například kliknutí na některá oznámení).
  • Další podobné scénáře.

V takovém případě může být aktivita hostující dialogové okno nahrazena bez zásahu uživatele. Sada SDK proto znovu volá naslouchací proces, abyste mohli obnovit vlastní dialogové okno.

V případech, kdy SDK vyhledá aktualizace a nenajde žádné dostupné aktualizace novější než ta, kterou aktuálně používáte, je vyvoláno zpětné volání z rozhraní onNoReleaseAvailableDistributeListener. To vám umožní spouštět vlastní kód v takových scénářích. Výše uvedený příklad ukazuje, jak zobrazit informační zprávu, když nejsou nalezeny žádné aktualizace.

Povolení nebo zakázání App Center Distribute během běhu aplikace

Distribuci app Center můžete povolit a zakázat za běhu. Pokud ji zakážete, sada SDK nebude poskytovat žádné funkce aktualizace v aplikaci, ale můžete službu Distribuovat dál používat na portálu App Center.

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

Pokud chcete znovu povolit distribuci App Center, použijte stejné rozhraní API, ale předejte true jako parametr.

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

Stav se zachová v úložišti zařízení napříč spuštěním aplikace.

Toto rozhraní API je asynchronní. Další informace najdete v naší příručce k asynchronním rozhraním API služby App Center .

Poznámka:

Tuto metodu je nutné použít pouze po Distribute spuštění.

Zkontrolujte, zda je povolena služba App Center Distribute

Můžete také zkontrolovat, jestli je povolená distribuce App Center, nebo ne:

Distribute.isEnabled();
Distribute.isEnabled()

Toto rozhraní API je asynchronní. Další informace najdete v naší příručce k asynchronním rozhraním API služby App Center .

Poznámka:

Tato metoda se musí použít pouze po spuštění Distribute, vždy se vrátí false před zahájením.

Povolit aktualizace aplikace pro ladicí verze

Ve výchozím nastavení App Center povoluje aktualizace v aplikaci jenom pro buildy vydaných verzí.

Aby bylo možné povolit aktualizace v aplikaci v debug buildech, zavolejte následující metodu před AppCenter.start.

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

Poznámka:

Tato metoda má vliv pouze na sestavení ladění a nemá žádný vliv na sestavení vydané verze. Ladění sestavení znamená, že android:debuggable příznak je nastavený na true (což je obvykle automaticky nastaveno předdefinovanými variantami sestavení ladění gradle). Jinak se jedná o build vydané verze.

Jak fungují aktualizace v aplikaci?

Poznámka:

Aby aktualizace v aplikaci fungovaly, měl by se z odkazu stáhnout build aplikace. Nebude fungovat, pokud je nainstalovaný z integrovaného vývojového prostředí (IDE) nebo ručně.

Funkce aktualizací v aplikaci funguje takto:

  1. Tato funkce funguje jenom s buildy RELEASE (ve výchozím nastavení) distribuovanými pomocí služby App Center Distribute .

  2. Po integraci sady SDK vytvořte verzi aplikace pro vydání a nahrajte ji do App Center. Uživatelé v této distribuční skupině budou následně upozorněni na novou verzi prostřednictvím e-mailu.

  3. Když každý uživatel otevře odkaz v e-mailu, aplikace se nainstaluje do svého zařízení. Je důležité, aby k instalaci použili e-mailový odkaz – nepodporujeme sideloading. Když se aplikace stáhne z odkazu, sada SDK uloží důležité informace ze souborů cookie, aby později zkontrolovala aktualizace, jinak sada SDK tyto klíčové informace neobsahuje.

  4. Pokud aplikace nastaví trasu na soukromou, otevře se prohlížeč pro ověření uživatele a povolení aktualizací v aplikaci. Prohlížeč se znovu neotevře, dokud ověřovací informace zůstanou platné, i když se později přepnete zpět na veřejnou trasu a znovu se vrátíte k privátnímu. Pokud je ověření prohlížeče úspěšné, uživatel se automaticky přesměruje zpět do aplikace. Pokud je trasa veřejná (což je výchozí nastavení), provede se další krok přímo.

  5. V nové verzi aplikace se zobrazí dialogové okno aktualizace v aplikaci s výzvou uživatelům, aby aplikaci aktualizovali, pokud ano:

    • vyšší hodnota versionCode nebo
    • rovná hodnota versionCode , ale jiná hodnota versionName.

Návod

Pokud soubor APK nahrajete podruhé, dialogové okno se nezobrazí , protože verze jsou identické.

Jak můžu testovat aktualizace v aplikaci?

K otestování aktualizací v aplikaci je potřeba nahrát vydané verze buildů na portál App Center s použitím modulu Distribuovat z App Center SDK a pokaždé zvýšit čísla verzí.

  1. Pokud jste to ještě neudělali, vytvořte aplikaci na portálu App Center.
  2. Vytvořte novou distribuční skupinu a pojmenujte ji, abyste ji mohli rozpoznat, že je určená k testování funkce aktualizace v aplikaci.
  3. Přidejte sami sebe (nebo všechny lidi, které chcete zahrnout do testu funkce aktualizace v aplikaci). Použijte novou nebo jednorázovou e-mailovou adresu, která nebyla použita pro tu aplikaci na App Center. Tím zajistíte, že vaše zkušenosti budou blízko zkušenostem vašich skutečných testerů.
  4. Vytvořte nové sestavení vaší aplikace, které zahrnuje distribuci v App Center a obsahuje logiku nastavení, jak je popsáno výše. Pokud je skupina soukromá, nezapomeňte před zahájením používání rozhraní SETUpdateTrack API nastavit trasu aktualizace privátní aplikace.
  5. Na portálu klikněte na tlačítko Distribuovat novou verzi a nahrajte sestavení aplikace.
  6. Po dokončení nahrávání klikněte na Další a vyberte distribuční skupinu , kterou jste vytvořili jako cíl distribuce této aplikace.
  7. Zkontrolujte distribuci a distribuujte sestavení své testovací skupině v rámci aplikace.
  8. Lidé v této skupině dostanou pozvánku, aby mohli být testeři aplikace. Jakmile pozvánku přijme, může si aplikaci stáhnout z portálu App Center ze svého mobilního zařízení. Jakmile budou mít nainstalované aktualizace v aplikaci, jste připraveni otestovat aktualizace v aplikaci.
  9. Aktualizujte versionCode vaší aplikace.
  10. Sestavte verzi aplikace a nahrajte nový build aplikace, jako jste to udělali v předchozím kroku, a distribuujte ji do distribuční skupiny , kterou jste vytvořili dříve. Při příštím spuštění aplikace se členům distribuční skupiny zobrazí výzva k zadání nové verze.

Návod

Podívejte se na informace o tom, jak využívat App Center Distribuovat , abyste se dozvěděli podrobnější informace o distribučních skupinách atd. I když je možné distribuovat novou verzi aplikace pomocí App Center Distribute, aniž byste museli přidávat žádný kód, přidání App Center Distribute do kódu aplikace bude pro vaše testery a uživatele plynulejší prostředí, když získají prostředí aktualizace v aplikaci.