web-dev-qa-db-fra.com

Comment forcer une application expo à se mettre à jour

J'ai une application écrite en expo et je n'arrive pas à comprendre comment pousser une nouvelle version. Sur le site de l'expo, si j'exécute l'application à partir du code QR, l'application est correcte, mais l'application native de l'App Store ne se met pas à jour.

Les étapes que j'ai utilisées sont 1) exp build: Android 2) exp publish

Comment puis-je réellement mettre à jour l'application?

8
Joel Jackson

TL; DR : les mises à jour OTA sont appliquées par défaut. Les mises à jour de l'App Store peuvent être appliquées en ajoutant du code pour vérifier la version de votre application au démarrage et, s'il existe une nouvelle version, ouvrez l'App Store sur la page de votre application.

Il existe deux façons de mettre à jour une application Expo autonome:

  1. Mise à jour OTA à l'aide de expo-cli publish
  2. Utilisation de Google Play/App Store

Ces deux méthodes présentent des avantages et des inconvénients.

Mises à jour OTA

C'est la manière habituelle de fournir une mise à jour aux applications Expo. Les OTA se font via outil CLI expo et fournissent un nouveau code Javascript basé sur votre package.json paramètres. Cette option offre également la possibilité de publier du code en utilisant les canaux de publication , ce qui signifie que vous pouvez envoyer les mises à jour en premier à votre environnement de transfert, valider la mise à jour, puis la pousser vers production via CLI comme ceci:

expo-cli publish -release-channel staging # pushes and update to the staging channel
expo-cli publish -release-channel production # pushes an update to the production channel

Si vous publiez mais que votre application autonome ne se met pas à jour, il se peut que vous poussiez le code vers le mauvais canal de publication. Vous pouvez en savoir plus sur les canaux de publication ici .

Les OTA sont appliqués par défaut:

Par défaut, Expo vérifiera automatiquement les mises à jour au lancement de votre application et essaiera de récupérer la dernière version publiée. Si un nouvel ensemble est disponible, Expo tentera de le télécharger avant de lancer l'expérience.

Cependant, il est possible de désactiver ce comportement en définissant updates.enabled à false dans app.json, puis implémentez votre propre logique (ou aucune), comme dans l'exemple de leur documentation:

try {
  const update = await Expo.Updates.checkForUpdateAsync();
  if (update.isAvailable) {
    await Expo.Updates.fetchUpdateAsync();
    // ... notify user of update ...
    Expo.Updates.reloadFromCache();
  }
} catch (e) {
  // handle or log error
}

Ce système est vraiment idéal pour pousser le nouveau code JS à vos utilisateurs, il aide vraiment avec les tests en direct car vous pouvez tester votre application avec votre utilisateur, trouver un défaut, le corriger et publier un nouveau code qui sera presque instantanément disponible en téléchargement.

Pourtant, cette méthode a ses limites, par exemple: vous ne pouvez pas mettre à jour la version d'Expo SDK de cette façon, vous devez créer une nouvelle application autonome et la distribuer via l'App Store (ou toute autre méthode de votre choix).

App Stores

Il s'agit de la manière la plus courante de distribuer votre .apk et .ipa des dossiers. Ces fichiers peuvent être créés en utilisant le expo-cli build:Android et expo-cli build:ios pour Android et iOS respectivement.

Il semble qu'il y ait un Android API en cours de test pour appliquer les applications à mettre à jour via cette méthode ( filetage SO , article ), mais je ne pense pas qu'il soit encore disponible.

Une solution possible pour appliquer les mises à jour via cette méthode consiste à vérifier la version de votre application au démarrage et, s'il y a une nouvelle version disponible dans la boutique, ouvrez la page de la boutique de l'application via lien profond pour que l'utilisateur puisse télécharger il. L'exemple ci-dessous devrait vous aider à visualiser ce que je veux dire.

componentDidMount {
   const hasNewVersion = isStoreUpdateAvailable(); // Checks the store for a new app update
   if (hasNewVersion) {
     Linking.openURL("market://details?id=<>"); // Opens the app's store page so the user can download the update
   }
}

Voici les documents sur lien vers Google Play .

J'espère que cela répondra à toutes vos questions, sinon laissez un commentaire et je modifierai la réponse.

14
Bruno Eduardo