關於react native code push的JS端配置攻略
1. 引用CodePush高階元件,應用在專案根元件中:
import CodePush from "react-native-code-push";
class App extends Component {
}
const codePushOptions = { checkFrequency: CodePush.CheckFrequency.MANUAL };
App = CodePush(codePushOptions)(App);
export default codePush(App);
2. 使用CodePush提供的檢查更新並執行更新的方法:
// 檢測是否有新的更新 CodePush.checkForUpdate(codePushDeploymentKey) .then((update) => { console.log('update', update); if (!update) { return; } CodePush.sync( { deploymentKey: codePushDeploymentKey, installMode: update.isMandatory ? CodePush.InstallMode.IMMEDIATE : CodePush.InstallMode.ON_NEXT_RESTART, // 強制熱更則立即安裝,靜默則下次啟動時安裝 updateDialog: update.isMandatory ? { appendReleaseDescription: true, // 是否顯示更新描述 descriptionPrefix: '我們做了一些內容邀您更新體驗:\n', // 更新描述的字首。 預設為"Description" mandatoryContinueButtonLabel: '立即更新', // 強制更新按鈕文字,預設為continue mandatoryUpdateMessage: '', // 強制更新時的資訊. optionalIgnoreButtonLabel: '稍後', // 非強制更新時,按鈕文字 optionalInstallButtonLabel: '後臺更新', // 非強制更新時,確認按鈕文字. 預設為"Install" optionalUpdateMessage: '有新版本了,是否更新?', // 非強制更新時,檢查到更新的訊息文字 title: '更新提示' // Alert視窗的標題 } : false }, (syncStatus) => { switch (syncStatus) { case CodePush.SyncStatus.CHECKING_FOR_UPDATE: // 正在查詢CodePush伺服器以進行更新。 break; case CodePush.SyncStatus.DOWNLOADING_PACKAGE: // 正在從CodePush伺服器下載可用更新。 if (!update.isMandatory) { return; } // 強制彈窗更新,下載啟動時顯示進度條modal DeviceEventEmitter.emit(DeviceEventName.HOT_UPDATE_MODAL_VISIBLE, { totalPackageSize: conver(update.packageSize), // 熱更新包總大小 }); break; case CodePush.SyncStatus.AWAITING_USER_ACTION: // 提供更新,並向終端使用者顯示確認對話方塊。 break; case CodePush.SyncStatus.INSTALLING_UPDATE: // 已下載可用更新,即將安裝。 break; case CodePush.SyncStatus.UP_TO_DATE: // 該應用程式是CodePush伺服器的最新版本。 break; case CodePush.SyncStatus.UPDATE_IGNORED: // 應用程式有一個可選的更新,終端使用者選擇忽略。 break; case CodePush.SyncStatus.UPDATE_INSTALLED: // 已安裝可用更新 break; case CodePush.SyncStatus.UNKNOWN_ERROR: // 同步操作遇到未知錯誤 break; default: break; } }, ({ receivedBytes, totalBytes }) => { if (!update.isMandatory) { return; } // 標記熱更新進度事件 DeviceEventEmitter.emit(DeviceEventName.HOT_UPDATE_PROGRESS, { progress: parseFloat(receivedBytes / totalBytes) .toFixed(2) * 100, // 當前下載進度(0~100) receivedPackageSize: conver(receivedBytes), // 熱更新包下載過程大小 }); }, ({ isUpdateAppVersion, appVersion }) => { console.log('appVersion更新', `${isUpdateAppVersion}&&${appVersion}`); } ); });
接下來詳細描述幾個重要的屬性:
1. “checkFrequency”即檢查頻率, 在步驟1的codePushOptions中配置了這個引數,啥意思呢,我解釋為檢查更新的方式,有如下三種:
// 禁用自動檢查更新,用於手動檢查更新,只有主動呼叫sync方法時檢查
CodePush.CheckFrequency.MANUAL
// 熱啟動時檢查更新,即APP在使用時退到後臺重新開啟時檢查
CodePush.CheckFrequency.ON_APP_RESUME
// 冷啟動時檢查更新,即APP殺死程序後重啟時檢查
CodePush.CheckFrequency.ON_APP_START
2. “installMode”即安裝模式
codePush.InstallMode.IMMEDIATE 安裝更新並立刻重啟應用
codePush.InstallMode.ON_NEXT_RESTART 安裝更新,但不立馬重啟,直到下一次重新進入
codePush.InstallMode.ON_NEXT_RESUME 安裝更新,但是不立馬重新啟動,直到下一次從後臺恢復到前臺
codePush.InstallMode.ON_NEXT_SUSPEND 下一次處於後臺時
3. "isMandatory" 是CheckForUpdate返回的一個重要引數,即是否強制熱更新。true 強制,false 不強制。