React Native應用部署/熱更新-CodePush最新整合總結(新)

來源:互聯網
上載者:User

React Native的出現為移動開發領域帶來了兩大革命性的創新: 整合了移動端APP的開發,不僅縮短了APP的開發時間,也提高了APP的開發效率。 為移動APP動態更新提供了基礎。

本文將向大家分享React Natvie應用部署/動態更新方面的內容。

React Native支援大家用React Native技術開發APP,並打包產生一個APP。在動態更新方面React Native只是提供了動態更新的基礎,對將應用部署到哪裡,如何進行動態更新並沒有支援的那麼完善。好在微軟開發了CodePush,填補React Native 應用在動態更新方面的空白。CodePush 是微軟提供的一套用於熱更新 React Native 和 Cordova 應用的服務。下面將向大家分享如何使用CodePush即時更新你的應用,後期會分享不採用CodePush,如何自己去實現React Native應用熱更新。 CodePush簡介

CodePush 是微軟提供的一套用於熱更新 React Native 和 Cordova 應用的服務。
CodePush 是提供給 React Native 和 Cordova 開發人員直接部署行動裝置 App更新給使用者裝置的雲端服務。CodePush 作為一個中央倉庫,開發人員可以推送更新 (JS, HTML, CSS and images),應用可以從用戶端 SDK 裡面查詢更新。CodePush 可以讓應用有更多的可確定性,也可以讓你直接接觸使用者群。在修複一些小問題和添加新特性的時候,不需要經過二進位打包,可以直接推送代碼進行即時更新。

CodePush 可以進行即時的推送代碼更新: 直接對使用者部署代碼更新 管理 Alpha,Beta 和生產環境應用 支援 React Native 和 Cordova 支援JavaScript 檔案與圖片資源的更新

CodePush開源了react-native版本,react-native-code-push託管在GitHub上。 安裝與註冊CodePush

使用CodePush之前首先要安裝CodePush用戶端。本文以OSX 10.11.5作為平台進行示範。 安裝 CodePush CLI

