Informazioni di riferimento sulle API SDK client React Native

Importante

Visual Studio App Center è previsto per il ritiro il 31 marzo 2025. Anche se è possibile continuare a usare Visual Studio App Center fino a quando non viene completamente ritirato, esistono diverse alternative consigliate che è possibile considerare la migrazione a.

Altre informazioni sulle sequenze temporali di supporto e sulle alternative.

Il plug-in CodePush è costituito da due componenti:

  1. Un modulo JavaScript, che può essere importato/richiesto e consente all'app di interagire con il servizio durante il runtime (ad esempio verificare la presenza di aggiornamenti, controllare i metadati relativi all'aggiornamento dell'app attualmente in esecuzione).

  2. API nativa (Objective-C e Java) che consente all'host dell'app di React Native di eseguire il bootstrap con il percorso di bundle JS corretto.

Le sezioni seguenti descrivono in dettaglio la forma e il comportamento di queste API:

Informazioni di riferimento sulle API JavaScript

Quando è necessario react-native-code-push, l'oggetto modulo fornisce i metodi di primo livello seguenti oltre al decorator del componente a livello radice:

  • allowRestart: i riavvii a livello di codice vengono eseguiti in seguito all'installazione di un aggiornamento e, facoltativamente, riavvia immediatamente l'app se un aggiornamento in sospeso ha tentato di riavviare l'app mentre i riavvii non sono stati consentiti. Questo metodo è un'API avanzata ed è necessaria solo se l'app viene riavviata in modo esplicito tramite il disallowRestart metodo .

  • checkForUpdate: chiede al servizio CodePush se la distribuzione dell'app configurata ha un aggiornamento disponibile.

  • disallowRestart: impedisce temporaneamente eventuali riavvii a livello di codice in seguito all'installazione di un aggiornamento CodePush. Questo metodo è un'API avanzata ed è utile quando un componente all'interno dell'app (ad esempio un processo di onboarding) deve garantire che non possano verificarsi interruzioni dell'utente finale durante la sua durata.

  • getCurrentPackage: recupera i metadati relativi all'aggiornamento attualmente installato ,ad esempio descrizione, tempo di installazione, dimensioni.

    Nota

    v1.10.3-beta A partire dal modulo CodePush, getCurrentPackage è deprecato a favore di getUpdateMetadata*.

  • getUpdateMetadata: recupera i metadati per un aggiornamento installato (ad esempio descrizione, obbligatorio).

  • notifyAppReady: notifica al runtime CodePush che un aggiornamento installato viene considerato corretto. Se si controlla manualmente gli aggiornamenti e non si usa il metodo di sincronizzazione per gestire tutto, questo metodo deve essere chiamato; In caso contrario, CodePush considera l'aggiornamento come non riuscito e esegue il rollback alla versione precedente al riavvio successivo dell'app.

  • restartApp: riavvia immediatamente l'app. Se è presente un aggiornamento in sospeso, verrà visualizzato immediatamente all'utente finale. In caso contrario, la chiamata a questo metodo ha lo stesso comportamento dell'utente finale che uccide e riavvia il processo.

  • sync: consente di controllare un aggiornamento, scaricarlo e installarlo, tutto con una singola chiamata. A meno che non sia necessaria un'interfaccia utente o un comportamento personalizzato, è consigliabile che la maggior parte degli sviluppatori usi questo metodo durante l'integrazione di CodePush nelle app

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)

Usato per eseguire il wrapping di un componente React all'interno di un componente React "superiore" che sa come sincronizzare il bundle JavaScript e gli asset di immagine dell'app quando viene montata. Internamente, il componente di ordine superiore chiama sync all'interno componentDidMount del relativo handle del ciclo di vita, che esegue un controllo di aggiornamento, scarica l'aggiornamento se esiste e installa l'aggiornamento per l'utente.

Questo decorator offre supporto per consentire di personalizzarne il comportamento per abilitare facilmente le app con requisiti diversi. Di seguito sono riportati alcuni esempi di modi in cui è possibile usarlo (è possibile selezionarne uno o anche usare una combinazione):

  1. Sincronizzazione invisibile all'inizio dell'app(comportamento predefinito più semplice). L'app scarica automaticamente gli aggiornamenti disponibili e li applica alla successiva riavvio dell'app, ad esempio il sistema operativo o l'utente finale lo ha ucciso o il dispositivo è stato riavviato. In questo modo, l'intera esperienza di aggiornamento è "invisibile" all'utente finale, poiché non visualizzano alcuna richiesta di aggiornamento o il riavvio dell'app "sintetica".

    // 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);
    
  2. Sincronizzazione automatica ogni volta che l'app riprende. Uguale a 1, ad eccezione di quando si controllano gli aggiornamenti o si applica un aggiornamento se esiste ogni volta che l'app torna in primo piano dopo essere "in background".

    // 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);
    
  3. Modo interattivo. Quando è disponibile un aggiornamento, richiedere all'utente finale l'autorizzazione prima di scaricarla e quindi applicare immediatamente l'aggiornamento. Se un aggiornamento è stato rilasciato usando il mandatory flag, l'utente finale riceverà comunque una notifica sull'aggiornamento, ma non avrebbe la scelta di ignorarla.

    // 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);
    
  4. Stato di avanzamento del log/visualizzazione. Mentre l'app si sincronizza con il server per gli aggiornamenti, usare gli codePushStatusDidChange hook o codePushDownloadDidProgress eventi per registrare le diverse fasi di questo processo o anche visualizzare una barra di stato all'utente.

    // 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

