当前位置: 首页 > 知识库问答 >
问题:

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

罗毅
2023-03-14

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

我使用的步骤是1)exp build:android 2)exp publish

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

共有2个答案

於乐
2023-03-14

自从发布了接受的答案后,世博会对[更新API][1]进行了更改。

这是零钱。

Updates.reloadFromCache已重命名为Updates.reload异步,并且已删除Updates.reload。

  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
  }

对于那些想知道在哪里运行这段代码的人,我建议将其插入componentDidMount/useffect()方法中。[1]: https://docs.expo.io/guides/configuring-ota-updates/

何和惬
2023-03-14

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

有两种更新独立世博会应用程序的方法:

  1. 使用expo-cli发布
  2. 进行OTA更新
  3. 使用Google Play/App Store

这两种方法各有优缺点。

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

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

如果你正在发布但你的独立应用程序没有更新,你可能将代码推到了错误的发布通道。你可以在这里阅读更多关于发行渠道的信息。

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

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

但是,可以通过设置更新来禁用此行为。在应用程序中启用错误。json,然后实现自己的逻辑(或者根本不实现),如他们文档中的示例所示:

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
}

这个系统非常适合向用户推送新的JS代码,它非常有助于现场测试,因为你可以用用户测试你的应用程序,发现漏洞,修复它,并发布新代码,这些代码几乎可以立即下载。

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

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

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

通过此方法强制更新的一种可能解决方案是在启动时检查您的应用程序版本,如果商店中有新版本可用,请通过深度链接打开应用程序的商店页面,以便用户能够下载它。下面的示例应该可以帮助您可视化我的意思。

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

以下是关于链接到Google Play的文档。

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

 类似资料:
  • 我正在尝试运行我的反应原生应用程序,我在android模拟器和我的手机HUAWEI Y3II上运行它,同样的事情也会发生。几天前我正在很好地处理它,但突然出现了这个错误: 我尝试将环境变量REACT_NATIVE_PACKAGER_HOSTNAME设置为我的ip地址,我尝试关闭防火墙,我确保防火墙中允许端口,我尝试将我的网络从公用改为专用。这是我的包裹。json文件: 我真的需要努力,请帮帮我

  • 问题内容: 在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相比之下,在基于React的Single Page Application中,即使在更新React组件之后,仍然会有一些客户端使用这些组件的旧版本(它们仅在重新加载浏览器时才获得新版本,这种情况很少发生)->如果页面如果是完全SPA,则某些客户端可能会在几个小时后才刷新页面。 应采用什

  • 在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相反,在基于React的单页应用程序中,即使在React组件更新后,仍然会有一些客户机使用旧版本的组件(他们只在浏览器重新加载时获得新版本,这应该很少发生)->如果页面是完全SPA,一些客户机可能在几个小时后才刷新页面。 应该使用什么技术来确保旧的组件版本不再被任何客户使用?

  • 我试图弄清楚如何从Play商店强制更新最新版本。 由于我的android应用程序的旧版本已经在play store中,我还没有执行检查,以获取应用程序的当前版本,并与链接中指定的play store应用程序版本进行比较,请强制更新android应用程序 当我想上传新版本的代码时,他才可以使用新版本。 你能帮帮我吗?

  • 我有一个应用在谷歌Play商店。当一个更新版本可用时,旧版本将变得不可用--也就是说,如果用户不更新app,他们就不在app中进入。当新版本可用时,我如何强制用户更新应用程序?

  • 我正在尝试更新UserInfoProvider中的位置状态,此位置信息将与在此提供程序中检索到的userprofile详细信息一起发送到firestore。 然而,我似乎无法访问 用户InfoProvider。updateLocation() 在UserInfoProvider组件之外。 无论如何,我可以从后台任务中获取用户配置文件信息和位置信息,并将它们发送到fiRecovery吗? 目前,只有