在另一个应用程序中动态编译和运行反应本机应用程序

2023-11-25

我需要创建一个包含其他应用程序并可以运行它们的移动应用程序。它基本上就像一个“应用程序中心”,其中有一个应用程序列表(我们在服务器上发布),用户可以打开其中一个应用程序,从而导致该应用程序被打开。

想一想世博会的应用程序,用户可以扫描他的应用程序的二维码,它会自动编译并打开,这已经接近我想要的功能了。

可以打开的应用程序是使用react-native创建的,并存储在Gitlab的GIT存储库中。

考虑以下示例:

Sketch image of the desired app

通过启动我们称之为的应用程序应用中心,将显示应用程序列表。当用户点击其中之一时,它将在内部打开。


这是一个“更技术性”的例子:

  1. 应用中心上线
  2. 该应用程序将从服务器获取要显示的应用程序列表,例如通过调用https://myappcenterserver.com/all-apps
  3. 它们将被显示并监听新闻事件
  4. 假设用户按下了一个名为1st App (我知道这是一个非常糟糕的名字)其中有AP123作为身份证
  5. 我们的应用程序将通过调用向服务器发送请求https://myappcenterserver.com/app/AP123,这将从 Git 存储库返回应用程序的反应本机源代码
  6. 我们的应用程序中心将编译步骤中的代码5并运行它

所以根据你的说法,这是我应该考虑的最佳方法。

我应该使用远程代码解决方案,例如 CodePush 或 react-native-dynamic-bundle 吗?它们适合这种背景吗?


这可以部分通过 CodePush 实现:

  • 为不同的应用程序创建多个CodePush环境。 (APP1 APP2 等)
  • 当您启动应用程序时,进行 API 调用以获取应用程序列表和相应的代码推送部署密钥。
  • 在按钮上单击 codepush.sync(deployment_key) → 重新启动应用程序,然后直接跳转到您的应用程序(可能将应用程序名称存储在 AsyncStorage 中并通过导航直接跳转到它)

然而,警告可能会破坏交易:

  • 选择应用程序后,您的应用程序将重新加载
  • 主要 React 版本升级(原生 java/oc 更改)将需要商店发布,因为它无法通过 JS 处理(可能不会破坏交易)

还有一个更好的方法:

  • 创建一个容器应用程序和一个 CodePush 环境
  • 有一个像这样的中央配置[{app:"A1", version: 2.0.0}, {app: "A2", version: 1.2.0}]
  • 所有其他应用程序 A1、A2、A3 都公开可以作为容器应用程序的插件公开的对象。
  • 您的 CI 处理从多个存储库(或者更好 - 由不同存储库生成的多个 npm 包)动态构建应用程序,并将 JS 推送到 CodePush 服务器。
  • 它将配置中的所有应用程序(bash 脚本添加到yarn add A1、yarn add a2、yarn add a3)添加到容器中,
  • 您的应用程序读取配置并加载 A1 A2 等。
  • CD 创建新的 CodePush 版本。

每当中央配置发生更改时(例如,在 A1 发布 npm 包后,他们更新中央配置),就会重复此操作。

它解决了重新启动的问题,因为您已将所有捆绑包构建到一个捆绑包中。

代码推送:https://learn.microsoft.com/en-us/appcenter/distribution/codepush/react-native#dynamic-deployment-assignment

