React Native Client SDK

Importante

Visual Studio App Center è pianificato 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 a cui è possibile prendere in considerazione la migrazione.

Altre informazioni sulle sequenze temporali di supporto e sulle alternative.

Questo plug-in fornisce l'integrazione lato client per il servizio CodePush, consentendo di aggiungere facilmente un'esperienza di aggiornamento dinamico alle app React Native.

Come funziona?

React Native le app sono costituite da file JavaScript e da eventuali immagini associate, raggruppate dal packager e distribuite come parte di un file binario specifico della piattaforma (un .ipa file o .apk ). Quando l'app viene rilasciata, è necessario ricompilare e ridistribuire l'intero file binario, ad esempio apportare correzioni di bug, aggiungere nuove funzionalità o asset di immagine, per ricompilare e ridistribuire l'intero file binario, che include qualsiasi tempo di revisione per gli archivi in cui si sta pubblicando.

Il plug-in CodePush consente di ottenere immediatamente miglioramenti del prodotto davanti agli utenti finali, mantenendo javaScript e le immagini sincronizzate con gli aggiornamenti rilasciati nel server CodePush. In questo modo, l'app ottiene i vantaggi di un'esperienza mobile offline, nonché l'agilità "simile al Web" degli aggiornamenti sideload non appena sono disponibili.

Per garantire che gli utenti finali dispongano sempre di una versione funzionante dell'app, il plug-in CodePush mantiene una copia dell'aggiornamento precedente, in modo che, in caso di push accidentale di un aggiornamento che includa un arresto anomalo, può eseguire automaticamente il rollback. In questo modo, è possibile assicurarsi che la nuova agilità di rilascio non comporterà l'blocco degli utenti prima di poter eseguire il rollback sul server.

Nota

Le modifiche apportate al prodotto che toccano il codice nativo (ad esempio, la modifica del file AppDelegate.m/MainActivity.java , l'aggiunta di un nuovo plug-in) non possono essere distribuite tramite CodePush e quindi devono essere aggiornate tramite gli archivi appropriati.

Piattaforme di React Native supportate

  • iOS (7+)
  • Android (5.0+)
  • Windows (UWP)

Cerchiamo di mantenere la compatibilità con le versioni precedenti del plug-in con le versioni precedenti di React Native, ma a causa della natura della piattaforma e dell'esistenza di modifiche di rilievo tra le versioni, è possibile che sia necessario usare una versione specifica del plug-in CodePush per supportare la versione esatta di React Native si sta usando. La tabella seguente illustra le versioni del plug-in CodePush che supportano ufficialmente le rispettive versioni React Native:

versioni di React Native Supporto delle versioni codePush
<0.14 Non supportata
v0.14 v1.3 (introdotto il supporto per Android)
v0.15-v0.18 v1.4-v1.6 (introdotto il supporto per gli asset iOS)
v0.19-v0.28 v1.7-v1.17 (introdotto il supporto per gli asset Android)
v0.29-v0.30 v1.13-v1.17 (codice di hosting nativo sottoposto a refactoring RN)
v0.31-v0.33 v1.14.6-v1.17 (codice host nativo sottoposto a refactoring RN)
v0.34-v0.35 v1.15-v1.17 (codice di hosting nativo sottoposto a refactoring RN)
v0.36-v0.39 v1.16-v1.17 (gestore di ripresa con refactoring RN)
v0.40-v0.42 v1.17 (file di intestazione iOS con refactoring RN)
v0.43-v0.44 v2.0+ (dipendenze uimanager con refactoring RN)
v0.45 v3.0+ (codice di gestione istanze refactoring RN)
v0.46 v4.0+ (codice del caricatore bundle js refactoring RN)
v0.46-v0.53 v5.1+ (RN ha rimosso la registrazione inutilizzata dei moduli JS)
v0.54-v0.55 v5.3+ (integrazione di Android Gradle Plugin 3.x)
v0.56-v0.58 v5.4+ (versioni aggiornate di RN per gli strumenti Android)
v0.59 v5.6+ (codice del caricatore bundle js refactoring RN)
v0.60-v0.61 v6.0+ (RN migrato al collegamento automatico)

Lavoriamo duramente per rispondere alle nuove versioni React Native, ma occasionalmente ci interrompono. Questo grafico verrà aggiornato con ogni versione React Native, in modo che gli utenti possano verificare qual è il supporto ufficiale.

Componenti supportati

Quando si usa il sistema di asset React Native (ad esempio usando la require("./foo.png") sintassi), l'elenco seguente rappresenta il set di componenti di base (e le proprietà) che supportano l'aggiornamento di immagini e video di riferimento tramite CodePush:

Componente Prop(s)
Image source
MapView.Marker
(richiede mappe native react>=O.3.2)
image
ProgressViewIOS progressImage, trackImage
TabBarIOS.Item icon, selectedIcon
ToolbarAndroid
(React Native 0.21.0+)
actions[].icon, logo, overflowIcon
Video source

L'elenco seguente rappresenta il set di componenti (e proprietà) che attualmente non supportano gli asset da aggiornare tramite CodePush, a causa della dipendenza da immagini e video statici (come l'uso della { uri: "foo" } sintassi):