Il codePush decorator accetta un oggetto "options" che consente di personalizzare numerosi aspetti del comportamento predefinito indicato in precedenza:

  • checkFrequency(codePush.CheckFrequency): specifica quando si desidera controllare gli aggiornamenti. Il valore predefinito è codePush.CheckFrequency.ON_APP_START. Fare riferimento all'enumerazione CheckFrequency per una descrizione delle opzioni disponibili e delle operazioni eseguite.

  • deploymentKey(String): specifica la chiave di distribuzione che si vuole eseguire una query su un aggiornamento. Per impostazione predefinita, questo valore deriva dal file Info.plist (iOS) e dal file MainActivity.java (Android), ma questa opzione consente di eseguirne l'override dal lato script se è necessario usare dinamicamente una distribuzione diversa.

  • installMode(codePush.InstallMode) - Specifica quando si desidera installare gli aggiornamenti facoltativi (quelli che non sono contrassegnati come obbligatori). Il valore predefinito è codePush.InstallMode.ON_NEXT_RESTART. Fare riferimento all'enumerazione InstallMode per una descrizione delle opzioni disponibili e delle operazioni eseguite.

  • mandatoryInstallMode(codePush.InstallMode) - Specifica quando si desidera installare gli aggiornamenti, contrassegnati come obbligatori. Il valore predefinito è codePush.InstallMode.IMMEDIATE. Fare riferimento all'enumerazione InstallMode per una descrizione delle opzioni disponibili e delle operazioni eseguite.

  • minimumBackgroundDuration(Number) - Specifica il numero minimo di secondi per l'app in background prima di riavviare l'app. Questa proprietà si applica solo agli aggiornamenti installati usando InstallMode.ON_NEXT_RESUME o InstallMode.ON_NEXT_SUSPENDe può essere utile per ottenere l'aggiornamento prima degli utenti finali, senza essere troppo obtrusivi. Il valore predefinito è 0, che applica l'aggiornamento immediatamente dopo una ripresa o a meno che la sospensione dell'app non sia abbastanza lunga per non importare, tuttavia, è in background.

  • updateDialog(UpdateDialogOptions): oggetto "options" usato per determinare se deve essere visualizzata una finestra di dialogo di conferma all'utente finale quando è disponibile un aggiornamento e, in tal caso, quali stringhe usare. Impostazione predefinita su null, che disabilita la finestra di dialogo. Impostando questo valore su qualsiasi true valore, la finestra di dialogo con le stringhe predefinite e passando un oggetto a questo parametro consente di abilitare la finestra di dialogo e di eseguire l'override di una o più stringhe predefinite. Prima di abilitare questa opzione all'interno di un'app distribuita App Store, vedere questa nota.

    L'elenco seguente rappresenta le opzioni disponibili e le relative impostazioni predefinite:

    • appendReleaseDescription(Boolean): indica se si vuole aggiungere la descrizione di una versione disponibile al messaggio di notifica, visualizzato all'utente finale. Il valore predefinito è false.

    • descriptionPrefix(String) : indica la stringa con cui si vuole assegnare il prefisso della descrizione della versione con, se presente, quando viene visualizzata la notifica di aggiornamento all'utente finale. Il valore predefinito è " Description: "

    • mandatoryContinueButtonLabel(String) - Il testo da usare per il pulsante l'utente finale deve premere per installare un aggiornamento obbligatorio. Il valore predefinito è "Continue".

    • mandatoryUpdateMessage(String) : il testo usato come corpo di una notifica di aggiornamento, quando l'aggiornamento viene specificato come obbligatorio. Il valore predefinito è "An update is available that must be installed.".

    • facoltativoIgnoreButtonLabel(String): il testo da usare per il pulsante che l'utente finale può premere per ignorare un aggiornamento facoltativo disponibile. Il valore predefinito è "Ignore".

    • optionalInstallButtonLabel(String): il testo da usare per il pulsante che l'utente finale può premere per installare un aggiornamento facoltativo. Il valore predefinito è "Install".

    • optionalUpdateMessage(String) : il testo usato come corpo di una notifica di aggiornamento, quando l'aggiornamento è facoltativo. Il valore predefinito è "An update is available. Would you like to install it?".

    • title(String): il testo usato come intestazione di una notifica di aggiornamento visualizzata all'utente finale. Il valore predefinito è "Update available".

  • rollbackRetryOptions(RollbackRetryOptions): il meccanismo di ripetizione dei tentativi di rollback consente all'applicazione di tentare di reinstallare un aggiornamento precedentemente eseguito il rollback (con le restrizioni specificate nelle opzioni). Si tratta di un oggetto "options" usato per determinare se deve verificarsi un nuovo tentativo di rollback e, in caso affermativo, quali impostazioni usare per il tentativo di rollback. Questo valore predefinito è Null, che ha l'effetto di disabilitare il meccanismo di ripetizione dei tentativi. L'impostazione di questo valore su qualsiasi valore di verità consentirà il meccanismo di ripetizione dei tentativi con le impostazioni predefinite e il passaggio di un oggetto a questo parametro consente di abilitare il tentativo di rollback e di eseguire l'override di uno o più dei valori predefiniti.

    L'elenco seguente rappresenta le opzioni disponibili e le relative impostazioni predefinite:

    • delayInHours(Number) - Specifica il tempo minimo in ore in cui l'app attenderà il rollback più recente prima di tentare di reinstallare lo stesso pacchetto di rollback. Non può essere minore di 0. Può essere numero float. Il valore predefinito è 24.

    • maxRetryAttempts(Number): specifica il numero massimo di tentativi che l'app può eseguire prima di interrompere il tentativo. Non può essere minore di 1. Il valore predefinito è 1.

codePushStatusDidChange (hook evento)

Chiamato quando il processo di sincronizzazione passa da una fase a un'altra nel processo di aggiornamento complessivo. L'hook eventi viene chiamato con un codice di stato che rappresenta lo stato corrente e può essere uno dei SyncStatus valori.

codePushDownloadDidProgress (hook eventi)

Chiamato periodicamente quando viene scaricato un aggiornamento disponibile dal server CodePush. Il metodo viene chiamato con un DownloadProgress oggetto, che contiene le due proprietà seguenti:

  • totalBytes(Number) - Numero totale di byte da ricevere per questo aggiornamento (ovvero le dimensioni del set di file, che sono state modificate dalla versione precedente).

  • receivedBytes(Number) - Numero di byte scaricati finora, che possono essere usati per tenere traccia dello stato di avanzamento del download.

codePush.allowRestart

codePush.allowRestart(): void;

I riavvii a livello di codice vengono eseguiti, che altrimenti sono stati rifiutati a causa di una chiamata precedente a disallowRestart. Se disallowRestart non è mai stato chiamato al primo posto, chiamare questo metodo genera un no-op.

