Distribuce v App Center – aktualizace MAUI a Xamarin v aplikaci
Důležité
Visual Studio App Center je naplánované k vyřazení na 31. března 2025. I když můžete Visual Studio App Center dál používat, dokud ho úplně nevyřadíte, existuje několik doporučených alternativ, na které můžete migraci zvážit.
Přečtěte si další informace o časových osách a alternativách podpory.
App Center Distribuovat umožní uživatelům nainstalovat novou verzi aplikace, když ji distribuujete přes App Center. Když je k dispozici nová verze aplikace, sada SDK zobrazí uživatelům dialogové okno aktualizace, které jim umožní stáhnout nebo odložit novou verzi. Jakmile se sada SDK rozhodne aktualizovat, začne aktualizovat vaši aplikaci.
Upozornění
Google Play považuje aktualizační kód 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 Distribuce podle pokynů v této části . Pokud neodeberete aktualizační kód v aplikaci, může to vést k nedodržování předpisů a odebrání aplikace z Obchodu Google Play.
Poznámka
Pokud spouštíte automatizované testy uživatelského rozhraní, povolené aktualizace v aplikaci zablokují vaše automatizované testy uživatelského rozhraní, protože se pokusí ověřit v back-endu App Center. Pro testy uživatelského rozhraní doporučujeme nepovolovat distribuci v App Center.
Přidání aktualizací v aplikaci
Pokud jste ještě sadu SDK ve své aplikaci nenastavili a nespustili, postupujte podle části Začínáme .
1. Přidání modulu Distribuce v App Center
Sada App Center SDK je navržená s modulárním přístupem – vývojáři stačí integrovat jenom moduly služeb, které ho zajímají.
Visual Studio pro Mac
- Otevřete Visual Studio pro Mac.
- Klikněte na Otevřít soubor> a zvolte řešení.
- V navigátoru řešení klikněte pravým tlačítkem na oddíl Balíčky a zvolte Přidat balíčky NuGet....
- Vyhledejte App Center a nainstalujte App Center Distribuovat.
- Klikněte na Přidat balíčky.
Visual Studio pro Windows
- Otevřete Visual Studio pro Windows.
- Klikněte na Otevřít soubor> a zvolte řešení.
- V navigátoru řešení klikněte pravým tlačítkem na Odkazy a zvolte Spravovat balíčky NuGet.
- Vyhledejte App Center a nainstalujte Microsoft.AppCenter.Distribute.
Konzola Správce balíčků
- Otevřete konzolu v sadě Visual Studio. Uděláte to tak, že zvolíte Nástroje Konzola>Správce>balíčků NuGet.
- Pokud pracujete v Visual Studio pro Mac, ujistěte se, že máte nainstalovaná rozšíření pro správu balíčků NuGet. K tomu zvolteRozšířenísady Visual Studio>, vyhledejte NuGet a v případě potřeby nainstalujte.
- V konzole zadejte následující příkaz:
Install-Package Microsoft.AppCenter.Distribute
Poznámka
Pokud používáte sadu App Center SDK v přenosném projektu (například Xamarin.Forms), musíte nainstalovat balíčky v každém z projektů: v přenosném projektu, androidu a iOSu. Chcete-li to provést, měli byste otevřít každý dílčí projekt a postupovat podle odpovídajících kroků popsaných v částech Visual Studio pro Mac nebo Visual Studio pro Windows.
Poznámka
Android 10 nebo novější má omezení pro spouštění aktivit z pozadí. Přečtěte si článek o omezeních pro spouštění aktivit na pozadí.
Poznámka
Aplikace běžící na Androidu 10 (edice Go) nemůžou získat oprávnění k SYSTEM_ALERT_WINDOW . Přečtěte si článek o zařízeních SYSTEM_ALERT_WINDOW on Go.
Poznámka
Od Androidu 11 ACTION_MANAGE_OVERLAY_PERMISSION
záměry uživatele vždy přivedou na obrazovku Nastavení nejvyšší úrovně, kde 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.
2. Spuštění distribuce v App Center
Nakonfigurujte sadu App Center SDK voláním AppCenter.Start(...)
, jak je popsáno v příručce Začínáme.
V aplikaci pro iOS otevřete AppDelegate.cs
a před voláním LoadApplication
přidejte následující řádek :
Distribute.DontCheckForUpdatesInDebug();
Tento krok není nutný v Androidu, kde se konfigurace ladění detekuje automaticky za běhu.
Pokud chcete povolit aktualizace v aplikaci pro ladicí buildy v Androidu, zavolejte následující metodu v souboru MainActivity.cs projektu, v OnCreate
metodě a před LoadApplication
.
Distribute.SetEnabledForDebuggableBuild(true);
Poznámka
Tato metoda ovlivňuje pouze sestavení ladění a nemá žádný vliv na sestavení vydaných verzí.
2.3 [Pouze pro iOS] Úprava souboru Info.plist projektu
Sada App Center SDK kontroluje adresy URL přesměrovávání do aplikace, aby se zabránilo zkušebnímu načtení, takže aby se aktualizace distribuované prostřednictvím portálu správně zpracovávaly, musíte v CFBundleURLTypes
části Info.plist
souboru zadatCFBundleURLSchemes
:
Poznámka
Info.plist
, nebo soubor seznamu vlastností informací je strukturovaný textový soubor, který obsahuje základní konfigurační informace pro soubor spustitelného souboru.
Další informace najdete v dokumentaci pro vývojáře Apple.
- Přidejte nový klíč pro
URL types
neboCFBundleURLTypes
do souboru Info.plist (v případě, že Xcode zobrazí soubor Info.plist jako zdrojový kód). - Změňte klíč první podřízené položky na
URL Schemes
neboCFBundleURLSchemes
. - Jako schéma adresy URL zadejte
appcenter-${APP_SECRET}
a nahraďte${APP_SECRET}
tajným kódem aplikace.
Tip
Pokud chcete ověřit, že jste soubor Info.plist upravili správně, otevřete ho jako zdrojový kód. Měl by obsahovat následující položku s tajným kódem ${APP_SECRET}
aplikace místo :
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>appcenter-${APP_SECRET}</string>
</array>
</dict>
</array>
Odebrání aktualizací z aplikace pro buildy Google Play
Google Play považuje aktualizační kód v aplikaci za škodlivé chování, i když se nepoužívá za běhu. Pokud neodeberete aktualizační kód v aplikaci, může to vést k nedodržování předpisů a odebrání aplikace z Obchodu Google Play. Abychom vám to usnadnili, poskytujeme verzi sady App Center Distribuce sady SDK se zadržovanými rozhraními API, takže jedinou změnou pro vás je prohození závislostí.
Přidejte novou konfiguraci sestavení s názvem
GooglePlay
pro Xamarin.Android a sdílené projekty. Ujistěte se, že je konfigurace sestavení projektů správně namapovaná na příslušnou konfiguraci řešení. Další podrobnosti najdete v pokynech k sadě Visual Studio nebo Visual Studio pro Mac.Otevřete Xamarin.Android a sdílené projekty
.csproj
v libovolném textovém editoru a přesuňte distribuovat odkaz do skupiny podmíněných položek:<ItemGroup Condition=" '$(Configuration)' != 'GooglePlay' "> <PackageReference Include="Microsoft.AppCenter.Distribute" Version="3.3.0" /> </ItemGroup> <ItemGroup Condition=" '$(Configuration)' == 'GooglePlay' "> <PackageReference Include="Microsoft.AppCenter.DistributePlay" Version="3.3.0" /> </ItemGroup>
Poznámka
Pokud ke správě odkazů NuGet používáte starý formátpackages.config , můžete migrovat na formát PackageReference podle pokynů k migraci.
Uložte změny a obnovte balíčky NuGet.
Konfiguraci můžete změnit na panelu příkazů v horní části integrovaného vývojového prostředí .
Použití privátní distribuční skupiny
Distribuce ve výchozím nastavení používá veřejnou distribuční skupinu. Pokud chcete použít soukromou distribuční skupinu, budete ji muset explicitně nastavit prostřednictvím UpdateTrack
vlastnosti .
Distribute.UpdateTrack = UpdateTrack.Private;
Poznámka
Výchozí hodnota je UpdateTrack.Public
. Tuto vlastnost lze aktualizovat pouze před voláním AppCenter.Start
metody. Změny ve stopě aktualizace se při restartování procesu aplikace neuchovávají, takže pokud se vlastnost neaktualizuje vždy před voláním AppCenter.Start
, bude ve výchozím nastavení veřejná.
Po tomto volání se otevře okno prohlížeče pro ověření uživatele. Všechny následné kontroly aktualizací získají nejnovější verzi na soukromé cestě. V sadě SDK se během spuštění aplikací neuchovává aktualizační stopa.
Pokud je uživatel na soukromé 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 aktualizací
Ve výchozím nastavení sada SDK automaticky vyhledává nové verze:
- Při spuštění aplikace.
- Když aplikace přejde na pozadí, pak znovu v popředí.
- Při povolování modulu Distribuovat, pokud byl dříve zakázán.
Pokud chcete vyhledat nové verze ručně, můžete zakázat automatickou kontrolu aktualizací. Provedete to tak, že před spuštěním sady SDK zavoláte následující metodu:
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();
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 se už provádí jiná kontrola. Ruční kontrola aktualizací se nezpracuje, pokud uživatel aktualizace odložil (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 lokalizovat text zobrazený v dialogovém okně aktualizace, můžete snadno zadat vlastní řetězce prostředků. Podívejte se na soubory řetězců pro iOS v tomto souboru prostředků a soubory pro Android v tomto souboru prostředků. Použijte stejný název řetězce a klíč a zadejte lokalizovanou hodnotu, která se má v dialogovém okně projevit ve 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í zpětného ReleaseAvailable
volání. Před voláním AppCenter.Start
musíte zaregistrovat zpětné volání, jak je znázorněno v následujícím příkladu:
// In this example OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
AppCenter.Start(...);
Tady je příklad implementace zpětného volání, která nahrazuje dialogové okno sady SDK vlastním dialogem:
bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
// Look at releaseDetails public properties to get version information, release notes text or release notes URL
string versionName = releaseDetails.ShortVersion;
string versionCodeOrBuildNumber = releaseDetails.Version;
string releaseNotes = releaseDetails.ReleaseNotes;
Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;
// custom dialog
var title = "Version " + versionName + " available!";
Task answer;
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
answer = Current.MainPage.DisplayAlert(title, releaseNotes, "Download and Install");
}
else
{
answer = Current.MainPage.DisplayAlert(title, releaseNotes, "Download and Install", "Maybe tomorrow...");
}
answer.ContinueWith((task) =>
{
// If mandatory or if answer was positive
if (releaseDetails.MandatoryUpdate || (task as Task<bool>).Result)
{
// Notify SDK that user selected update
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Notify SDK that user selected postpone (for 1 day)
// This method call is ignored by the SDK if the update is mandatory
Distribute.NotifyUpdateAction(UpdateAction.Postpone);
}
});
// Return true if you're using your own dialog, false otherwise
return true;
}
Poznámky k implementaci pro Xamarin.Android:
Jak je znázorněno v příkladu, musíte buď volat Distribute.NotifyUpdateAction(UpdateAction.UPDATE);
, nebo Distribute.NotifyUpdateAction(UpdateAction.POSTPONE);
pokud zpětné volání vrátí true
.
Pokud nezavoláte NotifyUpdateAction
, bude se zpětné volání opakovat při každé změně aktivity.
Zpětné volání lze znovu volat se stejnou verzí, pokud se aktivita změní před oznámením akce uživatele 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 aktivitou, aniž byste opustili aplikaci (například kliknutím 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 zavolá naslouchací proces, abyste mohli obnovit vlastní dialogové okno.
3. Spuštění kódu, pokud nejsou nalezeny žádné aktualizace
V případech, kdy sada SDK vyhledá aktualizace a nenajde žádné aktualizace, které jsou novější než aktuálně použité, NoReleaseAvailable
se vyvolá zpětné volání. To vám umožní spouštět vlastní kód v takových scénářích.
Před voláním AppCenter.Start
musíte zaregistrovat zpětné volání, jak je znázorněno v následujícím příkladu:
// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
AppCenterLog.Info(LogTag, "No release available callback invoked.");
}
Povolení nebo zakázání distribuce app Center za běhu
App Center můžete povolit a zakázat distribuci za běhu. Pokud ho zakážete, sada SDK nebude poskytovat žádné funkce aktualizace v aplikaci, ale přesto můžete použít službu Distribuovat na portálu App Center.
Distribute.SetEnabledAsync(false);
Pokud chcete app Center distribuovat znovu, použijte stejné rozhraní API, ale předejte true
ho jako parametr.
Distribute.SetEnabledAsync(true);
Na toto volání nemusíte čekat, aby byla další volání rozhraní API (například IsEnabledAsync
) konzistentní.
Stav se v úložišti zařízení během spouštění aplikací udržuje.
Poznámka
Tuto metodu je možné použít pouze po Distribute
spuštění.
Kontrola, jestli je povolená distribuce v App Centeru
Můžete také zkontrolovat, jestli je distribuce App Center povolená nebo ne:
bool enabled = await Distribute.IsEnabledAsync();
Poznámka
Tuto metodu je možné použít pouze po Distribute
spuštění, vždy se vrátí false
před spuštěním.
Proveďte vyčištění těsně před zavření aplikace pro aktualizaci (jenom iOS)
Zaregistrujte zpětné volání, jak je znázorněno v následujícím příkladu:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
V takovém případě OnWillExitApp()
se vyvolá, když se distribuce chystá zavřít.
Jak fungují aktualizace v aplikaci?
Poznámka
Aby aktualizace v aplikaci fungovaly, je potřeba stáhnout build aplikace z odkazu. Nebude fungovat, pokud se nainstaluje z integrovaného vývojového prostředí (IDE) nebo ručně.
Funkce aktualizací v aplikaci funguje takto:
Tato funkce funguje jenom s buildy RELEASE (ve výchozím nastavení), které se distribuují pomocí služby App Center Distribute . Nebude fungovat, pokud je funkce iOS s asistencí přístup zapnutá.
Jakmile integrujete sadu SDK, sestavíte vydanou verzi aplikace a nahrajete ji do App Center, budou uživatelé v této distribuční skupině upozorněni na novou verzi e-mailem.
Když každý uživatel otevře odkaz ve svém e-mailu, aplikace se nainstaluje na jeho zařízení. Je důležité, aby k instalaci použili e-mailový odkaz – nepodporujeme načítání bokem. 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.
Pokud aplikace nastaví trasu na privátní, 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 znovu přepnete na veřejnou trasu a znovu na privátní. 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í), provede se další krok přímo.
- V iOSu 9 a 10 se v aplikaci otevře instance nástroje
SFSafariViewController
, aby se uživatel ověřil. Po úspěšném ověření se automaticky zavře. - V systému iOS 11 se uživatelské prostředí podobá iOS 10, ale iOS 11 požádá uživatele o oprávnění k přístupu k přihlašovacím údajům. Toto je dialogové okno na úrovni systému a nedá se přizpůsobit. Pokud uživatel dialogové okno zruší, může dál používat verzi, kterou testuje, ale nebude dostávat aktualizace v aplikaci. Při příštím spuštění aplikace se jim znovu zobrazí výzva k přístupu k přihlašovacím údajům.
- V iOSu 9 a 10 se v aplikaci otevře instance nástroje
V nové verzi aplikace se zobrazí dialogové okno aktualizace v aplikaci s výzvou uživatelům, aby aplikaci aktualizovali, pokud je to:
iOS:
- vyšší hodnotu
CFBundleShortVersionString
nebo - stejnou hodnotu,
CFBundleShortVersionString
ale vyšší hodnotuCFBundleVersion
. - verze jsou stejné, ale jedinečný identifikátor sestavení se liší.
- vyšší hodnotu
Android:
- vyšší hodnotu
versionCode
nebo - stejnou hodnotu,
versionCode
ale jinou hodnotuversionName
.
- vyšší hodnotu
Tip
Pokud nahrajete stejný soubor apk/ipa podruhé, dialogové okno se nezobrazí , protože binární soubory jsou identické. Pokud v iOSu nahrajete nový build se stejnými vlastnostmi verze, zobrazí se dialogové okno aktualizace. Důvodem je, že se jedná o jiný binární soubor. V Androidu se binární soubory považují za stejné, pokud jsou obě vlastnosti verze stejné.
Návody testovat aktualizace v aplikaci?
Abyste mohli otestovat aktualizace v aplikaci, musíte nahrát buildy vydaných verzí (které používají modul Distribuovat v sadě App Center SDK) na portál App Center a pokaždé zvýšit počet verzí.
- Pokud jste to ještě neudělali, vytvořte aplikaci na portálu App Center.
- Vytvořte novou distribuční skupinu a pojmenujte ji, abyste poznali, že je určená k testování funkce aktualizace v aplikaci.
- Přidejte sebe (nebo všechny lidi, které chcete zahrnout do testu funkce aktualizace v aplikaci). Použijte k tomu novou nebo vyhozenou e-mailovou adresu, která se pro danou aplikaci v App Center nepoužila. Tím zajistíte, že se vaše prostředí bude blížit zkušenostem skutečných testerů.
- Vytvořte nový build aplikace, který bude obsahovat App Center Distribute a obsahuje logiku nastavení, jak je popsáno níže. Pokud je skupina soukromá, nezapomeňte nastavit privátní trasu aktualizace v aplikaci, než začnete vlastnost používat
UpdateTrack
. - Na portálu klikněte na tlačítko Distribuovat novou verzi a nahrajte svůj build aplikace.
- Po dokončení nahrávání klikněte na Další a vyberte distribuční skupinu , kterou jste vytvořili jako cíl dané distribuce aplikace.
- Projděte si téma Distribuce a distribuujte sestavení do testovací skupiny v aplikaci.
- Lidé v této skupině obdrží pozvánku k testování 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, můžete je otestovat.
- Přetáčení verze aplikace (
CFBundleShortVersionString
neboCFBundleVersion
pro iOS proversionCode
Android) - Sestavte vydanou verzi aplikace a nahrajte nový build aplikace, jako jste to udělali v předchozím kroku, a distribuujte ho 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.
Tip
Podrobnější informace o distribučních skupinách atd. najdete v tématu Věnovaném využití distribuce app center. I když je možné distribuovat novou verzi aplikace pomocí App Center Distribuovat bez přidání kódu, přidáním app Center Distribuovat do kódu aplikace zajistíte pro testery a uživatele plynulejší prostředí, jakmile získají prostředí aktualizace v aplikaci.
Zakázání automatického předávání metod delegáta aplikace do služeb App Center
App Center používá swizzling k automatickému předávání metod delegáta aplikace službám App Center, aby se zlepšila integrace sady SDK. Může dojít ke konfliktům s jinými knihovnami třetích stran nebo samotným delegátem aplikace. V takovém případě můžete pomocí následujícího postupu zakázat přesměrování delegování aplikace App Center pro všechny služby App Center:
- Otevřete soubor Info.plist projektu.
- Přidejte
AppCenterAppDelegateForwarderEnabled
klíč a nastavte hodnotu na0
. Tím zakážete předávání delegátů aplikací pro všechny služby App Center. - Přidejte
OpenUrl
doAppDelegate.cs
souboru zpětné volání.
public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
Distribute.OpenUrl(url);
return true;
}