或者您可能想查看世博会的代码https://github.com/expo/expo/blob/d56076241cef55b0a93a5c0bb8dc690270e42dcb/home/screens/QRCodeScreen.android.js#L89

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在另一个应用程序中动态编译和运行反应本机应用程序 的相关文章

  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 应用程序位于前台时的 IOS Expo 推送通知

    从博览会文档中阅读 对于 iOS 明智的做法是处理以下推送通知 当应用程序处于前台时收到 因为否则用户 永远不会见到他们 应用程序运行时到达的通知 iOS 上的前台不会显示在系统通知列表中 A 常见的解决方案是手动显示通知 为了 例如 如果
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

    我正在使用 Puppeteer 和 Jest 来运行一些前端测试 我的测试如下 describe Profile Tab Exists and Clickable settings user gt test Assert that you
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • 如何按照编写的顺序迭代 javascript 对象属性

    我发现了代码中的一个错误 我希望通过最少的重构工作来解决该错误 此错误发生在 Chrome 和 Opera 浏览器中 问题 var obj 23 AA 12 BB iterating through obj s properties for
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • React Native:加载图像后应用程序性能不佳

    加载图像似乎没有问题 但是加载完毕后就出现问题了 在我的应用程序中 我在整个游戏中一张一张地加载卡片图像 一旦我加载了 40 张卡片图像 整个应用程序就会变得很慢 它总是发生在第 40 个图像处 当我在第 40 个图像之后继续加载更多卡片图
  • React-native-super-grid 在回调期间刷新网格

    我在网格中显示项目 并且每个项目都进行了分类 如果我按类别图像 我只想过滤所选类别的网格项目 这是我的实现代码 每当我按下一个类别时 我都会得到thispressRow 方法内的对象 但是this setState items catego
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an

