共用方式為


React Native Client SDK

重要

Visual Studio App Center 定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到它完全淘汰為止,但有數個建議您考慮移轉至的建議替代方案。

了解有關支援時間表和替代方案的詳細資訊

此外掛程式提供 CodePush 服務的用戶端整合,可讓您輕鬆地將動態更新體驗新增至 React Native 應用程式。

如何運作?

React Native 應用程式是由 JavaScript 檔案和任何相關聯的 映像所組成,這些映射封裝器 組合在一起,並散發為平臺特定二進位檔( .ipa.apk 檔案) 的一部分。 發行應用程式時,更新 JavaScript 程式代碼(例如進行 Bug 修正、新增功能)或映像資產,會要求您重新編譯和轉散發整個二進位檔,其中包含您要發行之存放區的檢閱時間。

CodePush 外掛程式可讓 JavaScript 和影像與您發行至 CodePush 伺服器的更新保持同步,以立即在使用者面前取得產品改善。 如此一來,您的應用程式就會獲得離線行動體驗的優點,以及一旦提供側載更新的「類似Web」靈活度。

為了確保您的終端使用者一律擁有應用程式的正常運作版本,CodePush 外掛程式會維護先前更新的複本,如此一來,當您不小心推送包含當機的更新時,它會自動回復。 如此一來,您就可以放心,在有機會 在伺服器上復原 之前,新發現的發行靈活度不會造成使用者遭到封鎖。

注意

觸控原生程式代碼的任何產品變更(例如修改 AppDelegate.m /MainActivity.java 檔案、新增外掛程式)都無法透過 CodePush 散發,因此必須透過適當的市集更新。

支援的 React 原生平臺

  • iOS (7+)
  • Android (5.0+)
  • Windows (UWP)

我們盡量保持外掛程式與舊版 React Native 的回溯相容性,但由於平臺的性質,以及版本之間有重大變更,您可能需要使用特定版本的 CodePush 外掛程式來支援您使用的 React Native 確切版本。 下表概述哪些 CodePush 外掛程式版本正式支援個別的 React Native 版本:

React 原生版本 支援 CodePush 版本
<0.14 不支援
v0.14 v1.3 (引進 Android 支援)
v0.15-v0.18 v1.4-v1.6 (引進 iOS 資產支援)
v0.19-v0.28 v1.7-v1.17 (引進 Android 資產支援)
v0.29-v0.30 v1.13-v1.17 (RN 重構的原生裝載程序代碼)
v0.31-v0.33 v1.14.6-v1.17 (RN 重構的原生裝載程式代碼)
v0.34-v0.35 v1.15-v1.17 (RN 重構的原生裝載程序代碼)
v0.36-v0.39 v1.16-v1.17 (RN 重構繼續處理程式)
v0.40-v0.42 v1.17 (RN 重構的 iOS 頭檔)
v0.43-v0.44 v2.0+ (RN 重構的 uimanager 相依性)
v0.45 v3.0+ (RN 重構的實例管理員程序代碼)
v0.46 v4.0+ (RN 重構的 js 套件組合載入器程序代碼)
v0.46-v0.53 v5.1+ (RN 已移除 JS 模組未使用的註冊)
v0.54-v0.55 v5.3+ (Android Gradle Plugin 3.x 整合)
v0.56-v0.58 v5.4+ (Android 工具的 RN 升級版本)
v0.59 v5.6+ (RN 重構的 js 套件組合載入器程式代碼)
v0.60-v0.61 v6.0+ (已移轉至自動連結的 RN)

我們努力回應新的 React Native 版本,但他們偶爾會中斷我們。 我們會使用每個 React Native 版本來更新此圖表,讓使用者可以檢查我們的官方支持是什麼。

支援的元件

使用 React Native 資產系統時(例如使用 require("./foo.png") 語法),下列清單代表支援透過 CodePush 更新其參考影像和影片的核心元件集(和 props):