Se un aggiornamento CodePush è attualmente in sospeso, che ha tentato di riavviare l'app (ad esempio è stato usato InstallMode.IMMEDIATE), ma è stato bloccato a causa della disallowRestart chiamata, la chiamata allowRestart comporterà un riavvio immediato. Questo riavvio consente di applicare l'aggiornamento il prima possibile, senza interrompere l'utente finale durante i flussi di lavoro critici ,ad esempio un processo di onboarding.

Ad esempio, la chiamata allowRestart attiva un riavvio immediato se uno dei tre scenari menzionati nelladisallowRestart documentazione si è verificato dopo disallowRestart la chiamata. Tuttavia, la chiamata allowRestart non attiva un riavvio se i punti seguenti sono true:

  1. Nessun aggiornamento CodePush è stato installato dall'ultima volta disallowRestart che è stato chiamato e quindi non è necessario riavviare comunque.

  2. Attualmente è disponibile un aggiornamento CodePush in sospeso, ma è stato installato tramite InstallMode.ON_NEXT_RESTART, quindi non è necessario un riavvio a livello di codice.

  3. Attualmente è disponibile un aggiornamento CodePush in sospeso, ma è stato installato tramite InstallMode.ON_NEXT_RESUME e l'app non è ancora stata inserita in background, quindi non è ancora necessario riavviare a livello di codice.

  4. Nessuna chiamata da restartApp effettuare dopo l'ultima disallowRestart chiamata.

Questo comportamento garantisce che nessun riavvio venga attivato come risultato della chiamata allowRestart a meno che non sia stato richiesto esplicitamente durante il periodo di non consentito. In questo modo, allowRestart è simile alla chiamata restartApp(true), ad eccezione dell'ex attiva un riavvio solo se l'aggiornamento attualmente in sospeso vuole riavviare, ma quest'ultimo verrà riavviato fino a quando un aggiornamento è in sospeso.

Per un esempio di come questo metodo può essere usato, vedere disallowRestart .

codePush.checkForUpdate

codePush.checkForUpdate(deploymentKey: String = null, handleBinaryVersionMismatchCallback: (update: RemotePackage) => void): Promise<RemotePackage>;

Esegue una query sul servizio CodePush per verificare se la distribuzione dell'app configurata dispone di un aggiornamento disponibile. Per impostazione predefinita, userà la chiave di distribuzione configurata nel file Info.plist (iOS) o MainActivity.java file (Android), ma è possibile eseguire l'override che specificando un valore tramite il parametro facoltativo deploymentKey . Ciò può essere utile quando si vuole "reindirizzare" dinamicamente un utente a una distribuzione specifica, ad esempio consentendo l'accesso anticipato tramite un uovo di pasqua o un commutatore di impostazione utente.

Il secondo parametro handleBinaryVersionMismatchCallback facoltativo è una funzione di callback facoltativa che può essere usata per notificare all'utente se sono presenti aggiornamenti binari. Si consideri ad esempio un caso d'uso in cui la versione binaria attualmente installata è 1.0.1 con un'etichetta (etichetta push codice) v1. In seguito il codice nativo è stato modificato nel ciclo di sviluppo e la versione binaria è stata aggiornata alla versione 1.0.2. Quando viene attivato un controllo di aggiornamento codepush, si ignorano gli aggiornamenti con mancata corrispondenza della versione binaria ( perché l'aggiornamento non è destinato alla versione binaria dell'app attualmente installata). In questo caso, l'app installata (1.0.1) ignora l'aggiornamento destinato alla versione 1.0.2. È possibile usare handleBinaryVersionMismatchCallback per fornire un hook per gestire tali situazioni.

Importante

Prestare attenzione all'uso degli avvisi all'interno di questo callback se si sta sviluppando un'applicazione iOS, a causa di App Store processo di revisione: le app non devono forzare gli utenti a valutare l'app, esaminare l'app, scaricare altre app o altre azioni simili per accedere alle funzionalità, al contenuto o all'uso dell'app.

Questo metodo restituisce un Promiseoggetto , che si risolve in uno dei due valori possibili:

  1. null se non è disponibile un aggiornamento. Ciò può verificarsi nei seguenti scenari:

    1. La distribuzione configurata non contiene versioni e quindi niente da aggiornare.
    2. La versione più recente all'interno della distribuzione configurata è destinata a una versione binaria diversa rispetto a quella attualmente in esecuzione (precedente o successiva).
    3. L'app attualmente in esecuzione ha già la versione più recente dalla distribuzione configurata e quindi non è più necessaria.
    4. La versione più recente all'interno della distribuzione configurata è attualmente contrassegnata come disabilitata, quindi non è consentito scaricare.
    5. La versione più recente all'interno della distribuzione configurata si trova in uno stato di implementazione attiva e il dispositivo di richiesta non rientra nella percentuale di utenti idonei.
  2. RemotePackage Istanza, che rappresenta un aggiornamento disponibile che può essere controllato o scaricato in un secondo momento.

Esempio di utilizzo:

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;

Impedisce temporaneamente il riavvio a livello di codice a causa di uno degli scenari seguenti:

  1. Un aggiornamento CodePush viene installato usando InstallMode.IMMEDIATE

  2. Un aggiornamento CodePush viene installato usando InstallMode.ON_NEXT_RESUME e l'app viene ripresa dallo sfondo (facoltativamente limitata dalla minimumBackgroundDuration proprietà)

  3. Il restartApp metodo è stato chiamato

    Nota

    I passaggi 1 e 2 funzionano restartApp in modo efficace chiamando per te, quindi puoi pensare di disallowRestart bloccare qualsiasi chiamata a restartApp, se l'app lo chiama direttamente o indirettamente.

Dopo aver chiamato questo metodo, tutte le chiamate a sync sarebbero ancora consentite per verificare la presenza di un aggiornamento, scaricarlo e installarlo, ma un tentativo di riavvio dell'app verrebbe accodato fino a quando allowRestart non viene chiamato. In questo modo, la richiesta di riavvio viene acquisita e può essere "scaricata" ogni volta che si vuole consentire l'esecuzione.

Si tratta di un'API avanzata ed è principalmente utile quando i singoli componenti all'interno dell'app (come un processo di onboarding) devono assicurarsi che non possano verificarsi interruzioni dell'utente finale durante la loro durata, continuando a consentire all'app di mantenere la sincronizzazione con il server CodePush al proprio ritmo e usando le modalità di installazione appropriate. Ciò offre il vantaggio di consentire all'app di individuare e scaricare gli aggiornamenti disponibili il prima possibile, impedendo anche eventuali interruzioni durante le esperienze degli utenti finali chiave.

