安裝與注冊(cè)CodePush
安裝CodePush CLI
在終端輸入
npm install -g code-push-cli
安裝完成后輸入code-push -v 查看版本號(hào)
code-push -v

創(chuàng)建一個(gè)CodePush 賬號(hào)
在終端輸入code-push register 瀏覽器會(huì)打開注冊(cè)頁面 選擇一個(gè)品臺(tái)注冊(cè)成功后code-push 會(huì)給一個(gè)access key,復(fù)制,然后登錄
code-push register

在CodePush服務(wù)器注冊(cè)app
為了讓CodePush服務(wù)器知道你的app,我們需要向它注冊(cè)app: 在終端輸入code-push app add <appName> <os> <platform> 即可完成注冊(cè)。

注冊(cè)完成之后會(huì)返回一套deployment key,該key在后面步驟中會(huì)用到。
集成CodePush SDK
android
下面我們通過如下步驟在Android項(xiàng)目中集成CodePush。
第一步:在項(xiàng)目中安裝 react-native-code-push插件,終端進(jìn)入你的項(xiàng)目根目錄然后運(yùn)行
npm install --save react-native-code-push
第二步: 運(yùn)行 react-native link react-native-code-push。這條命令將會(huì)自動(dòng)幫我們?cè)赼nroid文件中添加好設(shè)置。
第三步: 在 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')
第四步: 在終端運(yùn)行 code-push deployment ls <appName> -k獲取 部署秘鑰。

第五步:添加配置
①打開android/app/build.gradle文件,找到android { buildTypes {} }然后添加如下代碼即可:
release {
//省略其他代碼
buildConfigField "String", "CODE_PUSH_KEY", CODE_PUSH_KEY_PRODUCTION
}
debug {
buildConfigField "String", "CODE_PUSH_KEY", CODE_PUSH_KEY_STAGING
}
②android項(xiàng)目下gradle.properties添加

CODE_PUSH_KEY_PRODUCTION="你的production_key XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
CODE_PUSH_KEY_STAGING="你的staging_key XXXXXXXXXXXXXXXXXXXXXXXX"
③更新 MainApplication.java文件
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new CodePush(BuildConfig.CODE_PUSH_KEY, getApplicationContext(), BuildConfig.DEBUG),
);
}
// 如果已經(jīng)自動(dòng)生成就不用添加
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
④修改versionName
在 android/app/build.gradle中有個(gè) android.defaultConfig.versionName屬性,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))。
android{
defaultConfig{
versionName "1.0.0"
}
}
android 集成完畢。
使用CodePush進(jìn)行熱更新
最好在項(xiàng)目根。component中進(jìn)行上述策略控制
引入
import codePush from 'react-native-code-push'
.在 componentDidMount中調(diào)用 sync方法,后臺(tái)請(qǐng)求更新
componentDidMount(){
codePush.sync({
updateDialog:{
appendReleaseDescription:true,
descriptionPrefix:'更新內(nèi)容',
title:'更新',
mandatoryUpdateMessage:'',
mandatoryContinueButtonLabel:'更新',
}
})
}
sync方法,提供了如下屬性以允許你定制sync方法的默認(rèn)行為
deploymentKey (String): 部署key,指定你要查詢更新的部署秘鑰,默認(rèn)情況下該值來自于Info.plist(Ios)和MianActivity.java(Android)文件,你可以通過設(shè)置該屬性來動(dòng)態(tài)查詢不同部署key下的更新。
installMode (codePush.InstallMode): 安裝模式,用在向CodePush推送更新時(shí)沒有設(shè)置強(qiáng)制更新(mandatory為true)的情況下,默認(rèn)codePush.InstallMode.ON_NEXT_RESTART即下一次啟動(dòng)的時(shí)候安裝。
mandatoryInstallMode (codePush.InstallMode):強(qiáng)制更新,默認(rèn)codePush.InstallMode.IMMEDIATE。
minimumBackgroundDuration (Number):該屬性用于指定app處于后臺(tái)多少秒才進(jìn)行重啟已完成更新。默認(rèn)為0。該屬性只在installMode為InstallMode.ON_NEXT_RESUME情況下有效。
updateDialog (UpdateDialogOptions) :可選的,更新的對(duì)話框,默認(rèn)是null,包含以下屬性
appendReleaseDescription (Boolean) - 是否顯示更新description,默認(rèn)false
descriptionPrefix (String) - 更新說明的前綴。 默認(rèn)是” Description: “
mandatoryContinueButtonLabel (String) - 強(qiáng)制更新的按鈕文字. 默認(rèn) to “Continue”.
mandatoryUpdateMessage (String) - 強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available that must be installed.”.
optionalIgnoreButtonLabel (String) - 非強(qiáng)制更新時(shí),取消按鈕文字. Defaults to “Ignore”.
optionalInstallButtonLabel (String) - 非強(qiáng)制更新時(shí),確認(rèn)文字. Defaults to “Install”.
optionalUpdateMessage (String) - 非強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available. Would you like to install it?”.
title (String) - 要顯示的更新通知的標(biāo)題. Defaults to “Update available”.
=======================================================
如果可以進(jìn)行更新,CodePush會(huì)在后臺(tái)靜默地將更新下載到本地,等待APP下一次啟動(dòng)的時(shí)候應(yīng)用更新,以確保用戶看到的是最新版本。
如果更新是強(qiáng)制性的,更新文件下載好之后會(huì)立即進(jìn)行更新。
如果你期望更及時(shí)的獲得更新,可以在每次APP從后臺(tái)進(jìn)入前臺(tái)的時(shí)候去主動(dòng)的檢查更新:
在應(yīng)用的根component的componentDidMount中添加如下代碼:
AppState.addEventListener("change", (newState) => {
newState === "active" && codePush.sync();
});
發(fā)布更新
CodePush支持兩種發(fā)布更新的方式,一種是通過code-push release-react簡(jiǎn)化方式,另外一種是通過code-push release的復(fù)雜方式。
①code-push release-react <appName> <platform>
code-push release-react aaa android
or
code-push release-react aaa android --t 1.0.0 --dev false --d Production --des "更新內(nèi)容" --m true
// 其中參數(shù)–t為二進(jìn)制(.ipa與apk)安裝包的的版本;–dev為是否啟用開發(fā)者模式(默認(rèn)為false);–d是要發(fā)布更新的環(huán)境分Production與Staging(默認(rèn)為Staging);–des為更新說明;–m 是強(qiáng)制更新。
這種方式將打包與發(fā)布兩個(gè)命令合二為一,可以說大大簡(jiǎn)化了我們的操作流程,建議大家多使用這種方式來發(fā)布更新。
②code-push release 方式(沒有使用不說了_).
圖片