元件 Prop(s)
Image source
MapView.Marker
(需要 react-native-maps>=O.3.2
image
ProgressViewIOS progressImage, trackImage
TabBarIOS.Item icon, selectedIcon
ToolbarAndroid
(React Native 0.21.0+)
actions[].icon、 、 logooverflowIcon
Video source

下列清單代表目前不支援透過CodePush更新其資產的元件集(和 props),因為它們相依於靜態影像和影片(例如使用 { uri: "foo" } 語法):

元件 Prop(s)
SliderIOS maximumTrackImage、 、 minimumTrackImagethumbImagetrackImage
Video source

我們會在發行新的核心元件時更新此清單,以支持參考資產,以確保使用者知道他們預期使用 CodePush 進行更新的確切內容。

注意

在來源屬性中使用 require 時,CodePush 僅適用於 Video 元件。例如:

<Video source={require("./foo.mp4")} />

市集指導方針合規性

雖然 Google Play 和內部散發的應用程式(例如 Enterprise、Fabric、App Center)對於如何使用 CodePush 發佈更新沒有任何限制,但 iOS App Store 及其對應的指導方針在整合應用程式內解決方案之前應該注意的規則更為精確。

根據第 3.3.2 段,Apple 的開發人員計劃許可協定完全允許 JavaScript 和資產的無線更新,並在最新版(20210607)中下載此裁決更為廣泛:

解譯的程式代碼可能會下載到應用程式,但只要這類程序代碼:(a) 不會藉由提供與提交至 App Store 的應用程式目的不一致的特性或功能來變更應用程式的主要用途,b) 不會為其他程式代碼或應用程式建立商店或店面, 和 (c) 不會略過操作系統的簽署、沙箱或其他安全性功能。

CodePush 可讓您完全遵循這些規則,只要您推送的更新不會明顯偏離其原始 App Store 核准意圖的產品。

為了進一步遵守Apple的指導方針,我們建議App Store分散式應用程式在呼叫sync時不會啟用 updateDialog 選項,因為在App Store檢閱指導方針中,已撰寫該選項

應用程式不得強制使用者對應用程式進行評分、檢閱應用程式、下載其他應用程式或其他類似的動作,以存取功能、內容或使用應用程式。

這不一定是 updateDialog的情況,因為它不會強制用戶下載新版本,但至少您應該知道該裁決,如果您決定顯示它。

範例應用程式 /入門

React Native 社群已親切地建立一些令人敬畏的開放原始碼應用程式,這些應用程式可作為開發人員入門的範例。 下列清單是使用 CodePush 的 OSS React Native 應用程式,可用來查看其他人如何使用服務:

  • F8 應用程式 - F8 2016 的官方會議應用程式。
  • Feline for Product Hunt - Product Hunt 的 Android 用戶端。
  • GeoEncoding - Lynx IT Digital 的應用程式,示範如何使用許多 React Native 元件和模組。
  • 數學事實 - 汗學院的應用程式,可協助更輕鬆地記住數學事實。

此外,如果您想要開始使用 React Native + CodePush,並正在尋找令人敬畏的入門套件,您應該查看下列內容:

  • 原生入門專業版

  • 香腸

    注意

    如果您已使用 CodePush 開發 React Native 應用程式,這就是開放原始碼,請告訴我們。 我們很想將此清單新增至此清單!

持續整合/傳遞

除了使用 CodePush CLI 來「手動」發行更新之外,我們相信請務必建立可重複且可持續的解決方案,以持續將更新傳遞給您的應用程式。 如此一來,您或您的小組就足以建立和維護敏捷式部署的節奏。 若要協助設定 CodePush 型 CD 管線,請參閱下列與各種 CI 伺服器的整合:

TypeScript 耗用量

此模組隨附其 *.d.ts 檔案作為 NPM 套件的一部分,可讓您使用它 import ,並在支援編輯器中接收 Intellisense(例如 Visual Studio Code),以及如果您使用 TypeScript 的編譯時間類型檢查。 在大部分情況下,此行為應該會現成運作,不過,如果您已將 或 編譯程式選項的值指定為 檔案中的 或 module 編譯程式選項,請確定您也已將 選項設定moduleResolution為 。tsconfig.json target es6node 這可確保 TypeScript 編譯程式會在 內 node_modules 查看匯入模組的類型定義。 否則,當您嘗試匯 react-native-code-push 入模組時,將會收到如下的錯誤: error TS2307: Cannot find module 'react-native-code-push'