随机推荐

  • 静态方法是否共享其局部变量以及不同线程并发使用时会发生什么?

    C 问题 我试图确定是否可以使用静态方法 在该方法内它确实使用了一些局部变量 局部变量是否在该方法的使用中 共享 例如 如果从不同线程同时调用 使用静态方法会发生什么 一个线程是否会阻塞 直到另一个线程完成等 也许普遍的问题是 在线程应用程
  • 更改Delphi OpenDialog的目录

    该计划的一些背景 该程序使用选项卡式界面同时处理多个文件 我正在尝试更改 OpenDialog 的目录 因此每次调用打开文件时都会显示我当前正在处理的文件的目录 但即使我设置InitialDir对于文件的路径 它始终显示最后打开的文件目录
  • GlassFish 5.0 异常且端口 4848 无响应

    昨天我下载了 GlassFish 5 0 和 JDK9 当我尝试运行服务器时asadmin start domainGlassFish 发送给我例外 当我尝试使用 asadmin start domainAfter 时 我得到响应 远程服务
  • 获取 GridSearchCV 的标准差

    在 scikit learn 0 20 之前我们可以使用result grid scores result best index 以获得标准差 它返回例如 mean 0 76172 std 0 05225 params n neighbor
  • 睡眠模式和深度睡眠模式有什么区别?

    我想知道Android手机中的睡眠模式和深度睡眠模式有什么区别 以及当手机进入睡眠模式和深度睡眠模式时会有什么影响 请给我详细的答案 问候 皮克斯 正如有人在已删除的答案中所写 深度睡眠模式与休眠和启动时间没有任何关系 You should
  • 如何使用 svg/canvas 绘制不规则/手绘线?

    我想绘制一条可调整大小的垂直线 基于页面内容 但它似乎是手绘的 而不是直线 我目前正在考虑使用 SVG 或 Canvas 来实现这一点 该线将沿着我的网页的一侧延伸 因此需要在容器的顶部和底部之间可扩展 我怎样才能实现这个目标 那么你想画一
  • 如何引用数据框表达式中的多个列?

    写这个很笨拙 df a lt df b df c 有没有办法做到 相当于 with df a lt b c 我们可以用with command df a lt with df b c 另一种选择是使用attach 然而不推荐 attach
  • MATLAB 中的信号量和锁

    我正在开发一个 MATLAB 项目 希望有两个 MATLAB 实例并行运行并共享数据 我将调用这些实例MAT 1 and MAT 2 更具体地说 该系统的架构是 MAT 1按顺序处理图像 使用以下命令一一读取它们imread 并使用输出每个
  • C++11 与现有库/框架的兼容性

    我想知道一些我还没有找到令人信服的答案的事情 情况 带有一些库 例如 gtkmm 的系统在未启用 c 11 的情况下进行编译 启用 C 11 编译的应用程序 两者都使用相同的 GCC 版本 环境进行编译和链接 该应用程序对使用 std st
  • 使用静态向量时_Orphan_range崩溃

    在我的项目中 我使用静态对象的构造函数来收集指针 就像注册方法一样 很简单 没有魔法 但在开始时我遇到了崩溃 我无法解释这里发生了什么 在使用 MSVC 或 Clang 的 Windows 上可以重现崩溃 两者都使用 MSVC 标头 给出以
  • conda 环境是否可以访问“root”环境? (==系统包)?

    conda 中的 根 环境是什么 它只是一个 仅 使用系统包的环境吗 其他环境是否也使用系统包 我假设优先考虑它们的重复版本 或者我是否需要将所有软件包安装在我想要使用它们的环境中 有没有办法将其配置为选项 我安装了系统包 但在 conda
  • 需要一次遍历 SQL 表行(表太大而无法使用适配器。填充)

    对我来说 阅读这样一个小型 SQL Server 2005 表很容易 string cmdText select from myTable SqlDataAdapter adapter new SqlDataAdapter cmdText
  • AS3 函数中可以有“ByRef”参数吗?

    任何想法如何返回多个变量来自 ActionScript 3 中的函数 任何像 VB NET 这样的东西你都可以拥有输入参数的变量修改 ByRef 参数 Sub do ByRef inout As Integer inout 5 End Su
  • 使用 dplyr 将某些值设置为 NA

    我试图找出一种简单的方法来使用 dplyr 数据集 dat 变量 x 执行类似的操作 dat x dat x lt 0 NA 应该很简单 但这是我目前能做的最好的事情 有更容易的方法吗 dat dat gt mutate x ifelse
  • NetDataContractSerializer 与 DataContractSerializer

    我们有一个应用程序 其中包含我们希望在数据库中保持序列化的对象 目前我们正在使用NetDataContractSerializer 但最近发现 由于 Net类型涉及的信息 它会创建巨大的文件 这意味着应用程序缓慢 即使对于基本对象也是如此
  • Bootstrap - 更改断点导航栏?

    这个问题已经被问过here但由于 Javascript 这不起作用 因此 在提供的答案中 仅更改了 CSS 但未更改 JS 这意味着导航栏的内容仍然可见 而切换器则不可见 有什么解决办法吗 Edit 我的问题是如何更改 Bootstrap
  • 当周跨越两年时,从 PHP date() 获取一年中的年份和周

    我在使用 PHP 时遇到了一个有趣的问题date 功能 还没有运气在 SO 上找到有关此问题的讨论或使用 Google 但也许其他人以前遇到过同样的问题 我正在尝试获取给定时间戳的年份和年份 这是我正在使用的代码 date Y WW 截至今
  • 使用带有 REPL 的应用程序时如何解决承诺

    我有一个基本的 Node Web 服务器 Koa js ORM 我喜欢以REPL这意味着我可以像 CLI 工具一样使用我的应用程序 我的所有查询都返回 Promises 但我不知道如何在 REPL 中解决它们 我该如何解决它们 例如 以下代
  • 将音频文件保存在 Rails 中

    我有一个简单的 Rails 应用程序 我使用 HTML5 音频 Web api 和 recorder js 来录制语音 然后将其保存在应用程序服务器上 录音进展顺利 我可以重放录音并听到声音 但是当我将其发布到服务器上时 我的音频文件是空白
  • 在另一个应用程序中动态编译和运行反应本机应用程序

    我需要创建一个包含其他应用程序并可以运行它们的移动应用程序 它基本上就像一个 应用程序中心 其中有一个应用程序列表 我们在服务器上发布 用户可以打开其中一个应用程序 从而导致该应用程序被打开 想一想世博会的应用程序 用户可以扫描他的应用程序