Dokumentacja interfejsu API zestawu SDK klienta platformy React Native
Ważne
Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Mimo że można 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.
Wtyczka CodePush składa się z dwóch składników:
Moduł Języka JavaScript, który można zaimportować/wymagany i umożliwia aplikacji interakcję z usługą w czasie wykonywania (na przykład sprawdź dostępność aktualizacji, sprawdź metadane dotyczące aktualnie uruchomionej aktualizacji aplikacji).
Natywny interfejs API (Objective-C i Java), który umożliwia hostowi aplikacji React Native uruchamianie się przy użyciu odpowiedniej lokalizacji pakietu JS.
W poniższych sekcjach szczegółowo opisano kształt i zachowanie tych interfejsów API:
Dokumentacja interfejsu API języka JavaScript
Jeśli jest to wymaganereact-native-code-push
, obiekt modułu udostępnia następujące metody najwyższego poziomu oprócz dekoratora składników na poziomie głównym:
allowRestart: Reallows programowe ponowne uruchomienia wystąpi w wyniku zainstalowania aktualizacji i opcjonalnie natychmiast ponownie uruchomi aplikację, jeśli oczekująca aktualizacja próbowała ponownie uruchomić aplikację podczas ponownego uruchamiania, podczas gdy ponowne uruchomienia zostały niedozwolone. Ta metoda jest zaawansowanym interfejsem API i jest wymagana tylko wtedy, gdy aplikacja jawnie nie zezwala na ponowne uruchomienie za pośrednictwem
disallowRestart
metody .checkForUpdate: usługę CodePush, czy skonfigurowane wdrożenie aplikacji ma dostępną aktualizację.
disallowRestart: tymczasowo nie zezwala na ponowne uruchamianie programowe w wyniku zainstalowania aktualizacji CodePush. Ta metoda jest zaawansowanym interfejsem API i jest przydatna, gdy składnik w aplikacji (na przykład proces dołączania) musi mieć pewność, że żadne przerwy użytkownika końcowego nie mogą wystąpić w okresie jego istnienia.
getCurrentPackage: pobiera metadane dotyczące aktualnie zainstalowanej aktualizacji (na przykład opis, czas instalacji, rozmiar).
Uwaga
v1.10.3-beta
Od moduługetCurrentPackage
CodePush jest przestarzały na rzeczgetUpdateMetadata
*.getUpdateMetadata: pobiera metadane zainstalowanej aktualizacji (na przykład opis, obowiązkowy).
notifyAppReady: powiadamia środowisko uruchomieniowe CodePush o pomyślnym pomyślnym uznaniu zainstalowanej aktualizacji. Jeśli ręcznie sprawdzasz i instalujesz aktualizacje (nie używasz metody synchronizacji , aby obsłużyć to wszystko), ta metoda musi zostać wywołana. W przeciwnym razie program CodePush będzie traktować aktualizację jako nieudaną i wycofać ją z poprzedniej wersji po następnym ponownym uruchomieniu aplikacji.
restartApp: natychmiast ponownie uruchomi aplikację. Jeśli jest oczekująca aktualizacja, zostanie ona natychmiast wyświetlona użytkownikowi końcowemu. W przeciwnym razie wywołanie tej metody ma takie samo zachowanie jak użytkownik końcowy zabijający i ponownie uruchamiający proces.
synchronizacja: umożliwia sprawdzanie aktualizacji, pobieranie jej i instalowanie wszystkich z jednym wywołaniem. Jeśli nie potrzebujesz niestandardowego interfejsu użytkownika lub zachowania, zalecamy, aby większość deweloperów korzystała z tej metody podczas integrowania aplikacji CodePush z aplikacjami
codePush
// Wrapper function
codePush(rootComponent: React.Component): React.Component;
codePush(options: CodePushOptions)(rootComponent: React.Component): React.Component;
// Decorator; Requires ES7 support
@codePush
@codePush(options: CodePushOptions)
Służy do opakowywanie składnika React wewnątrz składnika React "wyższego zamówienia", który wie, jak zsynchronizować pakiet JavaScript i zasoby obrazów aplikacji podczas jego instalacji. Wewnętrznie składnik wyższego rzędu wywołuje dojścia sync
componentDidMount
cyklu życia, który uruchamia sprawdzanie aktualizacji, pobiera aktualizację, jeśli istnieje, i instaluje aktualizację.
Ten dekorator zapewnia obsługę dostosowywania jego zachowania w celu łatwego włączania aplikacji z różnymi wymaganiami. Poniżej przedstawiono kilka przykładów sposobów jej użycia (możesz wybrać jedną lub nawet użyć kombinacji):
Synchronizacja dyskretna podczas uruchamiania aplikacji (najprostsze, domyślne zachowanie). Aplikacja automatycznie pobierze dostępne aktualizacje i zastosuje je przy następnym ponownym uruchomieniu aplikacji (na przykład system operacyjny lub użytkownik końcowy, który go zabił, lub urządzenie zostało uruchomione ponownie). Dzięki temu całe środowisko aktualizacji jest "dyskretne" dla użytkownika końcowego, ponieważ nie widzi żadnych monitów o aktualizację ani "syntetycznych" ponownych uruchomień aplikacji.
// Fully silent update that keeps the app in // sync with the server, without ever // interrupting the end user class MyApp extends Component {} MyApp = codePush(MyApp);
Synchronizacja dyskretna za każdym razem, gdy aplikacja zostanie wznowione. Tak samo jak 1, z wyjątkiem sprawdzania dostępności aktualizacji lub stosowania aktualizacji, jeśli istnieje za każdym razem, gdy aplikacja powróci na pierwszy plan po "w tle".
// Sync for updates every time the app resumes. class MyApp extends Component {} MyApp = codePush({ checkFrequency: codePush.CheckFrequency.ON_APP_RESUME, installMode: codePush.InstallMode.ON_NEXT_RESUME })(MyApp);
Interakcyjne. Gdy aktualizacja jest dostępna, monituj użytkownika końcowego o uprawnienie przed jego pobraniem, a następnie natychmiast zastosuj aktualizację. Jeśli aktualizacja została wydana przy użyciu
mandatory
flagi, użytkownik końcowy nadal będzie powiadamiany o aktualizacji, ale nie będzie miał wyboru, aby go zignorować.// Active update that lets the end user know // about each update, and displays it to them // immediately after downloading it class MyApp extends Component {} MyApp = codePush({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE })(MyApp);
Postęp rejestrowania/wyświetlania. Podczas synchronizacji aplikacji z serwerem w celu uzyskania aktualizacji należy użyć
codePushStatusDidChange
punktów zaczepienia zdarzeń lubcodePushDownloadDidProgress
, aby zarejestrować różne etapy tego procesu, a nawet wyświetlić pasek postępu dla użytkownika.// Make use of the event hooks to keep track of // the different stages of the sync process. class MyApp extends Component { codePushStatusDidChange(status) { switch(status) { case codePush.SyncStatus.CHECKING_FOR_UPDATE: console.log("Checking for updates."); break; case codePush.SyncStatus.DOWNLOADING_PACKAGE: console.log("Downloading package."); break; case codePush.SyncStatus.INSTALLING_UPDATE: console.log("Installing update."); break; case codePush.SyncStatus.UP_TO_DATE: console.log("Up-to-date."); break; case codePush.SyncStatus.UPDATE_INSTALLED: console.log("Update installed."); break; } } codePushDownloadDidProgress(progress) { console.log(progress.receivedBytes + " of " + progress.totalBytes + " received."); } } MyApp = codePush(MyApp);
CodePushOptions
Dekorator codePush
akceptuje obiekt "options", który umożliwia dostosowanie wielu aspektów domyślnego zachowania wymienionego powyżej:
checkFrequency (codePush.CheckFrequency) — określa, kiedy chcesz sprawdzić dostępność aktualizacji. Wartość domyślna to
codePush.CheckFrequency.ON_APP_START
. Zapoznaj się zCheckFrequency
dokumentacją wyliczenia, aby uzyskać opis dostępnych opcji i ich działania.deploymentKey (ciąg) — określa klucz wdrożenia, dla którego chcesz wykonać zapytanie dotyczące aktualizacji. Domyślnie ta wartość pochodzi z pliku Info.plist (iOS) i pliku MainActivity.java (Android), ale ta opcja umożliwia zastąpienie go ze strony skryptu, jeśli trzeba dynamicznie używać innego wdrożenia.
installMode (codePush.InstallMode) — określa, kiedy chcesz zainstalować opcjonalne aktualizacje (te, które nie są oznaczone jako obowiązkowe). Wartość domyślna to
codePush.InstallMode.ON_NEXT_RESTART
. Zapoznaj się zInstallMode
dokumentacją wyliczenia, aby uzyskać opis dostępnych opcji i ich działania.mandatoryInstallMode (codePush.InstallMode) — określa, kiedy chcesz zainstalować aktualizacje, które są oznaczone jako obowiązkowe. Wartość domyślna to
codePush.InstallMode.IMMEDIATE
. Zapoznaj się zInstallMode
dokumentacją wyliczenia, aby uzyskać opis dostępnych opcji i ich działania.minimumBackgroundDuration (liczba) — określa minimalną liczbę sekund, przez które aplikacja ma znajdować się w tle przed ponownym uruchomieniem aplikacji. Ta właściwość ma zastosowanie tylko do aktualizacji zainstalowanych przy użyciu programu
InstallMode.ON_NEXT_RESUME
lubInstallMode.ON_NEXT_SUSPEND
i może być przydatna do wcześniejszego pobrania aktualizacji przed użytkownikami końcowymi bez zbyt niestrudnego. Domyślnie wartość0
, która stosuje aktualizację natychmiast po wznowieniu lub chyba że zawieszenie aplikacji jest wystarczająco długie, aby nie miało znaczenia, jednak długo znajduje się w tle.updateDialog (UpdateDialogOptions) — obiekt "options" używany do określenia, czy okno dialogowe potwierdzenia powinno być wyświetlane użytkownikowi końcowemu, gdy aktualizacja jest dostępna, a jeśli tak, jakie ciągi mają być używane. Wartość domyślna to
null
, co powoduje wyłączenie okna dialogowego. Ustawienie tej wartości na dowolnątrue
wartość spowoduje włączenie okna dialogowego z ciągami domyślnymi, a przekazanie obiektu do tego parametru umożliwia włączenie okna dialogowego, a także zastąpienie jednego lub kilku ciągów domyślnych. Przed włączeniem tej opcji w aplikacji rozproszonej ze sklepu App Store zapoznaj się z tą uwagą.Poniższa lista reprezentuje dostępne opcje i ich wartości domyślne:
appendReleaseDescription (wartość logiczna) — wskazuje, czy chcesz dołączyć opis dostępnej wersji do komunikatu powiadomienia, który jest wyświetlany użytkownikowi końcowemu. Wartość domyślna to
false
.descriptionPrefix (Ciąg) — wskazuje ciąg, z którym ma zostać poprzedzony opis wydania, jeśli istnieje, podczas wyświetlania powiadomienia o aktualizacji użytkownikowi końcowemu. Wartości domyślne
" Description: "
mandatoryContinueButtonLabel (Ciąg) — tekst używany dla przycisku, który użytkownik końcowy musi nacisnąć, aby zainstalować obowiązkową aktualizację. Wartość domyślna to
"Continue"
.mandatoryUpdateMessage (ciąg) — tekst używany jako treść powiadomienia o aktualizacji, gdy aktualizacja jest określana jako obowiązkowa. Wartość domyślna to
"An update is available that must be installed."
.optionalIgnoreButtonLabel (Ciąg) — tekst używany dla przycisku, który użytkownik końcowy może nacisnąć, aby zignorować dostępną opcjonalną aktualizację. Wartość domyślna to
"Ignore"
.optionalInstallButtonLabel (ciąg) — tekst używany dla przycisku, który użytkownik końcowy może nacisnąć, aby zainstalować opcjonalną aktualizację. Wartość domyślna to
"Install"
.optionalUpdateMessage (ciąg) — tekst używany jako treść powiadomienia o aktualizacji, gdy aktualizacja jest opcjonalna. Wartość domyślna to
"An update is available. Would you like to install it?"
.title (String) — tekst używany jako nagłówek powiadomienia o aktualizacji wyświetlanego użytkownikowi końcowemu. Wartość domyślna to
"Update available"
.
rollbackRetryOptions (RollbackRetryOptions) — mechanizm ponawiania wycofywania umożliwia aplikacji podjęcie próby ponownej instalacji aktualizacji, która została wcześniej wycofana (z ograniczeniami określonymi w opcjach). Jest to obiekt "options" używany do określenia, czy powinno nastąpić ponowne ponowienie próby wycofania, a jeśli tak, jakie ustawienia mają być używane na potrzeby ponawiania wycofywania. Domyślnie ma wartość null, co ma wpływ na wyłączenie mechanizmu ponawiania prób. Ustawienie tej wartości na dowolną wartość prawdy spowoduje włączenie mechanizmu ponawiania z ustawieniami domyślnymi, a przekazanie obiektu do tego parametru umożliwia włączenie ponawiania wycofywania, a także zastąpienie co najmniej jednej wartości domyślnej.
Poniższa lista reprezentuje dostępne opcje i ich wartości domyślne:
delayInHours (Liczba) — określa minimalny czas w godzinach oczekiwania aplikacji po ostatnim wycofaniu przed podjęciem próby ponownej instalacji tego samego wycofanego pakietu. Nie może być mniejszy niż
0
. Może to być liczba zmiennoprzecinkowa. Wartość domyślna to24
.maxRetryAttempts (Liczba) — określa maksymalną liczbę ponownych prób, które aplikacja może wykonać przed zatrzymanie próby. Nie może być mniejszy niż
1
. Wartość domyślna to1
.
codePushStatusDidChange (punkt zaczepienia zdarzeń)
Wywoływane, gdy proces synchronizacji przechodzi z jednego etapu do drugiego w ogólnym procesie aktualizacji. Punkt zaczepienia zdarzeń jest wywoływany przy użyciu kodu stanu reprezentującego bieżący stan i może być dowolną SyncStatus
z wartości.
codePushDownloadDidProgress (event hook)
Wywoływane okresowo, gdy dostępna aktualizacja jest pobierana z serwera CodePush. Metoda jest wywoływana z obiektem DownloadProgress
, który zawiera następujące dwie właściwości:
totalBytes (Number) — łączna liczba bajtów, które mają zostać odebrane dla tej aktualizacji (jest to rozmiar zestawu plików, który zmienił się z poprzedniej wersji).
receivedBytes (Number) — liczba pobranych do tej pory bajtów, których można użyć do śledzenia postępu pobierania.
codePush.allowRestart
codePush.allowRestart(): void;
Reallows programowe ponowne uruchomienia, które w przeciwnym razie zostałyby odrzucone z powodu poprzedniego wywołania metody disallowRestart
. Jeśli disallowRestart
nigdy nie została wywołana w pierwszej kolejności, wywołanie tej metody powoduje brak operacji.
Jeśli aktualizacja CodePush jest obecnie oczekująca, która próbowała ponownie uruchomić aplikację (na przykład użyto InstallMode.IMMEDIATE
jej ), ale została zablokowana z disallowRestart
powodu wywołania wywołania, wywołanie allowRestart
spowoduje natychmiastowe ponowne uruchomienie. To ponowne uruchomienie umożliwia jak najszybsze zastosowanie aktualizacji bez przerywania pracy użytkownika końcowego podczas krytycznych przepływów pracy (na przykład procesu dołączania).
Na przykład wywołanie allowRestart
wywołania spowoduje natychmiastowe ponowne uruchomienie, jeśli jeden z trzech scenariuszy wymienionych w disallowRestart
dokumentacji wystąpił po disallowRestart
wywołaniu. Jednak wywołanie allowRestart
wywołania nie wyzwoli ponownego uruchomienia, jeśli spełnione są następujące kwestie:
Nie zainstalowano żadnych aktualizacji CodePush od czasu ostatniego
disallowRestart
wywołania, a więc nie ma potrzeby ponownego uruchamiania.Obecnie istnieje oczekująca aktualizacja CodePush, ale została zainstalowana za pośrednictwem
InstallMode.ON_NEXT_RESTART
metody , więc ponowne uruchomienie programowe nie jest wymagane.Obecnie istnieje oczekująca aktualizacja CodePush, ale została zainstalowana za pośrednictwem programu
InstallMode.ON_NEXT_RESUME
, a aplikacja nie została jeszcze umieszczona w tle, więc nie ma jeszcze potrzeby programowego ponownego uruchamiania.Nie podjęto żadnych połączeń
restartApp
od czasu ostatniegodisallowRestart
wywołania.
To zachowanie gwarantuje, że w wyniku wywołania allowRestart
nie zostaną wyzwolone żadne ponowne uruchomienia, chyba że zostanie jawnie zażądany w okresie niedozwolonym. W ten sposób allowRestart
funkcja jest podobna do wywołania restartApp(true)
metody , z wyjątkiem tego, że były wyzwala ponowne uruchomienie tylko wtedy, gdy aktualnie oczekująca aktualizacja chce się ponownie uruchomić, ale ta ostatnia zostanie uruchomiona ponownie tak długo, jak długo trwa oczekiwanie na aktualizację.
Zobacz nie zezwalajRestart , aby zapoznać się z przykładem użycia tej metody.
codePush.checkForUpdate
codePush.checkForUpdate(deploymentKey: String = null, handleBinaryVersionMismatchCallback: (update: RemotePackage) => void): Promise<RemotePackage>;
Wysyła zapytanie do usługi CodePush, aby sprawdzić, czy skonfigurowane wdrożenie aplikacji ma dostępną aktualizację. Domyślnie będzie on używać klucza wdrożenia skonfigurowanego w pliku Info.plist (iOS) lub pliku MainActivity.java (Android), ale można zastąpić to, określając wartość za pomocą opcjonalnego deploymentKey
parametru. Może to być przydatne, gdy chcesz dynamicznie "przekierowywać" użytkownika do określonego wdrożenia, na przykład zezwalać na "wczesny dostęp" za pośrednictwem jaja wielkanocnego lub przełącznika ustawień użytkownika.
Drugi opcjonalny parametr handleBinaryVersionMismatchCallback
to opcjonalna funkcja wywołania zwrotnego, która może służyć do powiadamiania użytkownika, jeśli istnieje jakakolwiek aktualizacja binarna.
Rozważmy na przykład przypadek użycia, w którym obecnie zainstalowana wersja binarna to 1.0.1 z etykietą (etykietą wypychania kodu) w wersji 1. Później kod natywny został zmieniony w cyklu deweloperskim, a wersja binarna została zaktualizowana do wersji 1.0.2. Po wyzwoleniu sprawdzania aktualizacji codepush ignorujemy aktualizacje o niezgodności wersji binarnej (ponieważ aktualizacja nie jest przeznaczona dla wersji binarnej aktualnie zainstalowanej aplikacji). W takim przypadku zainstalowana aplikacja (1.0.1) zignoruje aktualizację przeznaczoną dla wersji 1.0.2. Możesz użyć handleBinaryVersionMismatchCallback
polecenia , aby zapewnić punkt zaczepienia do obsługi takich sytuacji.
Ważne
Należy zachować ostrożność podczas używania alertów w ramach tego wywołania zwrotnego, jeśli tworzysz aplikację dla systemu iOS, ze względu na proces przeglądu sklepu App Store : aplikacje nie mogą wymuszać oceniania aplikacji, przeglądania aplikacji, pobierania innych aplikacji lub innych podobnych akcji w celu uzyskania dostępu do funkcji, zawartości lub korzystania z aplikacji.
Ta metoda zwraca Promise
wartość , która rozpoznaje jedną z dwóch możliwych wartości:
null
jeśli nie ma dostępnej aktualizacji. Może to wystąpić w następujących scenariuszach:- Skonfigurowane wdrożenie nie zawiera żadnych wydań, a więc nic do zaktualizowania.
- Najnowsza wersja w skonfigurowanym wdrożeniu jest przeznaczona dla innej wersji binarnej niż bieżąca wersja (starsza lub nowsza).
- Obecnie uruchomiona aplikacja ma już najnowszą wersję ze skonfigurowanego wdrożenia, dlatego nie wymaga jej ponownie.
- Najnowsza wersja w skonfigurowanym wdrożeniu jest obecnie oznaczona jako wyłączona, więc nie można jej pobrać.
- Najnowsza wersja w skonfigurowanym wdrożeniu jest w stanie "aktywnego wdrażania", a żądanie urządzenia nie mieści się w procentach użytkowników, którzy się do niego kwalifikują.
Wystąpienie
RemotePackage
reprezentujące dostępną aktualizację, którą można sprawdzić lub później pobrać.
Przykładowe użycie:
codePush.checkForUpdate()
.then((update) => {
if (!update) {
console.log("The app is up to date!");
} else {
console.log("An update is available! Should we download it?");
}
});
codePush.disallowRestart
codePush.disallowRestart(): void;
Tymczasowo nie zezwala na programowe ponowne uruchamianie w wyniku jednego z następujących scenariuszy:
Aktualizacja CodePush jest instalowana przy użyciu polecenia
InstallMode.IMMEDIATE
Aktualizacja CodePush jest instalowana przy użyciu i
InstallMode.ON_NEXT_RESUME
aplikacja jest wznawiana z poziomu tła (opcjonalnie ograniczana przezminimumBackgroundDuration
właściwość)Wywołano
restartApp
metodęUwaga
Kroki 1 i 2 skutecznie działają, wzywając
restartApp
Cię do blokowania dowolnego wywołaniarestartApp
, niezależnie od tego,disallowRestart
czy aplikacja wywołuje ją bezpośrednio, czy pośrednio.
Po wywołaniu tej metody wszystkie wywołania sync
nadal będą mogły sprawdzać dostępność aktualizacji, pobierać ją i instalować, ale próba ponownego uruchomienia aplikacji zostanie wstrzymana do momentu allowRestart
wywołania wywołania. Dzięki temu żądanie ponownego uruchomienia jest przechwytywane i może być "opróżniane", gdy chcesz zezwolić na jego wystąpienie.
Jest to zaawansowany interfejs API i jest przydatny przede wszystkim wtedy, gdy poszczególne składniki w aplikacji (na przykład proces dołączania) muszą mieć pewność, że żadne przerwy użytkownika końcowego mogą wystąpić w okresie ich istnienia, a jednocześnie umożliwić aplikacji synchronizowanie z serwerem CodePush we własnym tempie i używanie dowolnego odpowiedniego trybu instalacji. Ma to korzyść z umożliwienia aplikacji odnajdywania i pobierania dostępnych aktualizacji tak szybko, jak to możliwe, przy jednoczesnym zapobieganiu zakłóceniom w kluczowych środowiskach użytkownika końcowego.
Alternatywnie można również użyć InstallMode.ON_NEXT_RESTART
przy każdym wywołaniu sync
(co nigdy nie będzie próbować programowo ponownie uruchomić aplikację), a następnie jawnie wywołać wywołanie restartApp
punktów w aplikacji, które są "bezpieczne", aby to zrobić. disallowRestart
Zapewnia alternatywne podejście do tego, gdy kod, który synchronizuje się z serwerem CodePush, jest oddzielony od kodu/składników, które chcą wymusić zasady bez ponownego uruchamiania.
Przykładowe użycie:
class OnboardingProcess extends Component {
...
componentWillMount() {
// Ensure that any CodePush updates that are
// synchronized in the background can't trigger
// a restart while this component is mounted.
codePush.disallowRestart();
}
componentWillUnmount() {
// Reallow restarts, and optionally trigger
// a restart if one was currently pending.
codePush.allowRestart();
}
...
}
codePush.getCurrentPackage
Uwaga
Ta metoda jest uważana za przestarzałą w module v1.10.3-beta
CodePush. Jeśli używasz tej wersji (lub nowszej), zalecamy użycie elementu codePush.getUpdateMetadata
, ponieważ ma bardziej przewidywalne zachowanie.
codePush.getCurrentPackage(): Promise<LocalPackage>;
Pobiera metadane dotyczące aktualnie zainstalowanego "pakietu" (na przykład opis, czas instalacji). Może to być przydatne w scenariuszach, takich jak wyświetlenie okna dialogowego "co nowego?" po zastosowaniu aktualizacji lub sprawdzenie, czy istnieje oczekująca aktualizacja, która oczekuje na zastosowanie za pośrednictwem wznowienia lub ponownego uruchomienia.
Ta metoda zwraca Promise
wartość , która rozpoznaje jedną z dwóch możliwych wartości:
null
jeśli aplikacja aktualnie uruchamia pakiet JS z pliku binarnego, a nie aktualizację CodePush. Dzieje się tak w następujących scenariuszach:- Użytkownik końcowy zainstalował plik binarny aplikacji i musi jeszcze zainstalować aktualizację CodePush
- Użytkownik końcowy zainstalował aktualizację pliku binarnego (na przykład ze sklepu), która wyczyściła stare aktualizacje CodePush i dała pierwszeństwo przed plikiem binarnym JS w pliku binarnym.
Wystąpienie
LocalPackage
reprezentujące metadane aktualnie uruchomionej aktualizacji CodePush.
Przykładowe użycie:
codePush.getCurrentPackage()
.then((update) => {
// If the current app "session" represents the first time
// this update has run, and it had a description provided
// with it upon release, let's show it to the end user
if (update.isFirstRun && update.description) {
// Display a "what's new?" modal
}
});
codePush.getUpdateMetadata
codePush.getUpdateMetadata(updateState: UpdateState = UpdateState.RUNNING): Promise<LocalPackage>;
Pobiera metadane zainstalowanej aktualizacji (na przykład opis, obowiązkowy), których stan jest zgodny z określonym updateState
parametrem. Może to być przydatne w scenariuszach, takich jak wyświetlenie okna dialogowego "co nowego?" po zastosowaniu aktualizacji lub sprawdzenie, czy istnieje oczekująca aktualizacja, która oczekuje na zastosowanie za pośrednictwem wznowienia lub ponownego uruchomienia. Aby uzyskać więcej informacji na temat możliwych stanów aktualizacji i ich reprezentacji, zobacz informacje o dokumentacji UpdateState.
Ta metoda zwraca Promise
wartość , która rozpoznaje jedną z dwóch możliwych wartości:
null
jeśli aktualizacja o określonym stanie nie istnieje obecnie. Dzieje się tak w następujących scenariuszach:Użytkownik końcowy nie zainstalował jeszcze żadnych aktualizacji CodePush i dlatego żadne metadane nie są dostępne dla żadnych aktualizacji, bez względu na to, co określisz
updateState
jako parametr.Użytkownik końcowy zainstalował aktualizację pliku binarnego (na przykład ze sklepu), która wyczyściła stare aktualizacje CodePush i dała pierwszeństwo przed plikiem binarnym JS w pliku binarnym. Będzie to miało takie samo zachowanie jak #1
Parametr
updateState
jest ustawiony naUpdateState.RUNNING
wartość , ale aplikacja nie uruchamia obecnie aktualizacji CodePush. Może istnieć oczekująca aktualizacja, ale aplikacja nie została jeszcze ponownie uruchomiona, aby była aktywna.Parametr
updateState
jest ustawiony naUpdateState.PENDING
wartość , ale aplikacja nie ma obecnie oczekujących aktualizacji.
LocalPackage
Wystąpienie, które reprezentuje metadane aktualnie żądanej aktualizacji CodePush (uruchomione lub oczekujące).
Przykładowe użycie:
// Check if there's currently a CodePush update running, and if
// so, register it with the HockeyApp SDK (https://github.com/slowpath/react-native-hockeyapp)
// so that crash reports will correctly display the JS bundle version the user was running.
codePush.getUpdateMetadata().then((update) => {
if (update) {
hockeyApp.addMetadata({ CodePushRelease: update.label });
}
});
// Check to see if there's still an update pending.
codePush.getUpdateMetadata(UpdateState.PENDING).then((update) => {
if (update) {
// There's a pending update, do we want to force a restart?
}
});
codePush.notifyAppReady
codePush.notifyAppReady(): Promise<void>;
Powiadamia środowisko uruchomieniowe CodePush, że świeżo zainstalowana aktualizacja powinna zostać uznana za pomyślną, dlatego automatyczne wycofanie po stronie klienta nie jest konieczne. Należy wywołać tę funkcję gdzieś w kodzie zaktualizowanego pakietu. W przeciwnym razie po następnym ponownym uruchomieniu aplikacji środowisko uruchomieniowe CodePush zakłada, że zainstalowana aktualizacja nie powiodła się i wycofała poprzednią wersję. To zachowanie istnieje, aby zapewnić, że użytkownicy końcowi nie są blokowani przez uszkodzoną aktualizację.
Jeśli używasz sync
funkcji i przeprowadzasz sprawdzanie aktualizacji podczas uruchamiania aplikacji, nie musisz notifyAppReady
wywoływać ręcznie, ponieważ sync
wywoła ją za Ciebie. To zachowanie istnieje z powodu założenia, że po sync
wywołaniu w aplikacji stanowi dobre przybliżenie pomyślnego uruchomienia.
Uwaga
Ta metoda jest również aliasowana jako notifyApplicationReady
(w przypadku zgodności z poprzednimi wersjami).
codePush.restartApp
codePush.restartApp(onlyIfUpdateIsPending: Boolean = false): void;
Natychmiast ponownie uruchomi aplikację. Jeśli do parametru onlyIfUpdateIsPending
zostanie podana wartość prawda, aplikacja zostanie uruchomiona ponownie tylko wtedy, gdy w rzeczywistości będzie czekać na zastosowanie oczekującej aktualizacji.
Ta metoda jest przeznaczona dla zaawansowanych scenariuszy i jest przydatna przede wszystkim wtedy, gdy spełnione są następujące warunki:
Aplikacja określa wartość
ON_NEXT_RESTART
trybu instalacji lubON_NEXT_RESUME
podczas wywoływaniasync
metod lubLocalPackage.install
. Ta aktualizacja nie zostanie zastosowana do momentu ponownego uruchomienia aplikacji (przez użytkownika końcowego lub systemu operacyjnego) ani wznowienia, a więc aktualizacja nie zostanie natychmiast wyświetlona użytkownikowi końcowemu.Masz zdarzenie użytkownika specyficzne dla aplikacji (na przykład użytkownik końcowy przechodzi z powrotem do trasy głównej aplikacji), które umożliwia zastosowanie aktualizacji w sposób nietrudny i potencjalnie pobiera aktualizację do użytkownika końcowego wcześniej niż oczekiwanie na następne ponowne uruchomienie lub wznowienie.
codePush.sync
codePush.sync(options: Object, syncStatusChangeCallback: function(syncStatus: Number), downloadProgressCallback: function(progress: DownloadProgress), handleBinaryVersionMismatchCallback: function(update: RemotePackage)): Promise<Number>;
Synchronizuje pakiet JavaScript aplikacji i zasoby obrazów z najnowszą wersją do skonfigurowanego wdrożenia. W przeciwieństwie do metody checkForUpdate, która sprawdza obecność aktualizacji, i określimy, co należy zrobić dalej, sync
obsługuje sprawdzanie aktualizacji, pobieranie i instalację.
Ta metoda zapewnia obsługę dwóch różnych (ale dostosowywalnych) trybów w celu łatwego włączania aplikacji z różnymi wymaganiami:
Tryb dyskretny (zachowanie domyślne) automatycznie pobiera dostępne aktualizacje i stosuje je przy następnym ponownym uruchomieniu aplikacji (na przykład system operacyjny lub użytkownik końcowy go zabił lub urządzenie zostało uruchomione ponownie). Dzięki temu całe środowisko aktualizacji jest "dyskretne" dla użytkownika końcowego, ponieważ nie widzi żadnych monitów o aktualizację ani "syntetycznych" ponownych uruchomień aplikacji.
Tryb aktywny, który po udostępnieniu aktualizacji monituje użytkownika końcowego o uprawnienie przed jego pobraniem, a następnie natychmiast zastosuje aktualizację. Jeśli aktualizacja została wydana przy użyciu
mandatory
flagi, użytkownik końcowy nadal będzie powiadamiany o aktualizacji, ale nie będzie miał wyboru, aby go zignorować.
Przykładowe użycie:
// Fully silent update that keeps the app in
// sync with the server, without ever
// interrupting the end user
codePush.sync();
// Active update, which lets the end user know
// about each update, and displays it to them
// immediately after downloading it
codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE });
Napiwek
Jeśli chcesz zdecydować, czy sprawdzasz, czy pobierasz dostępną aktualizację na podstawie poziomu baterii urządzenia użytkownika końcowego, warunków sieciowych itp., zawijanie wywołania sync
w warunku, który gwarantuje, że wywołanie jest wywoływane tylko wtedy, gdy jest potrzebne.
SyncOptions
sync
Metoda próbuje ułatwić cichą i aktywną aktualizację z niewielką konfiguracją, ale akceptuje obiekt "opcje", który umożliwia dostosowanie wielu aspektów domyślnego zachowania wymienionego powyżej. Dostępne opcje są identyczne z opcjami CodePushOptions, z wyjątkiem checkFrequency
opcji:
deploymentKey (ciąg) — zapoznaj się z tematem
CodePushOptions
.installMode (codePush.InstallMode) — zobacz
CodePushOptions
.mandatoryInstallMode (codePush.InstallMode) — zobacz
CodePushOptions
.minimumBackgroundDuration (Liczba) — zobacz
CodePushOptions
.updateDialog (UpdateDialogOptions) — zobacz
CodePushOptions
.rollbackRetryOptions (RollbackRetryOptions) — zobacz
CodePushOptions
.
Przykładowe użycie:
// Use a different deployment key for this
// specific call, instead of the one configured
// in the Info.plist file
codePush.sync({ deploymentKey: "KEY" });
// Download the update silently, but install it on
// the next resume, as long as at least 5 minutes
// has passed since the app was put into the background.
codePush.sync({ installMode: codePush.InstallMode.ON_NEXT_RESUME, minimumBackgroundDuration: 60 * 5 });
// Download the update silently, and install optional updates
// on the next restart, but install mandatory updates on the next resume.
codePush.sync({ mandatoryInstallMode: codePush.InstallMode.ON_NEXT_RESUME });
// Changing the title displayed in the
// confirmation dialog of an "active" update
codePush.sync({ updateDialog: { title: "An update is available!" } });
// Displaying an update prompt which includes the
// description for the CodePush release
codePush.sync({
updateDialog: {
appendReleaseDescription: true,
descriptionPrefix: "\n\nChange log:\n"
},
installMode: codePush.InstallMode.IMMEDIATE
});
// Shortening the retry delay and increasing
// the number of maximum retry attempts
// in comparison to defaults
codePush.sync({
rollbackRetryOptions: {
delayInHours: 8,
maxRetryAttempts: 3
}
});
Oprócz opcji sync
metoda akceptuje również kilka opcjonalnych parametrów funkcji, które umożliwiają subskrybowanie cyklu życia sync
"potoku", aby wyświetlić dodatkowy interfejs użytkownika zgodnie z potrzebami (na przykład "sprawdzanie modalne aktualizacji lub postęp pobierania):
syncStatusChangedCallback ((syncStatus: Number) => void) — wywoływana, gdy proces synchronizacji przechodzi z jednego etapu do drugiego w ogólnym procesie aktualizacji. Metoda jest wywoływana przy użyciu kodu stanu, który reprezentuje bieżący stan i może być dowolną z
SyncStatus
wartości.downloadProgressCallback ((progress: DownloadProgress) => void) — wywoływany okresowo, gdy dostępna aktualizacja jest pobierana z serwera CodePush. Metoda jest wywoływana z obiektem
DownloadProgress
, który zawiera następujące dwie właściwości:totalBytes (Number) — łączna liczba bajtów, które mają zostać odebrane dla tej aktualizacji (jest to rozmiar zestawu plików, który zmienił się z poprzedniej wersji).
receivedBytes (Number) — liczba pobranych do tej pory bajtów, których można użyć do śledzenia postępu pobierania.
handleBinaryVersionMismatchCallback ((update: RemotePackage) => void) — wywoływana, gdy dostępna jest dowolna aktualizacja binarna. Metoda jest wywoływana z obiektem
RemotePackage
. Aby uzyskać więcej informacji, zobacz sekcję codePush.checkForUpdate .
Przykładowe użycie:
// Prompt the user when an update is available
// and then display a "downloading" modal
codePush.sync({ updateDialog: true },
(status) => {
switch (status) {
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
// Show "downloading" modal
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
// Hide "downloading" modal
break;
}
},
({ receivedBytes, totalBytes, }) => {
/* Update download modal progress */
}
);
Ta metoda zwraca metodę Promise
, która jest rozpoznawana jako SyncStatus
kod wskazujący, dlaczego sync
wywołanie powiodło się. Ten kod może być jedną z następujących SyncStatus
wartości:
codePush.SyncStatus.UP_TO_DATE (4) — aplikacja jest aktualna na serwerze CodePush.
codePush.SyncStatus.UPDATE_IGNORED (5) — aplikacja miała opcjonalną aktualizację, którą użytkownik końcowy zdecydował się zignorować. (Ma to zastosowanie tylko wtedy, gdy
updateDialog
jest używany)codePush.SyncStatus.UPDATE_INSTALLED (6) — aktualizacja została zainstalowana i zostanie uruchomiona natychmiast po
syncStatusChangedCallback
powrocie funkcji lub następnym wznowieniu/ponownym uruchomieniu aplikacji w zależności od określonegoInstallMode
wSyncOptions
elem.codePush.SyncStatus.SYNC_IN_PROGRESS (7) — trwa operacja
sync
, która uniemożliwia wykonanie bieżącego wywołania.
Metodę sync
można wywołać w dowolnym miejscu, w którym chcesz sprawdzić aktualizację. Może to być zdarzenie componentWillMount
cyklu życia składnika głównego, program obsługi <TouchableHighlight>
onPress składnika, w wywołaniu zwrotnym okresowego czasomierza lub cokolwiek innego ma sens dla Twoich potrzeb. Podobnie jak metoda checkForUpdate
, wykonuje żądanie sieciowe, aby sprawdzić aktualizację w tle, więc nie wpłynie to na czas odpowiedzi wątku interfejsu użytkownika ani wątku JavaScript.
Spakuj obiekty
Metody checkForUpdate
i getUpdateMetadata
zwracają Promise
obiekty, które po rozpoznaniu zapewniają dostęp do obiektów "package". Pakiet reprezentuje aktualizację kodu i wszelkie dodatkowe metadane (takie jak opis, obowiązkowy?). Interfejs API CodePush ma rozróżnienie między następującymi typami pakietów:
LocalPackage: reprezentuje pobraną aktualizację, która jest już uruchomiona lub została zainstalowana i oczekuje na ponowne uruchomienie aplikacji.
RemotePackage: reprezentuje dostępną aktualizację na serwerze CodePush, który nie został jeszcze pobrany.
Pakiet lokalny
Zawiera szczegółowe informacje o aktualizacji, która została pobrana lokalnie lub już zainstalowana. Odwołanie do wystąpienia tego obiektu można uzyskać, wywołując metodę na poziomie getUpdateMetadata
modułu lub jako wartość obietnicy zwróconej przez metodę RemotePackage.download
.
Właściwości
- appVersion: wersja binarna aplikacji zależna od tej aktualizacji. Jest to wartość określona za pośrednictwem parametru
appStoreVersion
podczas wywoływania polecenia interfejsu wiersza poleceniarelease
. (Ciąg) - deploymentKey: klucz wdrożenia, który został użyty do pierwotnego pobrania tej aktualizacji. (Ciąg)
- description: Opis aktualizacji. Jest to ta sama wartość określona w interfejsie wiersza polecenia po wydaniu aktualizacji. (Ciąg)
- failedInstall: wskazuje, czy ta aktualizacja została wcześniej zainstalowana, ale została wycofana. Metoda
sync
automatycznie zignoruje aktualizacje, które wcześniej zakończyły się niepowodzeniem, więc musisz martwić się tylko o tę właściwość, jeśli używasz poleceniacheckForUpdate
. (Wartość logiczna) - isFirstRun: wskazuje, czy po raz pierwszy aktualizacja została uruchomiona po zainstalowaniu. Jest to przydatne do określania, czy chcesz wyświetlić "Co nowego?" Interfejs użytkownika użytkownika końcowego po zainstalowaniu aktualizacji. (Wartość logiczna)
- isMandatory: wskazuje, czy aktualizacja jest uznawana za obowiązkową. Jest to wartość określona w interfejsie wiersza polecenia po wydaniu aktualizacji. (Wartość logiczna)
- isPending: wskazuje, czy ta aktualizacja jest w stanie "oczekiwanie". Gdy
true
oznacza to, że aktualizacja została pobrana i zainstalowana, ale ponowne uruchomienie aplikacji wymagane do jej zastosowania nie miało jeszcze miejsca i dlatego jego zmiany nie są obecnie widoczne dla użytkownika końcowego. (Wartość logiczna) - label: etykieta wewnętrzna automatycznie nadana aktualizacji przez serwer CodePush, na przykład
v5
. Ta wartość jednoznacznie identyfikuje aktualizację we wdrożeniu. (Ciąg) - packageHash: wartość skrótu SHA aktualizacji. (Ciąg)
- packageSize: rozmiar kodu zawartego w aktualizacji w bajtach. (Liczba)
Metody
- install(installMode: codePush.InstallMode = codePush.InstallMode.ON_NEXT_RESTART, minimumBackgroundDuration = 0): Promise<void>: instaluje aktualizację, zapisując ją na dysku, na którym środowisko uruchomieniowe oczekuje znalezienia najnowszej wersji aplikacji. Parametr
installMode
określa, kiedy zmiany są prezentowane użytkownikowi końcowemu. Wartością domyślną jest zaczekać na ponowne uruchomienie następnej aplikacji, aby wyświetlić zmiany, ale możesz zapoznać się z odwołaniem do wyliczenia, aby zapoznać sięInstallMode
z opisem dostępnych opcji i ich działania.installMode
Jeśli parametr jest ustawiony naInstallMode.ON_NEXT_RESUME
wartość ,minimumBackgroundDuration
parametr umożliwia kontrolowanie, jak długo aplikacja musi znajdować się w tle przed wymuszeniem instalacji po wznowieniu.
RemotePackage
Zawiera szczegółowe informacje o aktualizacji dostępnej do pobrania z serwera CodePush. Odwołanie do wystąpienia tego obiektu można uzyskać, wywołując checkForUpdate
metodę, gdy aktualizacja jest dostępna. Jeśli używasz interfejsu sync
API, nie musisz martwić się o RemotePackage
element , ponieważ automatycznie obsłuży proces pobierania i instalacji.
Właściwości
Obiekt RemotePackage
dziedziczy wszystkie te same właściwości co LocalPackage
element , ale obejmuje jedną dodatkową:
- downloadUrl: adres URL, pod którym pakiet jest dostępny do pobrania. Ta właściwość jest wymagana tylko do użycia zaawansowanego, ponieważ
download
metoda automatycznie obsłuży pozyskiwanie aktualizacji. (Ciąg)
Metody
- download(downloadProgressCallback?: Funkcja): Promise<LocalPackage>: pobiera dostępną aktualizację z usługi CodePush.
downloadProgressCallback
Jeśli parametr zostanie określony, będzie okresowo wywoływany z obiektemDownloadProgress
({ totalBytes: Number, receivedBytes: Number }
), który zgłasza postęp pobierania do momentu ukończenia. Zwraca obietnicę, która jest rozpoznawana za pomocą .LocalPackage
Wyliczenia
Interfejs API CodePush zawiera następujące wyliczenia, które mogą służyć do dostosowywania środowiska aktualizacji:
InstallMode
To wyliczenie określa, kiedy chcesz, aby zainstalowana aktualizacja została rzeczywiście zastosowana i może zostać przekazana do sync
metod lub LocalPackage.install
. Zawiera następujące wartości:
codePush.InstallMode.IMMEDIATE (0) — wskazuje, że chcesz zainstalować aktualizację i natychmiast ponownie uruchomić aplikację. Ta wartość jest odpowiednia dla scenariuszy debugowania, a także podczas wyświetlania użytkownikowi monitu o aktualizację, ponieważ spodziewa się, że zmiany zostaną wyświetlone natychmiast po zaakceptowaniu instalacji. Ponadto ten tryb może służyć do wymuszania obowiązkowych aktualizacji, ponieważ usuwa potencjalnie niepożądane opóźnienie między instalacją aktualizacji a następnym ponownym uruchomieniem lub wznowienia aplikacji przez użytkownika końcowego.
codePush.InstallMode.ON_NEXT_RESTART (1) — wskazuje, że chcesz zainstalować aktualizację, ale nie wymuszaj ponownego uruchamiania aplikacji. Gdy aplikacja jest "naturalnie" ponownie uruchomiona (ze względu na system operacyjny lub użytkownik końcowy zabijający ją), aktualizacja zostanie bezproblemowo pobrana. Ta wartość jest odpowiednia podczas przeprowadzania dyskretnych aktualizacji, ponieważ prawdopodobnie zakłóca działanie użytkownika końcowego, jeśli aplikacja nagle uruchamia się ponownie znikąd. Nie zdawali sobie sprawy, że aktualizacja została nawet pobrana. Jest to tryb domyślny używany zarówno dla metod , jak
sync
iLocalPackage.install
.codePush.InstallMode.ON_NEXT_RESUME (2) — wskazuje, że chcesz zainstalować aktualizację, ale nie chcesz ponownie uruchamiać aplikacji do czasu następnego wznowienia jej z poziomu tła przez użytkownika końcowego. W ten sposób nie zakłócasz bieżącej sesji, ale możesz uzyskać aktualizację przed nimi wcześniej niż trzeba czekać na następne naturalne ponowne uruchomienie. Ta wartość jest odpowiednia dla instalacji dyskretnych, które można stosować w wznowieniu w sposób nieinwazyjny.
codePush.InstallMode.ON_NEXT_SUSPEND (3) — wskazuje, że chcesz zainstalować aktualizację w tle, ale dopiero po jej przejściu w tle przez
minimumBackgroundDuration
sekundy (domyślnie 0), aby kontekst użytkownika nie został utracony, chyba że zawieszenie aplikacji jest wystarczająco długie, aby nie miało znaczenia.
CheckFrequency
To wyliczenie określa, kiedy aplikacja ma być synchronizowana z serwerem aktualizacji i może zostać przekazana do dekoratora codePushify
. Zawiera następujące wartości:
codePush.CheckFrequency.ON_APP_START (0) — wskazuje, że chcesz sprawdzić dostępność aktualizacji za każdym razem, gdy proces aplikacji zostanie uruchomiony.
codePush.CheckFrequency.ON_APP_RESUME (1) — wskazuje, że chcesz sprawdzić dostępność aktualizacji za każdym razem, gdy aplikacja zostanie przywrócona na pierwszym planie po naciśnięciu przycisku Strona główna, aplikacja uruchamia oddzielny proces płatności itd.
codePush.CheckFrequency.MANUAL (2) — wyłącz automatyczne sprawdzanie aktualizacji, ale sprawdzaj tylko, kiedy
codePush.sync()
jest wywoływana w kodzie aplikacji.
SyncStatus
To wyliczenie syncStatusChangedCallback
jest udostępniane funkcji, którą można przekazać do sync
metody, aby podłączyć się do ogólnego procesu aktualizacji. Zawiera następujące wartości:
- codePush.SyncStatus.CHECKING_FOR_UPDATE (0) — serwer CodePush jest odpytywany o aktualizację.
- codePush.SyncStatus.AWAITING_USER_ACTION (1) — aktualizacja jest dostępna, a użytkownikowi końcowemu zostało wyświetlone okno dialogowe potwierdzenia. (Ma to zastosowanie tylko wtedy, gdy
updateDialog
jest używany) - codePush.SyncStatus.DOWNLOADING_PACKAGE (2) — dostępna aktualizacja jest pobierana z serwera CodePush.
- codePush.SyncStatus.INSTALLING_UPDATE (3) — pobrano dostępną aktualizację i zostanie ona zainstalowana.
- codePush.SyncStatus.UP_TO_DATE (4) — aplikacja jest w pełni aktualna w przypadku skonfigurowanego wdrożenia.
- codePush.SyncStatus.UPDATE_IGNORED (5) — aplikacja ma opcjonalną aktualizację, którą użytkownik końcowy zdecydował się zignorować. (Ma to zastosowanie tylko wtedy, gdy
updateDialog
jest używany) - codePush.SyncStatus.UPDATE_INSTALLED (6) — dostępna aktualizacja została zainstalowana i zostanie uruchomiona natychmiast po
syncStatusChangedCallback
powrocie funkcji lub następnym wznowieniu/ponownym uruchomieniu aplikacji w zależności od określonegoInstallMode
wSyncOptions
. - codePush.SyncStatus.SYNC_IN_PROGRESS (7) — trwa operacja
sync
uniemożliwiająca wykonanie bieżącego wywołania. - codePush.SyncStatus.UNKNOWN_ERROR (-1) — operacja synchronizacji wykryła nieznany błąd.
UpdateState
To wyliczenie określa stan, w jaki obecnie znajduje się aktualizacja, i można go określić podczas wywoływania getUpdateMetadata
metody. Zawiera następujące wartości:
codePush.UpdateState.RUNNING (0) — wskazuje, że aktualizacja reprezentuje wersję aktualnie uruchomionej aplikacji. Może to być przydatne w przypadku identyfikowania atrybutów aplikacji w scenariuszach, takich jak wyświetlanie opisu wydania w oknie dialogowym "co nowego?" lub raportowanie najnowszej wersji do usługi analizy lub raportowania awarii.
codePush.UpdateState.PENDING (1) — wskazuje, że zainstalowano aktualizację, ale aplikacja nie została jeszcze ponownie uruchomiona, aby ją zastosować. Może to być przydatne do określenia, czy istnieje oczekująca aktualizacja, którą można wymusić programowe ponowne uruchomienie (za pośrednictwem
restartApp
) do zastosowania.codePush.UpdateState.LATEST (2) — wskazuje, że aktualizacja reprezentuje najnowszą dostępną wersję i może być aktualnie uruchomiona lub oczekująca.
Dokumentacja interfejsu API języka Objective-C (iOS)
Interfejs API języka Objective-C jest udostępniany przez zaimportowanie nagłówka CodePush.h
do pliku AppDelegate.m i składa się z pojedynczej klasy publicznej o nazwie CodePush
.
CodePush
Zawiera metody statyczne pobierania NSURL
pliku, który reprezentuje najnowszy plik pakietu JavaScript, i może zostać przekazany do RCTRootView
metody "s initWithBundleURL
podczas uruchamiania aplikacji w pliku AppDelegate.m .
CodePush
Metody klasy można traktować jako złożone rozwiązania rozpoznawania, które zawsze ładują odpowiedni pakiet, aby uwzględnić następujące scenariusze:
Gdy użytkownik końcowy zainstaluje aplikację ze sklepu (na przykład
1.0.0
), otrzyma pakiet JS zawarty w pliku binarnym. Jest to zachowanie, które można uzyskać bez użycia koduPush, ale upewniamy się, że nie przerywa :)Po rozpoczęciu wydawania aktualizacji CodePush użytkownicy końcowi otrzymają pakiet JS reprezentujący najnowszą wersję skonfigurowanego wdrożenia. Jest to zachowanie, które umożliwia iterowanie poza tym, co zostało wysłane do sklepu.
Gdy tylko wydasz aktualizację do sklepu z aplikacjami (na przykład
1.1.0
), a użytkownicy końcowi ją zaktualizują, po raz kolejny uzyskają pakiet JS zawarty w pliku binarnym. To zachowanie gwarantuje, że aktualizacje codePush, które są objęte poprzednią wersją binarną, nie są używane (ponieważ nie wiemy, że będą działać), a użytkownicy końcowi zawsze mają działającą wersję aplikacji.Powtórz elementy #2 i #3, ponieważ wydania CodePush i wydania ze sklepu z aplikacjami będą kontynuowane w nieskończoność (i poza nią?)
Ze względu na to zachowanie można bezpiecznie wdrażać aktualizacje zarówno w sklepach z aplikacjami, jak i w razie potrzeby CodePush, i mieć pewność, że użytkownicy końcowi zawsze otrzymają najnowszą wersję.
Metody
(NSURL *)bundleURL — zwraca najnowszy pakiet
NSURL
JS zgodnie z powyższym opisem. Ta metoda zakłada, że nazwa pakietu JS zawartego w pliku binarnym aplikacji tomain.jsbundle
.(NSURL *)bundleURLForResource:(NSString *)resourceName — odpowiednik
bundleURL
metody, ale umożliwia również dostosowanie nazwy pakietu JS wyszukiwanego w pliku binarnym aplikacji. Jest to przydatne, jeśli nie nazywasz tego plikumain
(co jest konwencją domyślną). W tej metodzie przyjęto założenie, że rozszerzenie pakietu JS to*.jsbundle
.(NSURL *)bundleURLForResource:(NSString *)resourceName withExtension:(NSString *)resourceExtension: Odpowiednik
bundleURLForResource:
metody, ale umożliwia również dostosowanie rozszerzenia używanego przez pakiet JS wyszukiwany w pliku binarnym aplikacji. Jest to przydatne, jeśli nie nazywasz tego pliku*.jsbundle
(co jest konwencją domyślną).(void)overrideAppVersion:(NSString *)appVersionOverride — ustawia wersję interfejsu binarnego aplikacji, która w przeciwnym razie będzie domyślna dla wersji sklepu App Store określonej jako
CFBundleShortVersionString
w pliku Info.plist. Powinno to być wywoływane pojedynczo przed załadowaniem adresu URL pakietu.(void)setDeploymentKey:(NSString *)deploymentKey — ustawia klucz wdrożenia, którego aplikacja powinna używać podczas wykonywania zapytań o aktualizacje. Jest to dynamiczna alternatywa dla ustawienia klucza wdrożenia w pliku Info.plist lub określenia klucza wdrożenia w języku JS podczas wywoływania
checkForUpdate
lubsync
.
Dokumentacja interfejsu API języka Java (Android)
Interfejs API dla oprogramowania React Native w wersji 0.60 lub nowszej
Ponieważ autolinking
używa react-native.config.js
metody do łączenia wtyczek, konstruktory są określone w tym pliku. Można jednak zastąpić zmienne niestandardowe, aby zarządzać wtyczką CodePush, umieszczając te wartości w zasobach ciągów.
Klucz publiczny — używany do weryfikacji pakietu w funkcji podpisywania kodu. Aby uzyskać więcej informacji na temat funkcji podpisywania kodu, zobacz sekcję Podpisywanie kodu. Aby ustawić klucz publiczny, należy dodać zawartość klucza publicznego do
strings.xml
elementu o nazwieCodePushPublicKey
. Funkcja CodePush automatycznie pobiera tę właściwość i włącza funkcję podpisywania kodu. Na przykład:<string moduleConfig="true" name="CodePushPublicKey">your-public-key</string>
Adres URL serwera — służy do określania adresu URL serwera CodePush. Wartość domyślna: "https://codepush.appcenter.ms/" parametr jest zastępowany przez dodanie ścieżki do elementu
strings.xml
o nazwieCodePushServerUrl
. KodPush automatycznie pobiera tę właściwość i użyje tej ścieżki do wysyłania żądań. Na przykład:<string moduleConfig="true" name="CodePushServerUrl">https://yourcodepush.server.com</string>
Interfejs API dla platformy React Native niższy niż 0,60
Interfejs API języka Java jest udostępniany przez zaimportowanie com.microsoft.codepush.react.CodePush
klasy do pliku MainActivity.java i składa się z jednej klasy publicznej o nazwie CodePush
.
CodePush
Tworzy środowisko uruchomieniowe klienta CodePush i reprezentuje ReactPackage
wystąpienie dodawane do listy pakietów aplikacji.
Konstruktory
CodePush(String deploymentKey, Activity mainActivity) — tworzy nowe wystąpienie środowiska uruchomieniowego CodePush, które będzie używane do wykonywania zapytań o usługę pod kątem aktualizacji za pośrednictwem podanego klucza wdrożenia. Parametr
mainActivity
powinien być zawsze ustawiany nathis
wartość podczas konfigurowania listy pakietów React wewnątrzMainActivity
klasy. Ten konstruktor umieszcza środowisko uruchomieniowe CodePush w trybie wydania, więc jeśli chcesz włączyć zachowanie debugowania, zamiast tego użyj następującego konstruktora.CodePush(String deploymentKey, Activity mainActivity, bool isDebugMode) — odpowiednik poprzedniego konstruktora, ale umożliwia określenie, czy środowisko uruchomieniowe CodePush ma być w trybie debugowania, czy nie. W przypadku korzystania z tego konstruktora
isDebugMode
parametr powinien być zawsze ustawiony tak, abyBuildConfig.DEBUG
zachować synchronizację z typem kompilacji. Podczas wprowadzania koduPush w tryb debugowania są włączone następujące zachowania:Stare aktualizacje CodePush nie są usuwane z magazynu za każdym razem, gdy nowy plik binarny zostanie wdrożony w emulatorze/urządzeniu. To zachowanie umożliwia wdrażanie nowych plików binarnych bez zwiększania wersji podczas programowania i bez ciągłego pobierania tej samej aktualizacji za każdym razem, gdy aplikacja wywołuje metodę
sync
.Lokalna pamięć podręczna przechowywana przez środowisko uruchomieniowe React Native w trybie debugowania jest usuwana przy każdym zainstalowaniu aktualizacji CodePush. Gwarantuje to, że po ponownym uruchomieniu aplikacji po zastosowaniu aktualizacji można zobaczyć oczekiwane zmiany. Po scaleniu tego żądania ściągnięcia nie będziemy już musieli tego robić.
CodePush(String deploymentKey, Context context, boolean isDebugMode, Integer publicKeyResourceDescriptor) — odpowiednik poprzedniego konstruktora, ale umożliwia określenie deskryptora zasobów klucza publicznego potrzebnego do odczytu zawartości klucza publicznego. Aby uzyskać więcej informacji na temat funkcji podpisywania kodu, zobacz sekcję Podpisywanie kodu.
CodePush(String deploymentKey, Context context, boolean isDebugMode, String serverUrl) — konstruktor umożliwia określenie adresu URL serwera CodePush. Wartość domyślna:
"https://codepush.appcenter.ms/"
jest zastępowana przez wartość określoną w plikuserverUrl
.
Metody statyczne
getBundleUrl() — zwraca ścieżkę do najnowszej wersji pliku pakietu JS aplikacji, zakładając, że nazwa zasobu to
index.android.bundle
. Jeśli aplikacja używa innej nazwy pakietu, użyj przeciążonej wersji tej metody, która umożliwia jej określenie. Ta metoda ma takie samo zachowanie rozwiązywania, jak w przypadku odpowiednika Objective-C opisanego powyżej.getBundleUrl(String bundleName) — zwraca ścieżkę do najnowszej wersji pliku pakietu JS aplikacji przy użyciu określonej nazwy zasobu (na przykład
index.android.bundle
). Ta metoda ma takie samo zachowanie rozwiązywania, jak w przypadku odpowiednika Objective-C opisanego powyżej.overrideAppVersion(String appVersionOverride) — ustawia wersję interfejsu binarnego aplikacji, która w przeciwnym razie będzie domyślna dla wersji Sklepu Play określonej jako
versionName
w pliku build.gradle. Powinno to być wywoływane pojedynczo, zanim zostanie skonstruowane wystąpienie CodePush.