In alternativa, è anche possibile usare InstallMode.ON_NEXT_RESTART ogni volta che si chiama sync (che non tenterà mai di riavviare l'app a livello di codice) e quindi chiamare restartApp in modo esplicito in punti nella tua app che è "sicuro" per farlo. disallowRestart fornisce un approccio alternativo a questo quando il codice sincronizzato con il server CodePush è separato dal codice/componenti che vogliono applicare un criterio di riavvio senza riavvio.

Esempio di utilizzo:

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

Nota

Questo metodo viene considerato deprecato a partire v1.10.3-beta dal modulo CodePush. Se si esegue questa versione (o versione successiva), è consigliabile usare invece il codePush.getUpdateMetadata comportamento più prevedibile.

codePush.getCurrentPackage(): Promise<LocalPackage>;

Recupera i metadati relativi al "pacchetto" attualmente installato (ad esempio descrizione, tempo di installazione). Questo può essere utile per gli scenari come la visualizzazione di una finestra di dialogo "novità?" dopo l'applicazione di un aggiornamento o il controllo se è presente un aggiornamento in sospeso che è in attesa di essere applicato tramite una ripresa o un riavvio.

Questo metodo restituisce un Promiseoggetto , che si risolve in uno dei due valori possibili:

  1. null se l'app esegue attualmente il bundle JS dal file binario e non da un aggiornamento CodePush. Ciò si verifica negli scenari seguenti:

    1. L'utente finale ha installato il file binario dell'app e ha ancora installato un aggiornamento CodePush
    2. L'utente finale ha installato un aggiornamento del file binario,ad esempio dall'archivio, che ha eliminato gli aggiornamenti codePush precedenti e ha restituito la precedenza al file binario JS nel file binario.
  2. LocalPackage Istanza che rappresenta i metadati per l'aggiornamento CodePush attualmente in esecuzione.

Esempio di utilizzo:

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>;

Recupera i metadati per un aggiornamento installato ,ad esempio descrizione, obbligatorio, il cui stato corrisponde al parametro specificato updateState . Questo può essere utile per gli scenari come la visualizzazione di una finestra di dialogo "novità?" dopo l'applicazione di un aggiornamento o il controllo se è presente un aggiornamento in sospeso che è in attesa di essere applicato tramite una ripresa o un riavvio. Per altre informazioni sugli stati di aggiornamento possibili e su ciò che rappresentano, vedere il riferimento updateState.

Questo metodo restituisce un Promiseoggetto , che si risolve in uno dei due valori possibili:

  1. null se non esiste un aggiornamento con lo stato specificato. Ciò si verifica negli scenari seguenti:

    1. L'utente finale non ha ancora installato gli aggiornamenti codePush e questo è il motivo per cui non sono disponibili metadati per gli aggiornamenti, qualsiasi cosa specificata come updateState parametro.

    2. L'utente finale ha installato un aggiornamento del file binario,ad esempio dall'archivio, che ha eliminato gli aggiornamenti codePush precedenti e ha restituito la precedenza al file binario JS nel file binario. Mostrerebbe lo stesso comportamento di #1

    3. Il updateState parametro è impostato su UpdateState.RUNNING, ma l'app non esegue attualmente un aggiornamento CodePush. Potrebbe esserci un aggiornamento in sospeso, ma l'app non è ancora stata riavviata per renderla attiva.

    4. Il updateState parametro è impostato su UpdateState.PENDING, ma l'app non dispone di aggiornamenti attualmente in sospeso.

  2. LocalPackage Istanza che rappresenta i metadati per l'aggiornamento CodePush attualmente richiesto (l'esecuzione o l'sospeso).

Esempio di utilizzo:

// 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>;

Notifica al runtime CodePush che un aggiornamento appena installato deve essere considerato corretto e quindi un rollback lato client automatico non è necessario. È obbligatorio chiamare questa funzione nel codice del bundle aggiornato. In caso contrario, quando l'app viene riavviata, il runtime CodePush presuppone che l'aggiornamento installato non sia riuscito e venga eseguito il rollback alla versione precedente. Questo comportamento esiste per garantire che gli utenti finali non siano bloccati da un aggiornamento interrotto.

Se si usa la funzione e si esegue il sync controllo dell'aggiornamento all'avvio dell'app, non è necessario chiamare notifyAppReady manualmente perché sync lo chiamerà. Questo comportamento esiste a causa del presupposto che quando sync viene chiamato nell'app, rappresenta un'approssimazione valida di un'avvio riuscito.

Nota

Questo metodo viene anche aliasato come notifyApplicationReady (per la compatibilità con le versioni precedenti).

codePush.restartApp

codePush.restartApp(onlyIfUpdateIsPending: Boolean = false): void;

Riavvia immediatamente l'app. Se viene fornito un valore di verità al onlyIfUpdateIsPending parametro, l'app verrà riavviata solo se è presente un aggiornamento in sospeso in attesa di essere applicato.

Questo metodo è per scenari avanzati ed è principalmente utile quando le condizioni seguenti sono vere:

  1. L'app specifica un valore della modalità di installazione di ON_NEXT_RESTART o ON_NEXT_RESUME quando si chiamano i sync metodi o LocalPackage.install . Questo non applica l'aggiornamento finché l'app non viene riavviata (dall'utente finale o dal sistema operativo) o ripresa, quindi l'aggiornamento non verrà visualizzato immediatamente all'utente finale.

  2. Si dispone di un evento utente specifico dell'app (ad esempio l'utente finale è tornato alla route iniziale dell'app) che consente di applicare l'aggiornamento in modo non invasivo e potenzialmente ottiene l'aggiornamento all'utente finale prima di attendere il riavvio successivo o riprendere.

codePush.sync

codePush.sync(options: Object, syncStatusChangeCallback: function(syncStatus: Number), downloadProgressCallback: function(progress: DownloadProgress), handleBinaryVersionMismatchCallback: function(update: RemotePackage)): Promise<Number>;

