Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Program Visual Studio App Center został wycofany 31 marca 2025 r. z wyjątkiem funkcji analizy i diagnostyki, które będą nadal obsługiwane do 30 czerwca 2026 r. Dowiedz się więcej.
Usługa App Center Distribute umożliwi użytkownikom zainstalowanie nowej wersji aplikacji podczas jej dystrybucji za pośrednictwem centrum aplikacji. Po udostępnieniu nowej wersji aplikacji zestaw SDK wyświetli użytkownikom okno dialogowe aktualizacji, aby pobrać lub odroczyć nową wersję. Po wybraniu aktualizacji zestaw SDK zacznie aktualizować aplikację.
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. Użyj wariantu SDK Distribute zgodnie z zaleceniami w tej sekcji lub całkowicie usuń SDK Distribute zawierający kod aktualizacji aplikacji przed przesłaniem aplikacji do sklepu Google Play. Niewykonanie tej czynności może prowadzić do niezgodności i usunięcia aplikacji ze sklepu Google Play.
Uwaga / Notatka
Jeśli uruchamiasz zautomatyzowane testy interfejsu użytkownika, włączone aktualizacje w aplikacji zablokują automatyczne testy interfejsu użytkownika, ponieważ będą one próbowały uwierzytelnić się w zapleczu Centrum aplikacji. Zalecamy, aby nie włączać usługi App Center Distribute dla testów interfejsu użytkownika.
Dodaj aktualizacje wewnątrz aplikacji
Postępuj zgodnie z sekcją Wprowadzenie , jeśli zestaw SDK nie został jeszcze skonfigurowany i uruchomiony w aplikacji.
1. Dodaj moduł dystrybucji App Center
Zestaw SDK centrum aplikacji został zaprojektowany z modułowym podejściem — deweloper musi tylko zintegrować moduły usług, których interesują.
Otwórz plik build.gradle na poziomie aplikacji projektu (
app/build.gradle
) i dodaj po plikuapply plugin
następujące wiersze.dependencies { def appCenterSdkVersion = '5.0.6' implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" }
Uwaga / Notatka
Jeśli wersja wtyczki Android Gradle jest niższa niż 3.0.0, należy zastąpić implementacjękompilacją.
Zapisz plik build.gradle i upewnij się, że wyzwalana jest synchronizacja narzędzia Gradle w programie Android Studio.
Narzędzie DownloadManager służy do pobierania aktualizacji. Zestaw SDK centrum aplikacji wymusza protokół TLS 1.2 w celu zwiększenia bezpieczeństwa.
2. Rozpocznij dystrybucję przez App Center
Aby użyć centrum aplikacji, wybierz moduły, których chcesz użyć. Domyślnie nie są uruchamiane żadne moduły i podczas uruchamiania zestawu SDK należy jawnie wywołać każde z nich.
Dodaj klasę Distribute do metody AppCenter.start()
, aby uruchomić usługę App Center Distribute.
AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)
Upewnij się, że w powyższym przykładzie kodu zastąpiono {Your App Secret}
sekretem aplikacji. Android Studio automatycznie sugeruje wymaganą instrukcję importu po dodaniu odwołania do klasy Distribute
do metody start()
, ale jeśli zobaczysz błąd, że nazwy klas nie są rozpoznawane, dodaj następujące wiersze do instrukcji importu w klasie aktywności.
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute
Uwaga / Notatka
System Android 10 lub nowszy ma ograniczenia dotyczące uruchamiania aplikacji w tle. Zobacz artykuł dotyczący ograniczeń dotyczących uruchamiania działań w tle.
Uwaga / Notatka
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 / Notatka
Począwszy od systemu Android 11, ACTION_MANAGE_OVERLAY_PERMISSION
polecenia zawsze przenoszą użytkownika na główny ekran Ustawień, gdzie może on przyznać lub cofnąć SYSTEM_ALERT_WINDOW
uprawnienia dla aplikacji. Zobacz artykuł dotyczący aktualizacji uprawnień w systemie Android 11.
Przygotowywanie kompilacji 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. Użyj wariantu zestawu dystrybucyjnego SDK zgodnie z zaleceniami w tej sekcji lub całkowicie usuń zestaw dystrybucyjny SDK zawierający kod aktualizacji w aplikacjach przed przesłaniem aplikacji do sklepu Google Play. Niewykonanie tej czynności może prowadzić do niezgodności i usunięcia aplikacji ze sklepu Google Play. Aby to ułatwić, udostępniamy wersję zestawu SDK dystrybucji usługi App Center z zastępczymi API, więc dla Ciebie jedyną zmianą jest wymiana zależności.
Otwórz plik build.gradle na poziomie aplikacji projektu (
app/build.gradle
).Skonfiguruj warianty kompilacji, dodając smaki produktów:
android { flavorDimensions "distribute" productFlavors { appCenter { dimension "distribute" } googlePlay { dimension "distribute" } } }
Zmodyfikuj blok zależności, aby korzystać z różnych zależności na podstawie smaku produktu:
dependencies { def appCenterSdkVersion = "5.0.6" appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}" }
Zapisz plik build.gradle i upewnij się, że wyzwalana jest synchronizacja narzędzia Gradle w programie Android Studio.
Wariant kompilacji można zmienić w menu rozwijanym Select Build Variant lub Build Variants na pasku okna narzędzi.
Więcej informacji na temat konfigurowania wariantów kompilacji można przeczytać w dokumentacji systemu Android.
Korzystanie z prywatnej grupy dystrybucyjnej
Domyślnie usługa Distribute używa publicznej grupy dystrybucyjnej. Jeśli chcesz użyć prywatnej grupy dystrybucyjnej, musisz jawnie ustawić ją za pośrednictwem setUpdateTrack
interfejsu API.
Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)
Uwaga / Notatka
Wartość domyślna to UpdateTrack.PUBLIC
. Tę metodę można wywołać tylko przed wywołaniem metody AppCenter.start
. Zmiany w ścieżce aktualizacji nie są utrwalane po ponownym uruchomieniu procesu aplikacji, więc jeśli metoda nie zawsze jest wywoływana przed AppCenter.start
wywołaniem, będzie ona domyślnie publiczna.
Gdy aplikacja znajduje się na pierwszym planie (po Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
i AppCenter.start
), zostanie otwarte okno przeglądarki w celu uwierzytelnienia użytkownika. Wszystkie kolejne kontrole aktualizacji będą otrzymywać najnowszą wersję na ścieżce prywatnej.
Jeśli użytkownik znajduje się na ścieżce prywatnej, oznacza to, że po pomyślnym uwierzytelnieniu otrzymają 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 uzyska 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 na pierwszy plan po przejściu do tła.
- Włączenie modułu Distribute, jeśli był wcześniej wyłączony.
Jeśli chcesz ręcznie sprawdzić dostępność nowych wersji, możesz wyłączyć automatyczne sprawdzanie aktualizacji. W tym celu przed uruchomieniem zestawu SDK wywołaj następującą metodę:
Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()
Uwaga / Notatka
Ta metoda musi być wywoływana przed wywołaniem AppCenter.start
metody.
Następnie możesz użyć interfejsu checkForUpdate
API, który został opisany w poniższej sekcji.
Ręczne sprawdzanie pod kątem aktualizacji
Distribute.checkForUpdate();
Distribute.checkForUpdate()
Spowoduje to wysłanie żądania do Centrum aplikacji i wyświetlenie okna dialogowego aktualizacji na wypadek dostępności nowej wersji.
Uwaga / Notatka
Ręczne sprawdzanie wywołania aktualizacji działa nawet wtedy, gdy są włączone aktualizacje automatyczne. 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 łatwo podać własne ciągi zasobów, jeśli chcesz zmienić lub zlokalizować tekst wyświetlany w oknie dialogowym aktualizacji. Przyjrzyj się plikom ciągów w tym pliku zasobów. 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 DistributeListener
interfejs. Przed wywołaniem AppCenter.start
należy zarejestrować odbiornik, jak pokazano w poniższym przykładzie:
Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)
Oto przykład implementacji odbiornika, która zastępuje okno dialogowe zestawu SDK niestandardowym:
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 pokazano w przykładzie, musisz wywołać Distribute.notifyUpdateAction(UpdateAction.UPDATE);
lub Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
, jeśli odbiornik zwróci true
.
Jeśli nie wywołasz notifyUpdateAction
, wywołanie zwrotne będzie powtarzane przy każdej zmianie aktywności.
Nasłuchujący może zostać wywołany ponownie z tą samą wersją, jeśli działanie zmieni się, zanim działanie użytkownika zostanie zgłoszone do SDK.
To zachowanie jest wymagane do pokrycia następujących scenariuszy:
- Aplikacja jest wysyłana do tła (na przykład naciśnięcie przycisku STRONA GŁÓWNA), a następnie wznowiona w innym działaniu.
- Twoje działanie jest przykrywane przez inne działanie bez opuszczania aplikacji (na przykład klikając w pewne powiadomienia).
- Inne podobne scenariusze.
W takim przypadku działanie hostujące okno dialogowe może zostać zastąpione bez interakcji użytkownika. Dlatego SDK ponownie wywołuje odbiornik, aby można było przywrócić niestandardowy dialog.
W przypadkach, gdy zestaw SDK sprawdza dostępność aktualizacji i nie znajdzie żadnych dostępnych aktualizacji nowszych niż aktualnie używany, onNoReleaseAvailable
wywołanie zwrotne z DistributeListener
interfejsu jest wywoływane. Umożliwia to wykonywanie niestandardowego kodu w takich scenariuszach. W powyższym przykładzie pokazano, jak wyświetlić komunikat toast, gdy nie znaleziono aktualizacji.
Włączanie lub wyłączanie funkcji App Center Distribute w czasie wykonywania
Możesz włączyć i wyłączyć dystrybucję usługi App Center w czasie działania aplikacji. Jeśli wyłączysz zestaw SDK, nie udostępni żadnych funkcji aktualizacji w aplikacji, ale nadal możesz korzystać z usługi Distribute w portalu App Center.
Distribute.setEnabled(false);
Distribute.setEnabled(false)
Aby ponownie włączyć funkcję App Center Distribute, użyj tego samego interfejsu API, ale przekaż true
jako parametr.
Distribute.setEnabled(true);
Distribute.setEnabled(true)
Stan jest utrwalany w magazynie urządzenia w ramach uruchamiania aplikacji.
Ten interfejs API jest asynchroniczny. Więcej informacji na ten temat można przeczytać w naszym przewodniku asynchronicznych interfejsów API centrum aplikacji .
Uwaga / Notatka
Ta metoda musi być używana tylko po uruchomieniu Distribute
.
Sprawdzanie, czy usługa App Center Distribute jest włączona
Możesz również sprawdzić, czy usługa App Center Distribute jest włączona, czy nie:
Distribute.isEnabled();
Distribute.isEnabled()
Ten interfejs API jest asynchroniczny. Więcej informacji na ten temat można przeczytać w naszym przewodniku asynchronicznych interfejsów API centrum aplikacji .
Uwaga / Notatka
Ta metoda musi być używana tylko po uruchomieniu Distribute
. Zawsze zwróci false
przed rozpoczęciem.
Włączanie aktualizacji wewnątrz aplikacji dla wersji debug
Domyślnie usługa App Center włącza aktualizacje w aplikacji tylko dla kompilacji wydań.
Aby włączyć aktualizacje w aplikacji w kompilacjach debugowania, wywołaj następującą metodę przed AppCenter.start
.
Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)
Uwaga / Notatka
Ta metoda ma wpływ tylko na kompilacje debug i nie ma wpływu na kompilacje wersji.
Kompilacja debugowania oznacza, że flaga android:debuggable
jest ustawiona na true
(zazwyczaj jest automatycznie ustawiana przez wstępnie zdefiniowane warianty kompilacji debugowania narzędzia Gradle). W przeciwnym razie jest to kompilacja produkcyjna.
Jak działają aktualizacje w aplikacji?
Uwaga / Notatka
Aby aktualizacje w aplikacji działały, należy pobrać kompilację aplikacji z linku. Nie będzie działać, jeśli zainstalowano je ze środowiska IDE lub ręcznie.
Funkcja aktualizacji w aplikacji działa w następujący sposób:
Ta funkcja działa tylko z wersjami RELEASE (domyślnie), które są dystrybuowane przy użyciu usługi App Center Distribute.
Po zintegrowaniu zestawu SDK, skompiluj wersję wydania aplikacji i prześlij ją do App Center, użytkownicy tej grupy dystrybucyjnej zostaną powiadomieni o nowej wersji za pomocą wiadomości 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 użyli linku z e-maila do instalacji — nie wspieramy instalacji z nieoficjalnych źródeł. 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 zawiera tych kluczowych informacji.
Jeśli aplikacja ustawia ścieżkę na prywatną, przeglądarka otworzy się w celu uwierzytelnienia użytkownika i włączenia aktualizacji w aplikacji. Przeglądarka nie będzie ponownie otwierana, o ile informacje o uwierzytelnieniu pozostają prawidłowe, nawet gdy przełączasz się z powrotem na kanał publiczny, a następnie ponownie na kanał prywatny. 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ą użytkowników o zaktualizowanie aplikacji w następujących przypadkach:
- wyższa wartość
versionCode
lub - taka sama wartość
versionCode
, ale inna wartośćversionName
.
- wyższa wartość
Wskazówka
Jeśli przekażesz ten sam plik APK po raz drugi, okno dialogowe NIE będzie wyświetlane, ponieważ wersje są identyczne.
Jak przetestować aktualizacje w aplikacji?
Należy przekazać wersje produkcyjne, które używają modułu Distribute Zestawu SDK Centrum Aplikacji, do portalu Centrum Aplikacji w celu testowania aktualizacji aplikacji, zwiększając numer 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ę, aby móc rozpoznać, że jest przeznaczona do testowania funkcji aktualizacji w aplikacji.
- Dodaj siebie (lub wszystkie osoby, które chcesz dołączyć do testu funkcji aktualizacji w aplikacji). Użyj nowego lub odrzuconego adresu e-mail, który nie był używany dla tej aplikacji w Centrum aplikacji. Dzięki temu twoje doświadczenie jest bliskie doświadczeniu rzeczywistych testerów.
- Utwórz nową kompilację aplikacji, która obejmuje dystrybucję usługi App Center i zawiera logikę konfiguracji zgodnie z powyższym opisem. Jeśli grupa jest prywatna, nie zapomnij ustawić prywatnej ścieżki aktualizacji w aplikacji przed rozpoczęciem korzystania z interfejsu API setUpdateTrack.
- Kliknij przycisk Dystrybuuj nową wersję w portalu i przekaż kompilację aplikacji.
- Po zakończeniu przekazywania kliknij Dalej i wybierz Grupę dystrybucyjną, którą utworzyłeś jako Miejsce docelowe dystrybucji aplikacji.
- Przejrzyj dystrybucję i przekaż kompilację do grupy testowej w aplikacji.
- Osoby w tej grupie otrzymają zaproszenie do testerów aplikacji. Po zaakceptowaniu zaproszenia 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.
- Zwiększ
versionCode
swojej aplikacji. - Skompiluj wersję wydania swojej aplikacji, przekaż nową kompilację aplikacji, podobnie jak w poprzednim kroku, a następnie rozpowszechnij ją w grupie dystrybucyjnej, którą wcześniej utworzyłeś. Członkowie grupy dystrybucyjnej będą monitowani o nową wersję przy następnym uruchomieniu aplikacji.
Wskazówka
Zapoznaj się z informacjami na temat sposobu korzystania z usługi App Center Distribute , aby uzyskać bardziej szczegółowe informacje na temat grup dystrybucyjnych itp. Chociaż można użyć usługi App Center Distribute do dystrybucji nowej wersji aplikacji bez dodawania jakiegokolwiek 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.