簡體   English   中英

在另一個內部動態編譯和運行 react-native 應用程序

[英]Dynamically compiling and running a react-native app inside another

我需要創建一個包含其他應用程序並可以運行它們的移動應用程序。 它基本上就像一個“應用程序中心”,其中包含一個應用程序列表(我們發布在我們的服務器上),用戶可以打開其中一個應用程序,從而打開應用程序。

想想Expo的app ,用戶可以掃描他的app的二維碼,它會自動編譯打開,這接近我想要的功能。

可以打開的應用程序是使用 react-native 創建的,並存儲在 Gitlab 的 GIT 存儲庫中。

考慮以下示例:

所需應用程序的草圖

通過啟動我們稱之為App Center的應用程序,將顯示一個應用程序列表。 當用戶單擊其中之一時,它將在內部打開。


這是一個“更具技術性”的示例:

  1. 應用中心啟動
  2. 該應用程序將從服務器獲取要顯示的應用程序列表,例如通過調用https://myappcenterserver.com/all-apps
  3. 它們將被顯示並監聽新聞事件
  4. 假設用戶按下了一個名為1st App的應用程序(我知道這是一個非常糟糕的名字) ,它的 ID 為AP123
  5. 我們的應用程序將通過調用https://myappcenterserver.com/app/AP123向服務器發送請求,這將從 Git 存儲庫返回應用程序的 react-native 源代碼
  6. 我們的應用中心將編譯第5步中的代碼並運行它

所以根據你的說法,這是我應該考慮的最佳方法。

我應該使用諸如 CodePush 或 react-native-dynamic-bundle 之類的遠程代碼解決方案嗎? 它們適合這種情況嗎?

這可以通過 CodePush 部分實現:

  • 為不同的應用程序創建多個 CodePush 環境。 (APP1 APP2 等)
  • 啟動應用程序時,進行 API 調用以獲取應用程序列表和相應的代碼推送部署密鑰。
  • 在按鈕上單擊 codepush.sync(deployment_key) → 重新啟動應用程序,然后直接跳轉到您的應用程序(可能將應用程序名稱存儲在 AsyncStorage 中並通過導航直接跳轉到它)

但是,警告可能會破壞交易:

  • 選擇應用程序后,您的應用程序將重新加載
  • 主要反應版本升級(原生 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 包后,它們會更新中央配置)。

它解決了重新啟動的問題,因為您已將所有捆綁包構建為一個。

CodePush: https ://docs.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

我只知道 2 種方法來做到這一點,但都不是你所要求的。

1 - 在 React Native 中制作所有應用程序並將所有應用程序放入其中。 然后,根據服務器,您將顯示 X 個應用程序。

2 - 使用 React-Native 的鏈接。 我創建了一個應用程序,其中一個功能是將它與我​​創建的另一個應用程序鏈接。 當我點擊按鈕時,如果應用程序安裝在設備中,它會嘗試打開它,否則,應用程序商店/谷歌播放將打開,顯示要下載的應用程序。

這就是使用鏈接的方式: https : //facebook.github.io/react-native/docs/linking

我知道這不是您所要求的,但我認為您所要求的根本不可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM