Dystrybucja w usłudze App Center — aktualizacje w aplikacji aparatu Unity
Ważne
Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Chociaż możesz nadal używać programu Visual Studio App Center do momentu jego pełnego wycofania, istnieje kilka zalecanych alternatyw, do których można rozważyć migrację.
Dowiedz się więcej o osiach czasu pomocy technicznej i alternatywach.
Dystrybucja usługi App Center umożliwia użytkownikom/testerom instalowanie nowych wersji aplikacji po jej rozpowszechnianiu za pośrednictwem Centrum aplikacji. Po włączeniu zestawu SDK zostanie wyświetlone okno dialogowe aktualizacji dla użytkowników, aby pobrać lub odroczyć instalację najnowszej aktualizacji. Po wybraniu aktualizacji zestaw SDK rozpocznie aktualizowanie aplikacji.
Ważne
Zestaw Distribute SDK dla aparatu Unity nie obsługuje platformy UWP. Instrukcje na tej stronie obejmują tylko systemy Android i iOS.
Ostrzeżenie
Sklep Google Play traktuje kod aktualizacji w aplikacji jako złośliwe zachowanie, nawet jeśli nie jest używany w czasie wykonywania. Usuń ten kod zgodnie z zaleceniami w tej sekcji przed przesłaniem aplikacji do sklepu Google Play. Nie można usunąć kodu aktualizacji w aplikacji może prowadzić do niezgodności i usunięcia aplikacji ze sklepu Google Play.
Uwaga
Jeśli uruchamiasz zautomatyzowane testy interfejsu użytkownika, włączone aktualizacje w aplikacji spowodują zablokowanie zautomatyzowanych testów interfejsu użytkownika podczas próby uwierzytelnienia w zapleczu Centrum aplikacji. Zalecamy wyłączenie aktualizacji w aplikacji dla testów interfejsu użytkownika.
Dodawanie aktualizacji w aplikacji do aplikacji
Dodawanie modułu dystrybucji centrum aplikacji
Zestaw SDK centrum aplikacji został zaprojektowany z modułowym podejściem — deweloper musi zintegrować tylko moduły usług, które cię interesują.
Postępuj zgodnie z dokumentami wprowadzającym do środowiska Unity, jeśli jeszcze nie skonfigurowaliśmy i nie uruchomiono zestawu SDK w aplikacji. Pamiętaj, aby zaimportować pakiet rozproszony w centrum aplikacji. Jego nazwa powinna mieć format AppCenterDistribute-v{version}.unitypackage
.
Uwaga
System Android 10 lub nowszy ma ograniczenia dotyczące działania uruchamiania z poziomu tła. Zobacz artykuł dotyczący ograniczeń dotyczących uruchamiania działań w tle.
Uwaga
Aplikacje działające w systemie Android 10 (wersja Go) nie mogą otrzymać uprawnienia SYSTEM_ALERT_WINDOW . Zobacz artykuł dotyczący SYSTEM_ALERT_WINDOW na urządzeniach Go.
Uwaga
Począwszy od systemu Android 11, ACTION_MANAGE_OVERLAY_PERMISSION
intencje zawsze powodują przeniesienie użytkownika na ekran ustawień najwyższego poziomu, na którym użytkownik może udzielić lub odwołać SYSTEM_ALERT_WINDOW
uprawnienia dla aplikacji. Zobacz artykuł dotyczący aktualizacji uprawnień w systemie Android 11.
Usuwanie aktualizacji w aplikacji dla kompilacji ze sklepu Google Play
Sklep Google Play traktuje kod aktualizacji w aplikacji jako złośliwe zachowanie, nawet jeśli nie jest używany w czasie wykonywania. Usuń ten kod przed przesłaniem aplikacji do sklepu Google Play. Nie można usunąć kodu aktualizacji w aplikacji może prowadzić do niezgodności i usunięcia aplikacji ze sklepu Google Play. Aby usunąć aktualizacje kodu natywnego w aplikacji, usuń zaznaczenie pola wyboru Użyj dystrybucji w sekcji Dystrybucja w obiekcie gry z dołączonym programem AppCenterBehavior .
Korzystanie z prywatnej grupy dystrybucyjnej
Domyślnie usługa Distribute używa publicznej grupy dystrybucyjnej. Jeśli chcesz użyć prywatnej grupy dystrybucyjnej, musisz zmienić wartość UpdateTrack
na Prywatna.
W tym celu wybierz pozycję Prywatna na liście rozwijanej Śledzenie aktualizacji w sekcji Dystrybucja obiektu gry z dołączonym elementem AppCenterBehavior .
W przypadku korzystania z prywatnej ścieżki zostanie otwarte okno przeglądarki w celu uwierzytelnienia użytkownika. Wszystkie kolejne testy aktualizacji otrzymają najnowszą wersję na prywatnej ścieżce.
Jeśli użytkownik znajduje się na ścieżce prywatnej, oznacza to, że po pomyślnym uwierzytelnieniu uzyska najnowszą wersję z dowolnych prywatnych grup dystrybucyjnych, do których należy. Jeśli użytkownik znajduje się na ścieżce publicznej, oznacza to, że otrzyma najnowszą wersję z dowolnej publicznej grupy dystrybucyjnej.
Wyłączanie automatycznego sprawdzania aktualizacji
Domyślnie zestaw SDK automatycznie sprawdza nowe wersje:
- Po uruchomieniu aplikacji.
- Gdy aplikacja przechodzi w tle, na pierwszym planie ponownie.
- Po włączeniu modułu Distribute (Dystrybucja), jeśli został wcześniej wyłączony.
Jeśli chcesz ręcznie sprawdzić dostępność nowych wersji, możesz wyłączyć automatyczne sprawdzanie aktualizacji.
Aby to zrobić, usuń zaznaczenie pola wyboru Automatyczne sprawdzanie aktualizacji w sekcji Dystrybucja w obiekcie gry z dołączonym elementem AppCenterBehavior .
Następnie możesz użyć interfejsu CheckForUpdate
API opisanego w poniższej sekcji.
Ręczne sprawdzanie aktualizacji
Distribute.CheckForUpdate();
Spowoduje to wysłanie żądania do Centrum aplikacji i wyświetlenie okna dialogowego aktualizacji na wypadek dostępności nowej wersji.
Uwaga
Ręczne sprawdzanie wywołania aktualizacji działa nawet wtedy, gdy aktualizacje automatyczne są włączone. Ręczne sprawdzanie aktualizacji jest ignorowane, jeśli jest już wykonywane inne sprawdzanie. Ręczna kontrola aktualizacji nie zostanie przetworzona, jeśli użytkownik odroczył aktualizacje (chyba że najnowsza wersja jest obowiązkową aktualizacją).
Dostosowywanie lub lokalizowanie okna dialogowego aktualizacji w aplikacji
1. Dostosowywanie lub lokalizowanie tekstu
Możesz podać własne ciągi zasobów, jeśli chcesz lokalizować tekst wyświetlany w oknie dialogowym aktualizacji. Zapoznaj się z plikami ciągów dla systemu iOS w tym pliku zasobów systemu iOS i dla systemu Android w tym pliku zasobów systemu Android. Użyj tej samej nazwy/klucza ciągu i określ zlokalizowaną wartość, która ma zostać odzwierciedlona w oknie dialogowym we własnych plikach zasobów aplikacji.
2. Dostosowywanie okna dialogowego aktualizacji
Wygląd domyślnego okna dialogowego aktualizacji można dostosować, implementując ReleaseAvailable
wywołanie zwrotne.
Ostrzeżenie
Wywołanie zwrotne należy zarejestrować w metodzie MonoBehaviour
w Awake
pierwszej scenie ładowanej przez aplikację, aby uniknąć braku wywołań zwrotnych wydania.
// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
Oto implementacja wywołania zwrotnego, która zastępuje okno dialogowe zestawu SDK logiką niestandardową:
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;
// (Do something with the values if you want)
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
// Force user to update (you should probably show some custom UI here)
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Allow user to update or postpone (you should probably show some custom UI here)
// "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
// This blocks the thread while awaiting the user's response! This example shouldn't be used literally
UpdateAction updateAction = GetUserUpdateAction();
Distribute.NotifyUpdateAction(updateAction);
}
// Return true if you're using your own UI to get user response, false otherwise
return true;
}
Uwagi dotyczące implementacji dla systemu Android:
Jak pokazano w przykładzie, należy wywołać metodę Distribute.NotifyUpdateAction(UpdateAction.UPDATE);
lub Distribute.NotifyUpdateAction(UpdateAction.POSTPONE);
, jeśli wywołanie zwrotne zwróci wartość true
.
Jeśli nie wywołasz NotifyUpdateAction
metody , wywołanie zwrotne będzie powtarzane przy każdej zmianie działania.
Wywołanie zwrotne można wywołać ponownie z tą samą wersją, jeśli działanie zmieni się przed powiadomieniem użytkownika do zestawu SDK.
To zachowanie jest wymagane do obsługi następujących scenariuszy:
- Aplikacja jest wysyłana do tła (na przykład naciśnięcie klawisza HOME), a następnie wznowiona w innym działaniu.
- Twoje działanie jest objęte innym działaniem bez opuszczania aplikacji (na przykład kliknięcie niektórych powiadomień).
- Podobne scenariusze do powyższych.
W takim przypadku działanie hostujące okno dialogowe może zostać zastąpione bez interakcji z użytkownikiem. Dlatego zestaw SDK ponownie wywołuje odbiornik, aby można było przywrócić okno dialogowe niestandardowe.
3. Wykonaj kod, jeśli nie znaleziono aktualizacji
W przypadkach, gdy zestaw SDK sprawdza dostępność aktualizacji i nie znajdzie żadnych dostępnych aktualizacji nowszych niż obecnie używany, NoReleaseAvailable
wywołanie zwrotne jest wywoływane. Umożliwia to wykonywanie niestandardowego kodu w takich scenariuszach.
Przed wywołaniem wywołania zwrotnego należy zarejestrować, AppCenter.Start
jak pokazano w poniższym przykładzie:
// 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.");
}
## Enable or disable App Center Distribute at runtime
You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.
To disable the Distribute service, use the following code:
```csharp
Distribute.SetEnabledAsync(false);
Aby ponownie włączyć usługę App Center Distribute, użyj tego samego interfejsu API, ale przekaż true
go jako parametr.
Distribute.SetEnabledAsync(true);
Ten interfejs API jest asynchroniczny. Więcej informacji można uzyskać w naszym przewodniku asynchronicznych interfejsów API centrum aplikacji .
Nie musisz czekać na to wywołanie, aby inne wywołania interfejsu API (takie jak IsEnabledAsync
) były spójne.
Stan jest utrwalany w magazynie urządzenia w przypadku uruchamiania aplikacji.
Sprawdzanie, czy włączono dystrybucję usługi App Center
Możesz również sprawdzić, czy dystrybucja w centrum aplikacji jest włączona:
Distribute.IsEnabledAsync();
Ten interfejs API jest asynchroniczny. Więcej informacji można uzyskać w naszym przewodniku asynchronicznych interfejsów API centrum aplikacji .
Włączanie aktualizacji w aplikacji dla kompilacji debugowania
Domyślnie aktualizacje w aplikacji są włączone tylko dla kompilacji wydania.
Aby włączyć aktualizacje w aplikacji dla kompilacji debugowania w systemach Android i iOS, zaznacz pole wyboru Włącz dystrybucję w debugowania w sekcji Dystrybucja w obiekcie gry z dołączonym programem AppCenterBehavior .
W akompilowaniu aparatu Unity kompilacja do debugowania jest kompilacją z zaznaczoną opcją Kompilacja dewelopera .
Wykonaj czyszczenie bezpośrednio przed zamknięciem aplikacji w celu aktualizacji
Uwaga
To wywołanie zwrotne działa tylko w systemie iOS.
Zarejestruj wywołanie zwrotne, jak pokazano w poniższym przykładzie:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
W tym celu zostanie wywołana, OnWillExitApp()
gdy funkcja Distribute wkrótce zostanie zamknięta.
Jak działają aktualizacje w aplikacji
Uwaga
Aby aktualizacje w aplikacji działały, należy pobrać kompilację aplikacji z linku. Nie będzie działać, jeśli jest zainstalowany z poziomu środowiska IDE lub ręcznie.
Funkcja aktualizacji w aplikacji działa w następujący sposób:
- Ta funkcja działa tylko z kompilacjami RELEASE (domyślnie), które są dystrybuowane przy użyciu usługi rozproszonej App Center . Nie będzie działać, jeśli funkcja dostępu z przewodnikiem systemu iOS jest włączona.
- Po zintegrowaniu zestawu SDK skompiluj wersję wydania aplikacji i przekaż ją do Centrum aplikacji. Użytkownicy w grupie dystrybucyjnej są powiadamiani o nowej wersji za pośrednictwem poczty e-mail.
- Gdy każdy użytkownik otworzy link w wiadomości e-mail, aplikacja zostanie zainstalowana na swoim urządzeniu. Ważne jest, aby zainstalować link poczty e-mail — nie obsługujemy ładowania bezpośredniego. Po pobraniu aplikacji z linku zestaw SDK zapisuje ważne informacje z plików cookie w celu późniejszego sprawdzania dostępności aktualizacji. W przeciwnym razie zestaw SDK nie ma tych kluczowych informacji.
- Jeśli aplikacja ustawi ścieżkę na prywatną, zostanie otwarta przeglądarka w celu uwierzytelnienia użytkownika i włączenia aktualizacji w aplikacji. Przeglądarka nie zostanie ponownie otwarta, o ile informacje o uwierzytelnianiu pozostaną prawidłowe, nawet po ponownym przełączeniu do publicznej ścieżki i powrotu do prywatności później. Jeśli uwierzytelnianie przeglądarki zakończy się pomyślnie, użytkownik zostanie automatycznie przekierowany z powrotem do aplikacji. Jeśli utwór jest publiczny (co jest ustawieniem domyślnym), następny krok odbywa się bezpośrednio.
- W nowej wersji aplikacji jest wyświetlane okno dialogowe aktualizacji w aplikacji z prośbą o zaktualizowanie aplikacji, jeśli jest to:
- iOS:
- wyższa wartość lub
CFBundleShortVersionString
- równej wartości ,
CFBundleShortVersionString
ale wyższej wartościCFBundleVersion
. - wersje są takie same, ale unikatowy identyfikator kompilacji jest inny.
- wyższa wartość lub
- Android:
- wyższa wartość lub
versionCode
- równej wartości ,
versionCode
ale innej wartości .versionName
- wyższa wartość lub
- iOS:
Porada
Jeśli przekażesz tę samą .apk/.ipa po raz drugi, okno dialogowe nie będzie wyświetlane, ponieważ pliki binarne są identyczne. W systemie iOS, jeśli przekażesz nową kompilację z tymi samymi właściwościami wersji, zostanie wyświetlone okno dialogowe aktualizacji. Przyczyną tego jest to, że jest to inny plik binarny. W systemie Android pliki binarne są traktowane tak samo, jeśli obie właściwości wersji są takie same.
Jak mogę testowanie aktualizacji w aplikacji?
Należy przekazać kompilacje wydania (które używają modułu Distribute of the App Center SDK) do portalu Centrum aplikacji w celu testowania aktualizacji w aplikacji, zwiększając liczbę wersji za każdym razem.
- Utwórz aplikację w portalu Centrum aplikacji, jeśli jeszcze tego nie zrobiono.
- Utwórz nową grupę dystrybucyjną i nadaj jej nazwę.
- Dodaj siebie (lub wszystkie osoby, które chcesz dołączyć do testu funkcji aktualizacji w aplikacji). Użyj nowego lub odrzuconego adresu e-mail dla tego kroku, który nie został jeszcze użyty w tej aplikacji. Dzięki temu twoje doświadczenie jest zbliżone do doświadczenia rzeczywistych testerów.
- Utwórz nową kompilację aplikacji, która obejmuje dystrybucję usługi App Center i zawiera logikę instalacji, jak opisano poniżej. Jeśli grupa jest prywatna, nie zapomnij ustawić prywatnej ścieżki aktualizacji w aplikacji przed rozpoczęciem
UpdateTrack
korzystania z właściwości . - Kliknij przycisk Rozpowszechnij nową wersję w portalu i przekaż swoją kompilację aplikacji.
- Po zakończeniu przekazywania kliknij przycisk Dalej i wybierz grupę dystrybucyjną , która została wcześniej utworzona jako miejsce docelowe tej dystrybucji aplikacji.
- Przejrzyj sekcję Dystrybucja i rozpowszechnij kompilację do grupy testowania w aplikacji.
- Osoby w tej grupie otrzyma zaproszenie do testerów aplikacji. Po zaakceptowaniu zaproszenia użytkownicy mogą pobrać aplikację z portalu Centrum aplikacji z urządzenia przenośnego. Po zainstalowaniu aktualizacji w aplikacji możesz przystąpić do testowania aktualizacji w aplikacji.
- Bump the version of your app (
CFBundleShortVersionString
orCFBundleVersion
for iOS,versionCode
for Android). - Skompiluj wersję wydania aplikacji i przekaż nową kompilację, tak jak w poprzednim kroku. Dystrybuuj do utworzonej wcześniej grupy dystrybucyjnej . Członkowie grupy dystrybucyjnej będą monitowani o nową wersję przy następnym uruchomieniu aplikacji.
Porada
Zapoznaj się z informacjami na temat sposobu korzystania z usługi App Center Distribute w celu uzyskania bardziej szczegółowych informacji na temat grup dystrybucyjnych itp. Chociaż można użyć usługi App Center Distribute do dystrybucji nowej wersji aplikacji bez dodawania kodu, dodanie usługi App Center Distribute do kodu aplikacji spowoduje bardziej bezproblemowe środowisko dla testerów i użytkowników w miarę uzyskiwania środowiska aktualizacji w aplikacji.