Sincronizza gli asset di bundle e immagini JavaScript dell'app con la versione più recente della distribuzione configurata. A differenza del metodo checkForUpdate , che verifica la presenza di un aggiornamento e si controllano le operazioni da eseguire successivamente, sync gestisce il controllo dell'aggiornamento, il download e l'esperienza di installazione per l'utente.

Questo metodo offre il supporto per due modalità diverse (ma personalizzabili) per abilitare facilmente le app con requisiti diversi:

  1. Modalità invisibileall'utente in modalità automatica(il comportamento predefinito) scarica automaticamente gli aggiornamenti disponibili e li applica alla successiva riavvio dell'app(ad esempio il sistema operativo o l'utente finale lo ha ucciso o il dispositivo è stato riavviato). In questo modo, l'intera esperienza di aggiornamento è "invisibile" all'utente finale, poiché non visualizzano alcuna richiesta di aggiornamento o il riavvio dell'app "sintetica".

  2. Modalità attiva, che quando è disponibile un aggiornamento, richiede all'utente finale l'autorizzazione prima di scaricarla e quindi applica immediatamente l'aggiornamento. Se un aggiornamento è stato rilasciato usando il mandatory flag, l'utente finale riceverà comunque una notifica sull'aggiornamento, ma non avrebbe la scelta di ignorarla.

Esempio di utilizzo:

// 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 });

Suggerimento

Se si vuole decidere se controllare o scaricare un aggiornamento disponibile in base al livello di batteria del dispositivo dell'utente finale, condizioni di rete e così via, eseguire il wrapping della chiamata a sync in una condizione che garantisce di chiamarla solo quando si desidera.

SyncOptions

Anche se il sync metodo tenta di semplificare l'esecuzione degli aggiornamenti invisibile all'utente e attivi con una configurazione piccola, accetta un oggetto "opzioni" che consente di personalizzare molti aspetti del comportamento predefinito indicato in precedenza. Le opzioni disponibili sono identiche a CodePushOptions, ad eccezione dell'opzione checkFrequency :

Esempio di utilizzo:

// 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
   }
});

Oltre alle opzioni, il sync metodo accetta anche diversi parametri di funzione facoltativi, che consentono di sottoscrivere il ciclo di vita della sync "pipeline" per visualizzare un'interfaccia utente aggiuntiva in base alle esigenze (ad esempio un controllo per l'aggiornamento modale o uno stato di avanzamento del download modale):

  • syncStatusChangedCallback((syncStatus: Number) => void) - Chiamato quando il processo di sincronizzazione passa da una fase a un'altra nel processo di aggiornamento complessivo. Il metodo viene chiamato con un codice di stato, che rappresenta lo stato corrente e può essere uno dei SyncStatus valori.

  • downloadProgressCallback((progress: DownloadProgress) => void) - Chiamato periodicamente quando viene scaricato un aggiornamento disponibile dal server CodePush. Il metodo viene chiamato con un DownloadProgress oggetto, che contiene le due proprietà seguenti:

    • totalBytes(Number) - Numero totale di byte da ricevere per questo aggiornamento (ovvero le dimensioni del set di file, che sono state modificate dalla versione precedente).

    • receivedBytes(Number) - Numero di byte scaricati finora, che possono essere usati per tenere traccia dello stato di avanzamento del download.

  • handleBinaryVersionMismatchCallback((update: RemotePackage) => void) - Chiamato quando sono disponibili aggiornamenti binari. Il metodo viene chiamato con un RemotePackage oggetto . Per altre informazioni, vedere la sezione codePush.checkForUpdate .

Esempio di utilizzo:

// 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 */
  }
);

Questo metodo restituisce un Promiseoggetto , che viene risolto in un SyncStatus codice che indica perché la sync chiamata ha avuto esito positivo. Questo codice può essere uno dei valori seguenti SyncStatus :

  • codePush.SyncStatus.UP_TO_DATE(4): l'app è aggiornata con il server CodePush.

  • codePush.SyncStatus.UPDATE_IGNORED(5): l'app ha avuto un aggiornamento facoltativo, che l'utente finale ha scelto di ignorare. (Questo è applicabile solo quando viene updateDialog usato)

  • codePush.SyncStatus.UPDATE_INSTALLED(6) - L'aggiornamento è stato installato e verrà eseguito immediatamente dopo che la funzione restituisce o la successiva volta che l'app syncStatusChangedCallback riprende/riavvia, a seconda dell'oggetto InstallMode specificato in SyncOptions.

  • codePush.SyncStatus.SYNC_IN_PROGRESS(7): è in esecuzione un'operazione in sync corso che impedisce l'esecuzione della chiamata corrente.

Il sync metodo può essere chiamato ovunque si desidera verificare la presenza di un aggiornamento. Ciò potrebbe essere nell'evento componentWillMount del ciclo di vita del componente radice, il gestore onPress di un componente, nel callback di un <TouchableHighlight> timer periodico o qualsiasi altra cosa ha senso per le proprie esigenze. Come il checkForUpdate metodo, esegue la richiesta di rete per verificare la presenza di un aggiornamento in background, quindi non influisce sulla velocità di risposta del thread dell'interfaccia utente o del thread JavaScript.

Oggetti pacchetto

I checkForUpdate metodi e getUpdateMetadata restituiscono Promise oggetti che, quando risolti, forniscono l'accesso agli oggetti "package". Il pacchetto rappresenta l'aggiornamento del codice e tutti i metadati aggiuntivi (ad esempio la descrizione, obbligatorio?). L'API CodePush ha la distinzione tra i tipi di pacchetti seguenti:

  • LocalPackage: rappresenta un aggiornamento scaricato già in esecuzione o è stato installato ed è in attesa di un riavvio dell'app.

  • RemotePackage: rappresenta un aggiornamento disponibile nel server CodePush che non è ancora stato scaricato.

LocalPackage

Contiene i dettagli relativi a un aggiornamento scaricato in locale o già installato. È possibile ottenere un riferimento a un'istanza di questo oggetto chiamando il metodo a livello getUpdateMetadata di modulo o come valore della promessa restituita dal RemotePackage.download metodo .