Componente Prop(s)
SliderIOS maximumTrackImage, minimumTrackImage, thumbImage, trackImage
Video source

Questo elenco verrà aggiornato man mano che vengono rilasciati nuovi componenti di base, che supportano il riferimento agli asset, per assicurarsi che gli utenti sappiano esattamente cosa possono aspettarsi di aggiornare usando CodePush.

Nota

CodePush funziona solo con i componenti video quando si usa require nella proprietà di origine. Per esempio:

<Video source={require("./foo.mp4")} />

Conformità delle linee guida per l'archiviazione

Anche se Google Play e le app distribuite internamente (ad esempio Enterprise, Fabric, App Center) non hanno limitazioni sulla pubblicazione degli aggiornamenti tramite CodePush, iOS App Store e le relative linee guida hanno regole più precise da tenere presenti prima di integrare la soluzione all'interno dell'applicazione.

Il Contratto di licenza del programma per sviluppatori di Apple, ai sensi del paragrafo 3.3.2, ha completamente consentito gli aggiornamenti over-the-air di JavaScript e asset - e nella versione più recente (20210607) scaricabile qui questa decisione è ancora più ampia:

Il codice interpretato può essere scaricato in un'applicazione, ma solo a condizione che tale codice: (a) non modifica lo scopo principale dell'applicazione fornendo funzionalità o funzionalità incoerenti allo scopo previsto e pubblicizzato dell'applicazione come inviato al App Store, (b) non crea uno store o una vetrina per altre applicazioni o codice, e (c) non ignorano la firma, la sandbox o altre funzionalità di sicurezza del sistema operativo.

CodePush consente di seguire queste regole in conformità completa, purché l'aggiornamento push non devi in modo significativo il prodotto dalla sua finalità originale App Store approvata.

Per mantenere ulteriormente la conformità alle linee guida di Apple, è consigliabile che le app distribuite App Store non consentano l'opzione updateDialog quando si chiama sync, poiché nelle linee guida di revisione App Store è scritto che:

Le app non devono imporre agli utenti di valutare l'app, esaminare l'app, scaricare altre app o altre azioni simili per accedere a funzionalità, contenuto o uso dell'app.

Questo non è necessariamente il caso di updateDialog, perché non forza l'utente a scaricare la nuova versione, ma almeno si dovrebbe essere consapevoli di tale decisione se si decide di mostrarlo.

App/starter di esempio

La community React Native ha creato in modo gentile alcune straordinarie app open source che possono fungere da esempi per gli sviluppatori che iniziano. L'elenco seguente è costituito da app oss React Native che usano anche CodePush e che possono essere usate per vedere in che modo altri usano il servizio:

  • App F8 : app per conferenze ufficiale per F8 2016.
  • Gatti per Product Hunt - Un client Android per Product Hunt.
  • GeoEncoding: un'app di Lynx IT Digital, che illustra come usare numerosi componenti e moduli React Native.
  • Math Facts - Un'app di Khan Academy per memorizzare i fatti matematici più facilmente.

Inoltre, se stai cercando di iniziare a usare React Native + CodePush e stai cercando un kit di avvio impressionante, dovresti consultare quanto segue:

  • Native Starter Pro

  • Salame piccante

    Nota

    Se hai sviluppato un'app React Native usando CodePush, è open source, comunicaci. Ci piacerebbe aggiungerlo a questo elenco!

Integrazione continua/Recapito

Oltre a usare l'interfaccia della riga di comando di CodePush per gli aggiornamenti delle versioni "manualmente", riteniamo che sia importante creare una soluzione ripetibile e sostenibile per il recapito continuo degli aggiornamenti all'app. In questo modo, è abbastanza semplice per l'utente o il team creare e mantenere il ritmo delle distribuzioni agile. Per facilitare la configurazione di una pipeline cd basata su CodePush, vedere le integrazioni seguenti con vari server CI:

Utilizzo di TypeScript

Questo modulo include il file *.d.ts come parte del pacchetto NPM, che consente di usarlo import e ricevere intellisense negli editor di supporto (ad esempio Visual Studio Code), nonché nel controllo dei tipi in fase di compilazione se si usa TypeScript. Per la maggior parte, questo comportamento dovrebbe funzionare correttamente, tuttavia, se è stato specificato es6 come valore per l'opzione del target compilatore o module nel tsconfig.json file, assicurarsi di impostare anche l'opzione moduleResolution su node. In questo modo, il compilatore TypeScript cercherà all'interno node_modules di per le definizioni dei tipi dei moduli importati. In caso contrario, si riceverà un errore simile al seguente quando si tenta di importare il react-native-code-push modulo: error TS2307: Cannot find module 'react-native-code-push'.