安裝與注冊CodePush
安裝CodePush CLI
在終端輸入
npm install -g code-push-cli
安裝完成后輸入code-push -v 查看版本號
code-push -v
創(chuàng)建一個CodePush 賬號
在終端輸入code-push register 瀏覽器會打開注冊頁面 選擇一個品臺注冊成功后code-push 會給一個access key,復(fù)制溃卡,然后登錄
code-push register
在CodePush服務(wù)器注冊app
為了讓CodePush服務(wù)器知道你的app芬沉,我們需要向它注冊app: 在終端輸入code-push app add <appName> <os> <platform> 即可完成注冊。
注冊完成之后會返回一套deployment key,該key在后面步驟中會用到瘸爽。
集成CodePush SDK
android
下面我們通過如下步驟在Android項目中集成CodePush域那。
第一步:在項目中安裝 react-native-code-push插件,終端進(jìn)入你的項目根目錄然后運(yùn)行
npm install --save react-native-code-push
第二步: 運(yùn)行 react-native link react-native-code-push审编。這條命令將會自動幫我們在anroid文件中添加好設(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項目下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)自動生成就不用添加
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
④修改versionName
在 android/app/build.gradle中有個 android.defaultConfig.versionName屬性垒酬,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0砰嘁,但是codepush需要三位數(shù))。
android{
defaultConfig{
versionName "1.0.0"
}
}
android 集成完畢勘究。
使用CodePush進(jìn)行熱更新
最好在項目根矮湘。component中進(jìn)行上述策略控制
引入
import codePush from 'react-native-code-push'
.在 componentDidMount中調(diào)用 sync方法,后臺請求更新
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è)置該屬性來動態(tài)查詢不同部署key下的更新十办。
installMode (codePush.InstallMode): 安裝模式,用在向CodePush推送更新時沒有設(shè)置強(qiáng)制更新(mandatory為true)的情況下超棺,默認(rèn)codePush.InstallMode.ON_NEXT_RESTART即下一次啟動的時候安裝向族。
mandatoryInstallMode (codePush.InstallMode):強(qiáng)制更新,默認(rèn)codePush.InstallMode.IMMEDIATE。
minimumBackgroundDuration (Number):該屬性用于指定app處于后臺多少秒才進(jìn)行重啟已完成更新说搅。默認(rèn)為0炸枣。該屬性只在installMode為InstallMode.ON_NEXT_RESUME情況下有效。
updateDialog (UpdateDialogOptions) :可選的,更新的對話框适肠,默認(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)制更新時侯养,更新通知. Defaults to “An update is available that must be installed.”.
optionalIgnoreButtonLabel (String) - 非強(qiáng)制更新時敦跌,取消按鈕文字. Defaults to “Ignore”.
optionalInstallButtonLabel (String) - 非強(qiáng)制更新時,確認(rèn)文字. Defaults to “Install”.
optionalUpdateMessage (String) - 非強(qiáng)制更新時逛揩,更新通知. Defaults to “An update is available. Would you like to install it?”.
title (String) - 要顯示的更新通知的標(biāo)題. Defaults to “Update available”.
=======================================================
如果可以進(jìn)行更新柠傍,CodePush會在后臺靜默地將更新下載到本地,等待APP下一次啟動的時候應(yīng)用更新辩稽,以確保用戶看到的是最新版本惧笛。
如果更新是強(qiáng)制性的,更新文件下載好之后會立即進(jìn)行更新逞泄。
如果你期望更及時的獲得更新患整,可以在每次APP從后臺進(jìn)入前臺的時候去主動的檢查更新:
在應(yīng)用的根component的componentDidMount中添加如下代碼:
AppState.addEventListener("change", (newState) => {
newState === "active" && codePush.sync();
});
發(fā)布更新
CodePush支持兩種發(fā)布更新的方式,一種是通過code-push release-react簡化方式喷众,另外一種是通過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ā)布兩個命令合二為一膀息,可以說大大簡化了我們的操作流程,建議大家多使用這種方式來發(fā)布更新了赵。
②code-push release 方式(沒有使用不說了_).
圖片