Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何强制世博会应用程序更新_Android_React Native_Expo - Fatal编程技术网

Android 如何强制世博会应用程序更新

Android 如何强制世博会应用程序更新,android,react-native,expo,Android,React Native,Expo,我有一个用expo编写的应用程序,不知道如何推动新版本。在世博会网站上,如果我使用二维码运行应用程序,应用程序是正确的,但应用程序商店中的本机应用程序不会更新 我一直使用的步骤是 1) exp-build:android 2) exp发布 如何使应用程序真正更新?TL;DR:默认情况下强制执行OTA更新。可以通过添加代码在启动时检查应用程序版本来强制应用程序商店更新,如果有新版本,请在应用程序页面上打开应用程序商店 有两种方法可以更新独立的Expo应用程序: 使用expo cli发布进行OTA更

我有一个用expo编写的应用程序,不知道如何推动新版本。在世博会网站上,如果我使用二维码运行应用程序,应用程序是正确的,但应用程序商店中的本机应用程序不会更新

我一直使用的步骤是 1) exp-build:android 2) exp发布


如何使应用程序真正更新?

TL;DR:默认情况下强制执行OTA更新。可以通过添加代码在启动时检查应用程序版本来强制应用程序商店更新,如果有新版本,请在应用程序页面上打开应用程序商店

有两种方法可以更新独立的Expo应用程序:

  • 使用expo cli发布进行OTA更新
  • 使用Google Play/App Store
  • 这两种方法各有优缺点

    在线旅行社更新 这是向Expo应用程序发送更新的常用方式。OTA通过完成,并根据您的
    package.json
    设置交付新的Javascript代码。此选项还提供了使用发布频道发布代码的选项,这意味着您可以先将更新推送到暂存环境,验证更新,然后通过CLI将其推送到生产环境,如:

    expo cli发布-发布频道登台#推送并更新登台频道
    expo cli发布-发布频道制作#向制作频道推送更新
    
    如果您正在发布但您的独立应用程序未更新,则可能将代码推送到错误的发布频道。您可以阅读更多关于发布频道的信息

    默认情况下,OTA是强制执行的:

    默认情况下,Expo将在应用程序启动时自动检查更新,并尝试获取最新发布版本。如果有新的捆绑包可用,世博会将在推出体验之前尝试下载

    但是,可以通过在app.json中将
    updates.enabled
    设置为
    false
    ,然后实现自己的逻辑(或根本不实现),如他们文档中的示例所示:

    试试看{
    const update=wait Expo.Updates.CheckForUpdateSync();
    如果(update.isAvailable){
    等待Expo.Updates.fetchUpdateSync();
    //…通知用户更新。。。
    Expo.Updates.reloadFromCache();
    }
    }捕获(e){
    //处理或记录错误
    }
    
    这个系统非常适合向用户推送新的JS代码,它非常有助于现场测试,因为你可以用用户测试你的应用程序,发现缺陷,修复缺陷,并发布新代码,这些代码几乎可以立即下载

    然而,这种方法也有其局限性,例如:你不能以这种方式更新Expo SDK版本,你必须构建一个新的独立应用程序,并通过应用商店(或你选择的任何其他方法)分发它

    应用商店 这是分发
    .apk
    .ipa
    文件的最常用方法。可以分别使用android和ios的
    expo cli build:android
    expo cli build:ios
    创建这些文件

    似乎有一个Android API正在测试,以强制应用程序通过此方法(,)更新,但我认为它还不可用

    通过此方法强制更新的一个可能解决方案是在启动时检查应用程序版本,如果商店中有新版本可用,则通过打开应用程序的商店页面,以便用户能够下载。下面的例子应该可以帮助你形象地理解我的意思

    componentDidMount{
    const hasNewVersion=isStoreUpdateAvailable();//检查应用商店是否有新的应用程序更新
    如果(hasNewVersion){
    Linking.openURL(“market://details?id=“”;//打开应用程序的应用商店页面,用户可以下载更新
    }
    }
    
    这是关于你的文件

    希望这能回答您的所有问题,如果没有留下评论,我将编辑答案。

    更新答案 由于接受的答案已发布,世博会对[Update API][1]进行了更改

    这是零钱

    Updates.reloadFromCache已重命名为Updates.reloadsync,Updates.reload已被删除

    对于那些想知道在哪里运行这段代码的人,我建议将其插入componentDidMount/useffect()方法中。
    [1] :

    请将appstore上载到每个版本。我的理解是expo会进行OTA更新:您是否使用相同版本的expo创建版本?这是否可以
    链接。openURL(“market://details?id=");是否也从iOS发送到AppStore?在我的应用程序中,它只在Android上工作,这只适用于Android,是的。我不知道如何在iOS上实现类似的结果。这段代码对于获取更新和更新应用程序非常有用,但对于开发人员来说,这段更新将下载到哪里,以及如何向用户提供更新。请帮我解答这个问题,世博会会会帮你解决的。当您创建应用程序的构建时,它会自动将构建上传到Expo的amazon服务(它还会提供一个URL供您检查)。您只需插入上面的代码,Expo将更新应用程序OTA(通过空中传送)。谢谢。这很有帮助
    
      import * as Updates from 'expo-updates' // Updates*
    
      try {
        const update = await Updates.checkForUpdateAsync()
        if (update.isAvailable) {
          await Updates.fetchUpdateAsync()
          // NOTIFY USER HERE
          Updates.reloadAsync()
        }
      } catch (e) {
          // HANDLE ERROR HERE
      }