管理 CodePush 帳號需要通過 NodeJS-based CLI。
只需要在終端輸入 npm install -g code-push-cli,就可以安裝了。
安裝完畢後,輸入 code-push -v查看版本,如看到版本代表成功。
![安裝 CodePush CLI成功](https://raw.githubusercontent.com/crazycodeboy/RNStudyNotes/master/React%20Native應用部署、熱更新-CodePush最新整合總結/images/安裝 CodePush CLI成功.png)
目前我的版本是 1.12.1-beta

PS.
npm為NodeJS的包管理器,如果你沒安裝NodeJS請先安裝。 建立一個CodePush 帳號

在終端輸入code-push register,會開啟如下註冊頁面讓你選擇授權帳號。

授權通過之後,CodePush會告訴你“access key”,複製此key到終端即可完成註冊。
![擷取codepush access key](https://raw.githubusercontent.com/crazycodeboy/RNStudyNotes/master/React%20Native應用部署、熱更新-CodePush最新整合總結/images/擷取codepush access key.png)
然後終端輸入code-push login進行登陸,登陸成功後,你的session檔案將會寫在 /Users/你的使用者名稱/.code-push.config。

PS.相關命令 code-push login 登陸 code-push loout 登出 code-push access-key ls 列出登陸的token code-push access-key rm <accessKye> 刪除某個 access-key 在CodePush伺服器註冊app

為了讓CodePush伺服器知道你的app,我們需要向它註冊app: 在終端輸入code-push app add <appName>即可完成註冊。

註冊完成之後會返回一套deployment key,該key在後面步驟中會用到。

心得:如果你的應用分為Android和iOS版,那麼在向CodePush註冊應用的時候需要註冊兩個App擷取兩套deployment key,如:

code-push app add MyApp-Androidcode-push app add MyApp-iOS

PS.相關命令 code-push app add 在帳號裡面添加一個新的app code-push app remove 或者 rm 在帳號裡移除一個app code-push app rename 重新命名一個存在app code-push app list 或則 ls 列出帳號下面的所有app code-push app transfer 把app的所有權轉移到另外一個帳號 整合CodePush SDK Android

下面我們通過如下步驟在Android項目中整合CodePush。
第一步:在項目中安裝 react-native-code-push外掛程式,終端進入你的項目根目錄然後運行
npm install --save react-native-code-push

第二步:在Android project中安裝外掛程式。
CodePush提供了兩種方式:RNPM 和 Manual,本次示範所使用的是RNPM。
運行npm i -g rnpm,來安裝RNPM。

在React Native v0.27及以後版本RNPM已經被整合到了 React Native CL中,就不需要再進行安裝了。

第三步: 運行 rnpm link react-native-code-push。這條命令將會自動幫我們在anroid檔案中添加好設定。

在終端運行此命令之後,終端會提示讓你輸入deployment key,這是你只需將你的deployment Staging key輸入進去即可,如果不輸入則直接單擊enter跳過即可。

第四步: 在 android/app/build.gradle檔案裡面添如下代碼:

apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"  

然後在/android/settings.gradle中添加如下代碼:

include ':react-native-code-push'project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

第五步: 運行 code-push deployment -k ls <appName>擷取 部署秘鑰。預設的部署名是 staging,所以 部署秘鑰(deployment key ) 就是 staging。
第六步: 添加配置。當APP啟動時我們需要讓app向CodePush諮詢JS bundle的所在位置,這樣CodePush就可以控製版本。更新 MainApplication.java檔案:

public class MainApplication extends Application implements ReactApplication {  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {    @Override    protected boolean getUseDeveloperSupport() {      return BuildConfig.DEBUG;    }    @Override    protected String getJSBundleFile() {      return CodePush.getJSBundleFile();    }    @Override    protected List<ReactPackage> getPackages() {      // 3. Instantiate an instance of the CodePush runtime and add it to the list of      // existing packages, specifying the right deployment key. If you don't already      // have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.      return Arrays.<ReactPackage>asList(        new MainReactPackage(),        new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)      );    }  };  @Override  public ReactNativeHost getReactNativeHost() {      return mReactNativeHost;  }}

關於deployment-key的設定

在上述代碼中我們在建立CodePush執行個體的時候需要設定一個deployment-key,因為deployment-key分生產環境與測試環境兩種,所以建議大家在build.gradle中進行設定。在build.gradle中的設定方法如下:

開啟android/app/build.gradle檔案,找到android { buildTypes {} }然後添加如下代碼即可:

android {    ...    buildTypes {        debug {            ...            // CodePush updates should not be tested in Debug mode            ...        }        releaseStaging {            ...            buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'            ...        }        release {            ...            buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'            ...        }    }    ...}

心得:另外,我們也可以將deployment-key存放在local.properties中:

code_push_key_production=erASzHa1-wTdODdPJDh6DBF2Jwo94JFH08Kvbcode_push_key_staging=mQY75RkFbX6SiZU1kVT1II7OqWst4JFH08Kvb

如圖: 然後在就可以在android/app/build.gradle可以通過下面方式來引用它了:

Properties properties = new Properties()properties.load(project.rootProject.file('local.properties').newDataInputStream())android {    ...    buildTypes {        debug {            ...            // CodePush updates should not be tested in Debug mode            ...        }        releaseStaging {            ...            buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'            ...        }        release {            ...            buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'            ...        }    }    ...}

在android/app/build.gradle設定好deployment-key之後呢,我們就可以這樣使用了:

@Overrideprotected List<ReactPackage> getPackages() {     return Arrays.<ReactPackage>asList(         ...         new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.         ...     );}

第七步:修改versionName。
在 android/app/build.gradle中有個 android.defaultConfig.versionName屬性,我們需要把 應用版本改成 1.0.0(預設是1.0,但是codepush需要三位元)。

android{    defaultConfig{        versionName "1.0.0"    }}

至此Code Push for Android的SDK已經整合完成。 iOS

CodePush官方提供RNPM、CocoaPods與手動三種在iOS項目中整合CodePush的方式,接下來我就以RNPM的方式來講解一下如何在iOS項目中整合CodePush。

第一步:在項目中安裝react-native-code-push外掛程式,終端進入你的項目根目錄然後運行

npm install --save react-native-code-push

第二步: 運行 rnpm link react-native-code-push。這條命令將會自動幫我們在ios中添加好設定。

在終端運行此命令之後,終端會提示讓你輸入deployment key,這是你只需將你的deployment Staging key輸入進去即可,如果不輸入則直接單擊enter跳過即可。

關於deployment-key的設定

在我們想CodePush註冊App的時候,CodePush會給我們兩個deployment-key分別是在生產環境與測試環境時使用的,我們可以通過如下步驟來設定deployment-key。

1.用Xcode 開啟項目 ➜ Xcode的項目導航視圖中的PROJECT下選擇你的項目 ➜ 選擇I

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.