Proprietà
  • appVersion: versione binaria dell'app dipendente da questo aggiornamento. Questo è il valore specificato tramite il appStoreVersion parametro quando si chiama il comando dell'interfaccia della riga di release comando. (Stringa)
  • deploymentKey: chiave di distribuzione usata per scaricare originariamente questo aggiornamento. (Stringa)
  • descrizione: Descrizione dell'aggiornamento. Questo è lo stesso valore specificato nell'interfaccia della riga di comando quando è stato rilasciato l'aggiornamento. (Stringa)
  • failedInstall: indica se questo aggiornamento è stato installato in precedenza, ma è stato eseguito il rollback. Il sync metodo ignora automaticamente gli aggiornamenti, che in precedenza non sono riusciti, quindi è necessario preoccuparsi solo di questa proprietà se si usa checkForUpdate. (booleano)
  • isFirstRun: indica se si tratta della prima esecuzione dell'aggiornamento dopo l'installazione. Questo è utile per determinare se si vuole visualizzare un "Novità?" Interfaccia utente dell'utente finale dopo l'installazione di un aggiornamento. (booleano)
  • isMandatory: indica se l'aggiornamento è considerato obbligatorio. Questo è il valore specificato nell'interfaccia della riga di comando quando è stato rilasciato l'aggiornamento. (booleano)
  • isPending: indica se questo aggiornamento è in uno stato "in sospeso". Quando true, ciò significa che l'aggiornamento è stato scaricato e installato, ma il riavvio dell'app necessario per applicarlo non è ancora stato eseguito e questo è il motivo per cui le modifiche non sono attualmente visibili all'utente finale. (booleano)
  • etichetta: etichetta interna assegnata automaticamente all'aggiornamento dal server CodePush, ad esempio v5. Questo valore identifica in modo univoco l'aggiornamento all'interno della distribuzione. (Stringa)
  • packageHash: valore hash SHA dell'aggiornamento. (Stringa)
  • packageSize: dimensioni del codice contenute nell'aggiornamento, in byte. (Numero)
Metodi
  • install(installMode: codePush.InstallMode = codePush.InstallMode.ON_NEXT_RESTART, minimumBackgroundDuration = 0): Promise<void>: installa l'aggiornamento salvandolo nel percorso nel disco in cui il runtime prevede di trovare la versione più recente dell'app. Il installMode parametro controlla quando vengono presentate le modifiche all'utente finale. Il valore predefinito è attendere fino al riavvio dell'app successiva per visualizzare le modifiche, ma è possibile fare riferimento al InstallMode riferimento all'enumerazione per una descrizione delle opzioni disponibili e di ciò che fanno. Se il installMode parametro è impostato su InstallMode.ON_NEXT_RESUME, il minimumBackgroundDuration parametro consente di controllare la durata dell'app in background prima di forzare l'installazione dopo la ripresa.

RemotePackage

Contiene informazioni dettagliate su un aggiornamento disponibile per il download dal server CodePush. Si ottiene un riferimento a un'istanza di questo oggetto chiamando il checkForUpdate metodo quando è disponibile un aggiornamento. Se si usa l'API, non è necessario preoccuparsi di syncRemotePackage, poiché gestirà automaticamente il processo di download e installazione.

Proprietà

L'oggetto RemotePackage eredita tutte le stesse proprietà dell'oggetto LocalPackage, ma include uno aggiuntivo:

  • downloadUrl: URL in cui è disponibile il pacchetto per il download. Questa proprietà è necessaria solo per l'utilizzo avanzato, poiché il download metodo gestirà automaticamente l'acquisizione degli aggiornamenti. (Stringa)
Metodi
  • download(downloadProgressCallback?: Funzione): Promise<LocalPackage>: scarica l'aggiornamento disponibile dal servizio CodePush. Se viene specificato un downloadProgressCallback oggetto, verrà chiamato periodicamente con un DownloadProgress oggetto ({ totalBytes: Number, receivedBytes: Number }) che segnala lo stato di avanzamento del download finché non viene completato. Restituisce una promessa che risolve con .LocalPackage

Enumerazioni

L'API CodePush include le enumerazioni seguenti, che possono essere usate per personalizzare l'esperienza di aggiornamento:

InstallMode

Questa enumerazione specifica quando si vuole applicare effettivamente un aggiornamento installato e può essere passato ai sync metodi o LocalPackage.install . Include i valori seguenti:

  • codePush.InstallMode.IMMEDIATE(0): indica che si vuole installare l'aggiornamento e riavviare immediatamente l'app. Questo valore è appropriato per gli scenari di debug e quando viene visualizzato un prompt di aggiornamento all'utente, poiché si prevede di visualizzare le modifiche immediatamente dopo aver accettato l'installazione. Inoltre, questa modalità può essere usata per applicare gli aggiornamenti obbligatori, poiché rimuove la latenza potenzialmente indesiderata tra l'installazione dell'aggiornamento e la successiva volta che l'utente finale riavvia o riprende l'app.

  • codePush.InstallMode.ON_NEXT_RESTART(1): indica che si vuole installare l'aggiornamento, ma non riavviare in modo forcibly l'app. Quando l'app viene riavviata "naturalmente" (a causa del sistema operativo o dell'utente finale che lo uccide), l'aggiornamento verrà facilmente raccolto. Questo valore è appropriato quando si eseguono aggiornamenti invisibile all'utente finale, poiché probabilmente è dirompente per l'utente finale se l'app viene riavviata improvvisamente da nessun punto. Non si sarebbe reso conto che un aggiornamento è stato anche scaricato. Questa è la modalità predefinita usata per entrambi i sync metodi e LocalPackage.install .

  • codePush.InstallMode.ON_NEXT_RESUME(2): indica che si vuole installare l'aggiornamento, ma non si vuole riavviare l'app fino alla successiva ripresa dell'utente finale dallo sfondo. In questo modo, non si interrompe la sessione corrente, ma è possibile ottenere l'aggiornamento davanti a loro prima di dover attendere il riavvio naturale successivo. Questo valore è appropriato per le installazioni invisibile all'utente che possono essere applicate alla ripresa in modo non invasivo.

  • codePush.InstallMode.ON_NEXT_SUSPEND(3) - Indica che si vuole installare l'aggiornamento mentre è in background, ma solo dopo che è stato in background per minimumBackgroundDuration secondi (0 per impostazione predefinita), in modo che il contesto utente non venga perso a meno che la sospensione dell'app non sia abbastanza lunga per non importare.

CheckFrequency

Questa enumerazione specifica quando si vuole che l'app venga sincronizzata con il server per gli aggiornamenti e possa essere passata al codePushify decoratore. Include i valori seguenti:

  • codePush.CheckFrequency.ON_APP_START(0): indica che si vuole verificare la presenza di aggiornamenti ogni volta che viene avviato il processo dell'app.

  • codePush.CheckFrequency.ON_APP_RESUME(1) - Indica che si vuole verificare la presenza di aggiornamenti ogni volta che l'app viene riportata in primo piano dopo essere "in background" (l'utente ha premuto il pulsante home, l'app avvia un processo di pagamento separato e così via).

  • codePush.CheckFrequency.MANUAL(2) - Disabilitare il controllo automatico per gli aggiornamenti, ma controllare solo quando codePush.sync() viene chiamato nel codice dell'app.

SyncStatus

Questa enumerazione viene fornita alla syncStatusChangedCallback funzione che può essere passata al metodo, per collegarsi al sync processo di aggiornamento complessivo. Include i valori seguenti:

  • codePush.SyncStatus.CHECKING_FOR_UPDATE(0): il server CodePush viene sottoposto a query per un aggiornamento.
  • codePush.SyncStatus.AWAITING_USER_ACTION(1): è disponibile un aggiornamento e viene visualizzata una finestra di dialogo di conferma all'utente finale. (Questo è applicabile solo quando viene updateDialog usato)
  • codePush.SyncStatus.DOWNLOADING_PACKAGE(2): viene scaricato un aggiornamento disponibile dal server CodePush.
  • codePush.SyncStatus.INSTALLING_UPDATE(3): è stato scaricato un aggiornamento disponibile e sta per essere installato.
  • codePush.SyncStatus.UP_TO_DATE(4): l'app è completamente aggiornata con la distribuzione configurata.
  • codePush.SyncStatus.UPDATE_IGNORED(5): l'app ha un aggiornamento facoltativo, che l'utente finale ha scelto di ignorare. (Questo è applicabile solo quando viene updateDialog usato)
  • codePush.SyncStatus.UPDATE_INSTALLED(6) : è stato installato un aggiornamento disponibile e verrà eseguito immediatamente dopo che la funzione restituisce o la successiva volta che l'app syncStatusChangedCallback riprende/riavvia, a seconda dell'oggetto InstallMode specificato in SyncOptions.
  • codePush.SyncStatus.SYNC_IN_PROGRESS(7): è presente un'operazione in corso sync che impedisce l'esecuzione della chiamata corrente.
  • codePush.SyncStatus.UNKNOWN_ERROR(-1): l'operazione di sincronizzazione ha rilevato un errore sconosciuto.

UpdateState

Questa enumerazione specifica lo stato in cui è in corso un aggiornamento e può essere specificato quando si chiama il getUpdateMetadata metodo. Include i valori seguenti:

  • codePush.UpdateState.RUNNING(0): indica che un aggiornamento rappresenta la versione dell'app attualmente in esecuzione. Ciò può essere utile per identificare gli attributi relativi all'app, per scenari come la visualizzazione della descrizione della versione in una finestra di dialogo "novità?" o per segnalare la versione più recente a un servizio di analisi o di creazione di report anomali.

  • codePush.UpdateState.PENDING(1): indica che è stato installato un aggiornamento, ma l'app non è ancora stata riavviata per applicarla. Ciò può essere utile per determinare se è presente un aggiornamento in sospeso, che potrebbe essere necessario forzare un riavvio a livello di codice (tramite restartApp) da applicare.

  • codePush.UpdateState.LATEST(2): indica che un aggiornamento rappresenta la versione disponibile più recente e può essere attualmente in esecuzione o in sospeso.

Informazioni di riferimento sulle API Objective-C (iOS)

L'API Objective-C è resa disponibile importando l'intestazione CodePush.h nel file AppDelegate.m ed è costituita da una singola classe pubblica denominata CodePush.

CodePush

Contiene metodi statici per il recupero dell'oggetto NSURL che rappresenta il file di bundle JavaScript più recente e può essere passato al RCTRootViewmetodo 's initWithBundleURL quando si avvia l'app nel file AppDelegate.m .

I CodePush metodi della classe possono essere considerati come resolver compositi, che caricano sempre il bundle appropriato, per soddisfare gli scenari seguenti:

  1. Quando un utente finale installa l'app dallo Store (ad esempio 1.0.0), otterrà il bundle JS contenuto all'interno del file binario. Questo è il comportamento che si otterrà senza usare CodePush, ma assicurarsi che non si interrompe :)

  2. Non appena si inizia a rilasciare gli aggiornamenti codePush, gli utenti finali otterranno il bundle JS che rappresenta la versione più recente per la distribuzione configurata. Questo è il comportamento che consente di eseguire l'iterazione oltre a ciò che è stato inviato al negozio.

  3. Non appena si rilascia un aggiornamento all'app store (ad esempio 1.1.0), e gli utenti finali lo aggiornano, otterranno nuovamente il bundle JS contenuto all'interno del file binario. Questo comportamento garantisce che CodePush aggiorni che ha come destinazione una versione binaria precedente (poiché non lo sappiamo che funzionerebbero) e gli utenti finali hanno sempre una versione funzionante dell'app.

  4. Ripetere #2 e #3 man mano che le versioni di CodePush e app Store continuano a entrare in infinito (e oltre?)

A causa di questo comportamento, è possibile distribuire gli aggiornamenti in modo sicuro sia negli store app che in CodePush in base alle esigenze e assicurarsi che gli utenti finali otterranno sempre la versione più recente.

Metodi

  • (NSURL *)bundleURL : restituisce il bundle NSURL JS più recente, come descritto in precedenza. Questo metodo presuppone che il nome del bundle JS contenuto all'interno del file binario dell'app sia main.jsbundle.

  • (NSURL *)bundleURLForResource:(NSString *)resourceName - Equivalente al bundleURL metodo, ma consente anche di personalizzare il nome del bundle JS che viene cercato all'interno del file binario dell'app. Questa opzione è utile se non si assegna la denominazione di questo file main (ovvero la convenzione predefinita). Questo metodo presuppone che l'estensione del bundle JS sia *.jsbundle.

  • (NSURL *)bundleURLForResource:(NSString *)resourceName withExtension:(NSString *)resourceExtension: equivalente al bundleURLForResource: metodo, ma consente anche di personalizzare l'estensione usata dal bundle JS che viene cercato all'interno del file binario dell'app. Questa opzione è utile se non si assegna la denominazione di questo file *.jsbundle (ovvero la convenzione predefinita).

  • (void)overrideAppVersion:(NSString *)appVersionOverride - Imposta la versione dell'interfaccia binaria dell'applicazione, che altrimenti verrà impostata per impostazione predefinita sulla versione App Store specificata come CFBundleShortVersionStringnell'info.plist. Questa operazione deve essere chiamata una sola volta prima del caricamento dell'URL del bundle.

  • (void)setDeploymentKey:(NSString *)deploymentKey : imposta la chiave di distribuzione che l'app deve usare durante la query per gli aggiornamenti. Si tratta di un'alternativa dinamica all'impostazione della chiave di distribuzione nell'elenco Info.plist o alla specifica di una chiave di distribuzione in JS quando si chiama checkForUpdate o sync.

Informazioni di riferimento sulle API Java (Android)

API per React Native versione 0.60 e versioni successive

Poiché autolinking usa react-native.config.js per collegare i plug-in, i costruttori vengono specificati in tale file. È tuttavia possibile eseguire l'override delle variabili personalizzate per gestire il plug-in CodePush inserendo questi valori nelle risorse stringa.

  • Chiave pubblica : usata per la verifica del bundle nella funzionalità di firma del codice. Per altre informazioni sulla funzionalità di firma del codice , vedere la sezione Firma codice. Per impostare la chiave pubblica, è necessario aggiungere il contenuto della chiave pubblica a strings.xml con il nome CodePushPublicKey. CodePush ottiene automaticamente questa proprietà e abilita la funzionalità Firma codice. Ad esempio:

    <string moduleConfig="true" name="CodePushPublicKey">your-public-key</string>
    
  • Url del server : usato per specificare l'URL del server CodePush. Valore predefinito: "https://codepush.appcenter.ms/" viene sottoposto a override aggiungendo il percorso a strings.xml con il nome CodePushServerUrl. CodePush ottiene automaticamente questa proprietà e userà questo percorso per inviare richieste. Ad esempio:

    <string moduleConfig="true" name="CodePushServerUrl">https://yourcodepush.server.com</string>
    

API per React Native inferiore a 0,60

L'API Java è resa disponibile importando la com.microsoft.codepush.react.CodePush classe nel file MainActivity.java ed è costituita da una singola classe pubblica denominata CodePush.

CodePush

Costruisce il runtime client CodePush e rappresenta l'istanza ReactPackage aggiunta all'elenco dei pacchetti dell'app.

Costruttori

  • CodePush(String deploymentKey, Activity mainActivity) - Crea una nuova istanza del runtime CodePush, che verrà usata per eseguire query sul servizio per gli aggiornamenti tramite la chiave di distribuzione specificata. Il mainActivity parametro deve essere sempre impostato su this quando si configura l'elenco di pacchetti di React all'interno della MainActivity classe. Questo costruttore inserisce il runtime CodePush in "modalità di rilascio", quindi se si vuole abilitare il comportamento di debug, usare invece il costruttore seguente.

  • CodePush(String deploymentKey, Activity mainActivity, bool isDebugMode) - Equivalente al costruttore precedente, ma consente di specificare se il runtime CodePush deve essere in modalità di debug o meno. Quando si usa questo costruttore, il isDebugMode parametro deve sempre essere impostato per BuildConfig.DEBUG rimanere sincronizzato con il tipo di compilazione. Quando si inserisce CodePush in modalità di debug, sono abilitati i comportamenti seguenti:

    1. Gli aggiornamenti di CodePush precedenti non vengono eliminati dall'archiviazione ogni volta che viene distribuito un nuovo file binario nell'emulatore/dispositivo. Questo comportamento consente di distribuire nuovi file binari, senza urtare la versione durante lo sviluppo e senza ottenere continuamente lo stesso aggiornamento ogni volta che l'app chiama sync.

    2. La cache locale gestita dal runtime di React Native in modalità di debug viene eliminata ogni volta che viene installato un aggiornamento CodePush. Ciò garantisce che quando l'app viene riavviata dopo l'applicazione di un aggiornamento, è possibile visualizzare le modifiche previste. Non appena questa richiesta viene unita, non sarà più necessario farlo.

  • CodePush(String deploymentKey, Contesto di contesto, booleano isDebugMode, Integer publicKeyResourceDescriptor) - Equivalente al costruttore precedente, ma consente di specificare il descrittore della risorsa chiave pubblica necessaria per leggere il contenuto della chiave pubblica. Per altre informazioni sulla funzionalità di firma del codice , vedere la sezione Firma codice.

  • CodePush(String deploymentKey, Contesto di contesto, boolean isDebugMode, String serverUrl) - Costruttore consente di specificare l'URL del server CodePush. Valore predefinito: "https://codepush.appcenter.ms/" viene sottoposto a override per valore specificato in serverUrl.

Metodi statici

  • getBundleUrl() - Restituisce il percorso alla versione più recente del file di bundle JS dell'app, presupponendo che il nome della risorsa sia index.android.bundle. Se l'app usa un nome di bundle diverso, usare la versione di overload di questo metodo, che consente di specificarla. Questo metodo ha lo stesso comportamento di risoluzione dell'equivalente Objective-C descritto in precedenza.

  • getBundleUrl(String bundleName) - Restituisce il percorso alla versione più recente del file di bundle JS dell'app usando il nome della risorsa specificato (ad esempio index.android.bundle). Questo metodo ha lo stesso comportamento di risoluzione dell'equivalente Objective-C descritto in precedenza.

  • overrideAppVersion(String appVersionOverride) - Imposta la versione dell'interfaccia binaria dell'applicazione, che altrimenti verrà impostata per impostazione predefinita sulla versione di Play Store specificata come versionName nella build.gradle. Questa operazione deve essere chiamata una sola volta prima della costruzione dell'istanza codePush.