微软codepush搭建服务器,通过 CodePush API 参考对本机 SDK 作出响应 - Visual Studio App Center | Microsoft Docs...
響應 Native Client SDK API 參考
02/19/2020
本文內容
CodePush 插件由以下兩個組件組成:
可以導入/要求的 JavaScript 模塊,并允許應用在運行時與服務交互 (例如,檢查更新、檢查有關當前正在運行的應用更新) 的元數據。
本機 API (目標-C 和 Java) ,它允許響應本機應用主機使用正確的 JS 包位置自行啟動。
以下各節將詳細介紹這些 Api 的形狀和行為:
JavaScript API 參考
如果需要 react-native-code-push ,module 對象除了提供根級別 組件修飾器外,還提供以下頂級方法:
allowRestart: Reallows 以編程方式重啟,作為正在安裝的更新的結果,并且(可選)會在不允許重新啟動時,如果等待更新已嘗試重啟應用,則會立即重新啟動應用。 此方法是一種高級 API,只在應用通過方法顯式禁止重新啟動時才是必需的 disallowRestart 。
checkForUpdate:詢問 CodePush 服務配置的應用部署是否有可用的更新。
disallowRestart:在安裝 CodePush 更新后暫時不允許任何編程重啟。 此方法是一種高級 API,在應用中的組件 ((例如,載入過程) 需要確保在其生存期內不會發生最終用戶中斷時,此方法非常有用。
getCurrentPackage:檢索有關當前安裝的 (更新的元數據,如說明、安裝時間、大小) 。
備注
在 v1.10.3-beta CodePush 模塊的 getCurrentPackage 中,已棄用 * 的支持 getUpdateMetadata 。
getUpdateMetadata:檢索安裝的更新的元數據,如說明、必需) (。
notifyAppReady:通知 CodePush 運行時,已安裝的更新被認為是成功的。 如果要手動檢查和安裝未 (同步方法來處理所有更新,) 必須調用此方法; 否則,CodePush 將更新視為失敗,在應用下次重啟時回滾到以前的版本。
restartApp:立即重啟應用。 如果更新掛起,它將立即顯示給最終用戶。 否則,調用此方法的行為與最終用戶終止和重啟進程的行為相同。
sync:允許檢查更新、下載并安裝更新,所有操作都通過一次調用完成。 除非需要自定義 UI 或行為,否則我們建議大多數開發人員在將 CodePush 集成到其應用中時使用此方法
codePush
// Wrapper function
codePush(rootComponent: React.Component): React.Component;
codePush(options: CodePushOptions)(rootComponent: React.Component): React.Component;
// Decorator; Requires ES7 support
@codePush
@codePush(options: CodePushOptions)
用于將 React 組件包裝在"較高順序"React 組件內,該組件知道如何在裝載應用時同步應用的 JavaScript 捆綁包和映像資產。 在內部,高序組件在其生命周期句柄內調用 ,該句柄運行更新檢查,下載更新(如果存在)并安裝 sync componentDidMount 更新。
此修飾器支持自定義其行為,以便輕松啟用具有不同要求的應用。 下面是一些使用它的方法示例, (選擇一種方法,甚至可以使用組合) :
**應用上的無提示同步 (**最簡單的默認行為) 。 應用將自動下載可用更新,并應用它們下次重啟 (如 OS 或最終用戶將其終止,或者設備已重啟) 。 這樣,最終用戶的整個更新體驗都是"無提示"的,因為他們看不到任何更新提示或"合成"應用重啟。
// Fully silent update that keeps the app in
// sync with the server, without ever
// interrupting the end user
class MyApp extends Component {}
MyApp = codePush(MyApp);
每次應用恢復 時,無提示同步。 與 1 相同,只不過我們會檢查更新,如果每次應用在"后臺"后返回到前臺時存在更新,則應用更新。
// Sync for updates every time the app resumes.
class MyApp extends Component {}
MyApp = codePush({ checkFrequency: codePush.CheckFrequency.ON_APP_RESUME, installMode: codePush.InstallMode.ON_NEXT_RESUME })(MyApp);
交互式。 當更新可用時,在下載之前提示最終用戶提供權限,然后立即應用更新。 如果更新是使用標志發布的 mandatory ,則仍將通知最終用戶有關更新的信息,但不能選擇忽略它。
// Active update that lets the end user know
// about each update, and displays it to them
// immediately after downloading it
class MyApp extends Component {}
MyApp = codePush({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE })(MyApp);
日志/顯示進度。 當應用程序與服務器同步以進行更新時,請使用 codePushStatusDidChange 或 codePushDownloadDidProgress 事件掛鉤來注銷此進程的不同階段,甚至向用戶顯示進度欄。
// Make use of the event hooks to keep track of
// the different stages of the sync process.
class MyApp extends Component {
codePushStatusDidChange(status) {
switch(status) {
case codePush.SyncStatus.CHECKING_FOR_UPDATE:
console.log("Checking for updates.");
break;
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
console.log("Downloading package.");
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
console.log("Installing update.");
break;
case codePush.SyncStatus.UP_TO_DATE:
console.log("Up-to-date.");
break;
case codePush.SyncStatus.UPDATE_INSTALLED:
console.log("Update installed.");
break;
}
}
codePushDownloadDidProgress(progress) {
console.log(progress.receivedBytes + " of " + progress.totalBytes + " received.");
}
}
MyApp = codePush(MyApp);
CodePushOptions
codePush修飾器接受 "options" 對象,可用于自定義上面提到的默認行為的眾多方面:
checkFrequency (codePush. checkFrequency) -指定要檢查更新的時間。 默認為 codePush.CheckFrequency.ON_APP_START。 CheckFrequency有關可用選項及其功能的說明,請參閱枚舉引用。
deploymentKey (字符串) -指定要查詢更新的部署密鑰。 默認情況下,此值派生自 info.plist 文件 (iOS) 和 MainActivity 文件 (Android) ,但使用此選項可以在需要動態使用不同部署的情況下從腳本端覆蓋它。
installMode (codePush. installMode) -指定你希望 (未標記為強制) 的更新安裝可選更新。 默認為 codePush.InstallMode.ON_NEXT_RESTART。 InstallMode有關可用選項及其功能的說明,請參閱枚舉引用。
mandatoryInstallMode (codePush. InstallMode) -指定要安裝更新(標記為必需)的時間。 默認為 codePush.InstallMode.IMMEDIATE。 InstallMode有關可用選項及其功能的說明,請參閱枚舉引用。
minimumBackgroundDuration (號) -指定在重新啟動應用之前,應用在后臺的最小秒數。 此屬性僅適用于使用 或 安裝的更新,并且可用于在最終用戶的前面更快獲取更新,而不會太 InstallMode.ON_NEXT_RESUME InstallMode.ON_NEXT_SUSPEND 模糊。 默認為 ,它會在恢復后立即應用更新,或者除非應用暫停足夠長而無關緊要,但只要它在后臺 0 運行。
updateDialog (UpdateDialogOptions) - 一個"options"對象,用于確定在更新可用時是否應該向最終用戶顯示確認對話框,如果是,則使用哪些字符串。 默認為 null ,這將禁用對話。 將此值設置為任何值將啟用具有默認字符串的對話,并且將對象傳遞給此參數允許啟用對話以及重寫一 true 個或多個默認字符串。 在分布式應用中啟用App Store,請參閱 此注釋。
以下列表表示可用選項及其默認值:
appendReleaseDescription (布爾 值) - 指示是否要將可用發布的說明追加到向最終用戶顯示的通知消息中。 默認為 false。
descriptionPrefix (字符串) - 指示在向最終用戶顯示更新通知時,要以作為發布說明前綴的字符串(如果有)。 默認為 " Description: "
mandatoryContinueButtonLabel (字符串) - 用于最終用戶必須按下的按鈕的文本,以安裝強制更新。 默認為 "Continue"。
mandatoryUpdateMessage (字符串) - 將更新指定為必需時用作更新通知正文的文本。 默認為 "An update is available that must be installed."。
optionalIgnoreButtonLabel (字符串) - 用于最終用戶可以按下的按鈕的文本,以忽略可用的可選更新。 默認為 "Ignore"。
optionalInstallButtonLabel (字符串) - 用于最終用戶可以按下以安裝可選更新的按鈕的文本。 默認為 "Install"。
optionalUpdateMessage (字符串) -更新為可選時用作更新通知的正文的文本。 默認為 "An update is available. Would you like to install it?"。
標題 (字符串) -用作向最終用戶顯示的更新通知的標頭的文本。 默認為 "Update available"。
codePushStatusDidChange (事件掛鉤)
當同步過程在整個更新過程中從一個階段移到另一個階段時調用。 使用表示當前狀態的狀態代碼調用事件掛鉤,可以是任何 SyncStatus 值。
codePushDownloadDidProgress (事件掛鉤)
從 CodePush 服務器下載可用的更新時定期調用。 使用對象調用方法 DownloadProgress ,該對象包含以下兩個屬性:
totalBytes (Number) -預期要為此更新接收的總字節數 (這是一組文件的大小,該大小從以前的版本) 進行了更改。
接收 (數字) -到目前為止下載的字節數,可用于跟蹤下載進度。
codePush. allowRestart
codePush.allowRestart(): void;
Reallows 編程重啟發生,由于之前對的調用,將被拒絕 disallowRestart 。 如果 disallowRestart 第一次沒有調用,則調用此方法將導致不會操作。
如果 CodePush 更新當前處于掛起狀態,而該更新嘗試重新啟動應用 (例如,使用 InstallMode.IMMEDIATE) ,但由于調用而被阻止, disallowRestart 則調用 allowRestart 將導致立即重啟。 此重啟允許盡快應用更新,而不會在關鍵工作流期間中斷最終用戶 (例如,) 的載入過程。
例如,如果在 allowRestart 調用后出現的disallowRestart 文檔中有一種情況發生,調用會立即觸發立即重新啟動 disallowRestart 。 但是, allowRestart 如果滿足以下幾點,則調用將不會觸發重新啟動:
自上次調用 以來未安裝 CodePush 更新,因此,也無需 disallowRestart 重啟。
當前有一個掛起的 CodePush 更新,但它是通過 安裝的,因此不需要以編程 InstallMode.ON_NEXT_RESTART 方式重啟。
當前有一個掛起的 CodePush 更新,但它是通過 安裝的,并且應用尚未置于后臺,因此無需以編程方式 InstallMode.ON_NEXT_RESUME 重啟。
自上次 restartApp 調用 以來未調用 disallowRestart 任何 。
此行為可確保不會由于調用 而觸發重啟,除非在不允許的時段內顯式請求 allowRestart 了重啟。 這樣, 類似于調用 ,只不過前者僅在當前掛起的更新想要重啟時觸發重啟,但后者在更新掛起時 allowRestart restartApp(true) 將重新啟動。
codePush.checkForUpdate
codePush.checkForUpdate(deploymentKey: String = null, handleBinaryVersionMismatchCallback: (update: RemotePackage) => void): Promise;
查詢 CodePush 服務,以查看配置的應用部署是否具有可用的更新。 默認情況下,它將使用 Info.plist 文件 (iOS) 或 MainActivity.java 文件 (Android) 中配置的部署密鑰,但可以通過可選參數指定值來替代該密鑰。 deploymentKey 當你想要將用戶動態"重定向"到特定部署時(例如,允許通過花子或用戶設置開關"提前訪問"),這非常有用。
第二個 handleBinaryVersionMismatchCallback 可選參數是可選回調函數,可用于在存在任何二進制更新時通知用戶。
例如,假設有一個用例,其中當前安裝的二進制版本為 1.0.1,其標簽 (代碼推送標簽) v1。 更高版本的本機代碼在開發周期中已更改,二進制版本已更新為 1.0.2。 觸發代碼圖更新檢查時,我們將忽略二進制版本不匹配的更新 (因為更新不面向當前安裝的應用版本的二進制) 。 在這種情況下,已安裝的應用 (1.0.1) 將忽略更新目標版本1.0.2。 可以使用 handleBinaryVersionMismatchCallback 提供掛鉤來處理這種情況。
重要
如果要在開發 iOS 應用程序時使用此回調中的警報,則請務必小心,因為 應用商店 審核過程:應用不得強制用戶對應用進行評級、查看應用、下載其他應用或其他類似操作,以便訪問功能、內容或應用的使用。
此方法返回一個 Promise ,它解析為以下兩個可能值之一:
null 如果沒有可用的更新,則為。 以下方案中可能會發生這種情況:
配置的部署不包含任何版本,因此不會更新任何內容。
在配置的部署中,最新版本的目標是與當前運行的二進制版本不同 (舊版本或較新) 。
當前正在運行的應用已從配置的部署中獲得最新版本,因此,不再需要它。
配置的部署中的最新版本當前已標記為禁用,因此不允許下載。
配置的部署中的最新版本處于 "活動推出" 狀態,并且請求的設備不在符合資格的用戶的百分比內。
一個 RemotePackage 實例,表示可以檢查或以后下載的可用更新。
示例用法:
codePush.checkForUpdate()
.then((update) => {
if (!update) {
console.log("The app is up to date!");
} else {
console.log("An update is available! Should we download it?");
}
});
codePush. disallowRestart
codePush.disallowRestart(): void;
由于以下任一情況,暫時不允許編程重啟發生:
使用安裝 CodePush 更新 InstallMode.IMMEDIATE
使用安裝 CodePush 更新 InstallMode.ON_NEXT_RESUME ,并從后臺恢復應用 (可以選擇通過屬性進行限制 minimumBackgroundDuration)
restartApp調用了方法
備注
步驟1和步驟2可以通過調用來有效地工作 restartApp ,因此,你可以將 disallowRestart 其視為阻止對的任何調用 restartApp ,無論你的應用程序是直接還是間接調用它。
調用此方法后,仍允許對 的任何調用檢查更新、下載并安裝更新,但重啟應用的嘗試將排隊,直到 sync allowRestart 調用 。 這樣一來,將捕獲重啟請求,并且只要希望允許重啟請求發生,就可以"刷新"該請求。
這是一個高級 API,主要在應用 (中的單個組件(如載入過程) )需要確保最終用戶在其生存期內不會發生中斷,同時繼續允許應用以自己的步調保持與 CodePush 服務器同步以及使用任何合適的安裝模式時非常有用。 這樣做的好處是允許應用盡快發現和下載可用的更新,同時防止關鍵最終用戶體驗期間出現任何中斷。
作為替代方法,還可以在調用 ((永遠不會嘗試以編程方式重啟應用) )時使用 ,然后在應用中的"安全"點顯式調用以這樣做。 InstallMode.ON_NEXT_RESTART sync restartApp disallowRestart 當與 CodePush 服務器同步的代碼與想要強制實施無重啟策略的代碼/組件分開時,提供了一種替代方法。
示例用法:
class OnboardingProcess extends Component {
...
componentWillMount() {
// Ensure that any CodePush updates that are
// synchronized in the background can't trigger
// a restart while this component is mounted.
codePush.disallowRestart();
}
componentWillUnmount() {
// Reallow restarts, and optionally trigger
// a restart if one was currently pending.
codePush.allowRestart();
}
...
}
codePush.getCurrentPackage
備注
自 CodePush 模塊起,此方法被視為 v1.10.3-beta 已棄用。 如果要在 (或更高版本) ,我們建議改為使用 ,因為它 codePush.getUpdateMetadata 的行為更具可預測性。
codePush.getCurrentPackage(): Promise;
檢索有關當前安裝的"包"的元數據, (說明、安裝時間) 。 對于顯示"新增功能?"等方案,這非常有用 應用更新后對話框,或檢查是否有等待通過恢復或重啟應用掛起的更新。
此方法返回 Promise ,它解析為兩個可能值之一:
null 如果應用當前從二進制文件而不是 CodePush 更新運行 JS 捆綁包,則 。 這種情況在下列情況下發生:
最終用戶已安裝應用程序二進制文件,但尚未安裝 CodePush 更新
最終用戶已安裝二進制 (的更新,例如,從應用商店) ,它清除掉舊的 CodePush 更新,并在二進制文件中優先返回到 JS 二進制。
一個 LocalPackage 實例,表示當前正在運行的 CodePush 更新的元數據。
示例用法:
codePush.getCurrentPackage()
.then((update) => {
// If the current app "session" represents the first time
// this update has run, and it had a description provided
// with it upon release, let's show it to the end user
if (update.isFirstRun && update.description) {
// Display a "what's new?" modal
}
});
codePush. getUpdateMetadata
codePush.getUpdateMetadata(updateState: UpdateState = UpdateState.RUNNING): Promise;
檢索已安裝的更新的元數據, (如說明、必需) ,其狀態與指定 updateState 參數匹配。 這對于顯示 "新增功能" 之類的方案非常有用。 在應用更新后,或檢查是否有等待通過恢復或重新啟動應用的掛起更新。 有關可能的更新狀態及其表示內容的詳細信息,請參閱 UpdateState 參考。
此方法返回一個 Promise ,它解析為以下兩個可能值之一:
null 如果當前不存在具有指定狀態的更新。 在下列情況下會發生這種情況:
最終用戶尚未安裝任何 CodePush 的更新,這就是沒有元數據可用于任何更新的原因,無論你何時指定為 updateState 參數。
最終用戶已安裝二進制 (的更新,例如,從應用商店) ,它清除掉舊的 CodePush 更新,并在二進制文件中優先返回到 JS 二進制。 這會表現出與 #1 相同的行為
updateState參數設置為 UpdateState.RUNNING ,但應用當前未運行 CodePush 更新。 可能有一個掛起的更新,但該應用尚未重新啟動才能使其處于活動狀態。
updateState參數設置為 UpdateState.PENDING ,但應用沒有任何當前掛起的更新。
一個 LocalPackage 實例,表示當前請求的 CodePush 更新的元數據, (正在運行或掛起的) 。
示例用法:
// Check if there's currently a CodePush update running, and if
// so, register it with the HockeyApp SDK (https://github.com/slowpath/react-native-hockeyapp)
// so that crash reports will correctly display the JS bundle version the user was running.
codePush.getUpdateMetadata().then((update) => {
if (update) {
hockeyApp.addMetadata({ CodePushRelease: update.label });
}
});
// Check to see if there's still an update pending.
codePush.getUpdateMetadata(UpdateState.PENDING).then((update) => {
if (update) {
// There's a pending update, do we want to force a restart?
}
});
codePush.notifyAppReady
codePush.notifyAppReady(): Promise;
通知 CodePush 運行時,新安裝的更新應被視為成功,因此,不需要自動客戶端回滾。 在更新的捆綁包的代碼中的某一位置調用此函數是必需的。 否則,當應用下次重新啟動時,CodePush 運行時將假定已安裝的更新失敗并回滾到以前的版本。 存在此行為有助于確保最終用戶不會被損壞的更新阻止。
如果使用的是 函數,并且對應用啟動執行更新檢查,則無需手動調用 ,因為 sync notifyAppReady sync 會調用它。 存在此行為是因為假設在應用中調用 時,它表示成功 sync 啟動的良好近似值。
備注
此方法也別名為 notifyApplicationReady (,用于實現向后) 。
codePush.restartApp
codePush.restartApp(onlyIfUpdateIsPending: Boolean = false): void;
立即重啟應用。 如果向 參數提供了真實值,則應用將僅在實際存在等待應用的掛起更新 onlyIfUpdateIsPending 時重啟。
此方法適用于高級方案,在滿足以下條件時主要用于:
調用 或 方法時,應用將指定 或 ON_NEXT_RESTART ON_NEXT_RESUME 的 sync 安裝模式 LocalPackage.install 值。 在最終用戶或 OS (重啟應用或恢復應用之前) 不會應用更新,因此不會立即向最終用戶顯示更新。
你有一個特定于應用的用戶事件 (例如最終用戶導航回應用的主頁路由) ,該路由允許以非介入方式應用更新,并可能早于等到下次重啟或恢復時向最終用戶獲取更新。
codePush.sync
codePush.sync(options: Object, syncStatusChangeCallback: function(syncStatus: Number), downloadProgressCallback: function(progress: DownloadProgress), handleBinaryVersionMismatchCallback: function(update: RemotePackage)): Promise;
將應用的 JavaScript 捆綁包和映像資產與最新版本同步到配置的部署。 與 checkForUpdate 方法不同,后者檢查是否存在更新,并讓你控制接下來要做的事情, sync 為你處理更新檢查、下載和安裝體驗。
此方法為兩個不同的 (提供支持,但可自定義) "模式" 以輕松地啟用具有不同要求的應用:
無提示模式 (默認行為) 自動下載可用更新,并在應用程序下次重新啟動時應用它們 (例如,OS 或最終用戶取消了該操作,或者設備已重新啟動) 。 這樣一來,整個更新體驗對最終用戶是 "無提示" 的,因為他們看不到任何更新提示或 "綜合" 應用重啟。
活動模式:當更新可用時,將在下載之前提示最終用戶提供權限,然后立即應用更新。 如果更新是使用標志發布的 mandatory ,則仍將通知最終用戶有關更新的信息,但不能選擇忽略它。
示例用法:
// Fully silent update that keeps the app in
// sync with the server, without ever
// interrupting the end user
codePush.sync();
// Active update, which lets the end user know
// about each update, and displays it to them
// immediately after downloading it
codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE });
提示
如果要確定是基于最終用戶的設備電池電量級別、網絡狀況等來檢查還是下載可用的更新,請將對的調用包裝 sync 在一個條件下,以確保僅在需要時進行調用。
SyncOptions
雖然此 sync 方法會嘗試使用少量的配置輕松執行無提示和活動更新,但它會接受 "options" 對象,該對象允許您自定義上述默認行為的許多方面。 可用選項與 CodePushOptions相同,但 checkFrequency 選項除外:
deploymentKey (字符串) -請參閱 CodePushOptions 。
installMode (codePush. installMode) -請參閱 CodePushOptions 。
mandatoryInstallMode (codePush. InstallMode) -請參閱 CodePushOptions 。
minimumBackgroundDuration (號) -請參閱 CodePushOptions 。
updateDialog (UpdateDialogOptions) - 請參閱 CodePushOptions 。
示例用法:
// Use a different deployment key for this
// specific call, instead of the one configured
// in the Info.plist file
codePush.sync({ deploymentKey: "KEY" });
// Download the update silently, but install it on
// the next resume, as long as at least 5 minutes
// has passed since the app was put into the background.
codePush.sync({ installMode: codePush.InstallMode.ON_NEXT_RESUME, minimumBackgroundDuration: 60 * 5 });
// Download the update silently, and install optional updates
// on the next restart, but install mandatory updates on the next resume.
codePush.sync({ mandatoryInstallMode: codePush.InstallMode.ON_NEXT_RESUME });
// Changing the title displayed in the
// confirmation dialog of an "active" update
codePush.sync({ updateDialog: { title: "An update is available!" } });
// Displaying an update prompt which includes the
// description for the CodePush release
codePush.sync({
updateDialog: {
appendReleaseDescription: true,
descriptionPrefix: "\n\nChange log:\n"
},
installMode: codePush.InstallMode.IMMEDIATE
});
除了選項之外, 方法還接受多個可選函數參數,這些參數允許你訂閱"管道"的生命周期,以便根據需要顯示其他 UI (例如"檢查更新模式或下載進度模式 sync sync) :
syncStatusChangedCallback ( (syncStatus: 數字) => void) - 當同步過程從一個階段移到整個更新過程中的另一個階段時調用。 使用狀態代碼調用 方法,該代碼表示當前狀態,可以是任何 SyncStatus 值。
downloadProgressCallback ( (進度:DownloadProgress) => void) - 從 CodePush 服務器下載可用更新時定期調用。 使用 對象調用 方法 DownloadProgress ,該對象包含以下兩個屬性:
totalBytes (Number) - 此更新 (預期接收的總字節數,這是一組文件的大小,與以前的版本相比) 。
receivedBytes (Number) - 到目前為止下載的字節數,可用于跟蹤下載進度。
handleBinaryVersionMismatchCallback ( (update:RemotePackage) => void) - 當有任何可用的二進制更新時調用。 使用 對象調用 RemotePackage 方法。 有關更多詳細信息 ,請參閱 codePush.checkForUpdate 部分。
示例用法:
// Prompt the user when an update is available
// and then display a "downloading" modal
codePush.sync({ updateDialog: true },
(status) => {
switch (status) {
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
// Show "downloading" modal
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
// Hide "downloading" modal
break;
}
},
({ receivedBytes, totalBytes, }) => {
/* Update download modal progress */
}
);
此方法返回 Promise ,它解析為 SyncStatus 指示調用成功 sync 原因的代碼。 此代碼可以是以下值之 SyncStatus 一:
codePush.SyncStatus.UP_TO_DATE ( 4) - 應用是 CodePush 服務器最新的。
codePush.SyncStatus.UPDATE_IGNORED ( 5) - 應用具有最終用戶選擇忽略的可選更新。 (這僅適用于 updateDialog 使用)
codePush.SyncStatus.UPDATE_INSTALLED (6) -已安裝更新,并將在該函數返回后立即運行 syncStatusChangedCallback ,或在下次應用恢復/重新啟動時運行,具體取決于 InstallMode 中指定的 SyncOptions 。
codePush.SyncStatus.SYNC_IN_PROGRESS (7) -正在 sync 運行的操作阻止執行當前調用。
sync可以在要檢查更新的任何位置調用此方法。 這可能是 componentWillMount 根組件的生命周期事件、組件的 onPress 處理程序、 定期計時器的回調,或者其他任何對你的需求都有意義的。 與 checkForUpdate 方法類似,它執行網絡請求來檢查后臺更新,因此不會影響 UI 線程或 JavaScript 線程的響應能力。
包對象
checkForUpdate和 getUpdateMetadata 方法返回 Promise 對象,解析后,提供對 "package" 對象的訪問。 包表示你的代碼更新和任何額外的元數據 (如 description,必需? ) 。 CodePush API 區分以下類型的包:
LocalPackage:表示已運行的已下載更新,或者已安裝并且正在等待應用重啟。
RemotePackage:表示尚未下載的 CodePush 服務器上的可用更新。
LocalPackage
包含有關已在本地下載或已安裝的更新的詳細信息。 您可以通過調用模塊級方法獲取對此對象的實例的引用,或通過調用該方法返回的承諾的值獲取對此對象的實例的引用 getUpdateMetadata RemotePackage.download 。
屬性
appVersion:此更新所依賴的應用二進制版本。 這是在 appStoreVersion 調用 CLI 的命令時通過參數指定的值 release 。 (字符串)
deploymentKey: 最初用于下載此更新的部署密鑰。 (字符串)
description: 更新的說明。 此值與發布更新時在 CLI 中指定的值相同。 (字符串)
failedInstall: 指示此更新以前是否已安裝,但已回滾。 方法將自動忽略以前失敗的更新,因此,如果使用 ,則只需 sync 擔心此屬性 checkForUpdate 。 (布爾值)
isFirstRun: 指示這是否是安裝后首次運行更新。 這可用于確定是否要顯示"新增功能?" 安裝更新后向最終用戶提供 UI。 (布爾值)
isMandatory: 指示更新是否被視為必需。 這是發布更新時在 CLI 中指定的值。 (布爾值)
isPending: 指示此更新是否位于"掛起"狀態。 如果為 ,則意味著已下載并安裝更新,但應用需要重啟才能應用,這就是其更改當前對最終用戶不可見 true 的原因。 (布爾值)
label:CodePush 服務器自動為更新提供的內部標簽,例如 v5 。 此值唯一標識其部署中的更新。 (字符串)
packageHash:更新的 SHA 哈希值。 (字符串)
packageSize:包含在更新中的代碼的大小(以字節為單位)。 (號)
方法
install (installMode: codePush. installMode = codePush.InstallMode.ON_NEXT_RESTART,minimumBackgroundDuration = 0) :承諾 < void >:通過將更新保存到運行時期望在其上查找最新版本應用的磁盤位置來安裝更新。 installMode參數控制向最終用戶顯示更改的時間。 默認值為等待,直到下一個應用重新啟動才能顯示更改,但你可以參考 InstallMode 枚舉參考來了解可用選項的說明及其功能。 如果將 installMode 參數設置為 InstallMode.ON_NEXT_RESUME ,則 minimumBackgroundDuration 參數使你能夠控制在恢復安裝之后強制安裝之前,應用程序在后臺中必須有多長時間。
RemotePackage
包含有關可從 CodePush 服務器下載的更新的詳細信息。 當更新可用時,通過調用方法來獲取對此對象的實例的引用 checkForUpdate 。 如果你使用的是 sync API,則無需擔心 RemotePackage ,因為它會自動為你處理下載和安裝過程。
屬性
RemotePackage繼承所有與相同的屬性 LocalPackage ,但包含一個其他屬性:
downloadUrl:包可用于下載的 URL。 此屬性只是高級使用所必需的,因為該 download 方法將自動為你獲取更新的獲取。 (字符串)
方法
下載 (downloadProgressCallback?: Function) :承諾 :下載 CodePush 服務中的可用更新。 如果 downloadProgressCallback 指定了,則會定期使用 DownloadProgress 對象 ({ totalBytes: Number, receivedBytes: Number }) 報告下載進度,直到完成。 返回用解析的承諾 LocalPackage 。
枚舉
CodePush API 包含以下枚舉,可用于自定義更新體驗:
InstallMode
此枚舉指定何時希望實際應用已安裝的更新,并可以傳遞給 sync 或 LocalPackage.install 方法。 它包含以下值:
codePush.InstallMode.IMMEDIATE (0) - 指示要安裝更新并立即重啟應用。 此值適用于調試方案以及向用戶顯示更新提示時,因為他們預期在接受安裝后立即看到更改。 此外,此模式可用于強制執行強制更新,因為它消除了更新安裝與最終用戶下次重啟或恢復應用之間的可能不需要的延遲。
codePush.InstallMode.ON_NEXT_RESTART ( 1) - 指示要安裝更新,但不強制重啟應用。 當應用因操作系統或最終用戶 (而"自然"重啟時,) 無縫選取更新。 執行無提示更新時,此值是合適的,因為如果應用突然突然重啟,可能會給最終用戶造成中斷。 他們甚至不會意識到更新已下載。 這是用于 和 方法的默認 sync LocalPackage.install 模式。
codePush.InstallMode.ON_NEXT_RESUME ( 2) - 指示要安裝更新,但不希望在最終用戶下次從后臺恢復應用之前重啟應用。 這樣,你無需中斷其當前會話,但可以比等待下一次自然重啟更快獲得更新。 此值適用于以非入侵方式在恢復時應用的無提示安裝。
codePush.InstallMode.ON_NEXT_SUSPEND (3) -表示你希望在更新處于后臺 時 安裝該更新,但) 默認情況下在后臺等待 minimumBackgroundDuration 數秒 (0,以便用戶上下文不會丟失,除非應用暫停時間足夠長而不重要。
CheckFrequency
此枚舉指定你希望你的應用程序與服務器進行同步以獲取更新,并且可以傳遞到 codePushify 修飾器。 它包括以下值:
codePush.CheckFrequency.ON_APP_START (0) -指示你希望在應用程序的進程啟動時檢查更新。
codePush.CheckFrequency.ON_APP_RESUME (1) -表示你希望在應用程序在 "backgrounded" 后返回到前臺來檢查是否有更新, (用戶按下 home 按鈕,應用程序將啟動單獨的付款過程,依此類推) 。
codePush (2) -禁用自動檢查更新,但僅檢查 codePush.sync() 在應用程序代碼中調用的時間。
SyncStatus
此枚舉提供給 syncStatusChangedCallback 可傳遞給方法的函數 sync ,以掛鉤到整個更新過程。 它包括以下值:
codePush.SyncStatus.CHECKING_FOR_UPDATE (0) -正在查詢 codePush 服務器以獲取更新。
codePush.SyncStatus.AWAITING_USER_ACTION (1) -有可用更新,并向最終用戶顯示確認對話框。 (這僅適用于 updateDialog 使用)
codePush.SyncStatus.DOWNLOADING_PACKAGE (2) -正在從 codePush 服務器下載可用更新。
codePush.SyncStatus.INSTALLING_UPDATE (3) -已下載并將要安裝的可用更新。
codePush.SyncStatus.UP_TO_DATE (4) -應用程序與配置的部署完全保持最新。
codePush.SyncStatus.UPDATE_IGNORED ( 5) - 應用具有最終用戶選擇忽略的可選更新。 (僅在使用 時 updateDialog 適用)
codePush.SyncStatus.UPDATE_INSTALLED ( 6) - 已安裝可用更新,并且將在函數返回后立即運行,或者將在下一次恢復/重啟應用時運行,具體取決于 中 syncStatusChangedCallback 指定的 InstallMode SyncOptions 。
codePush.SyncStatus.SYNC_IN_PROGRESS ( 7) - 存在阻止執行當前調用 sync 的正在進行的操作。
codePush.SyncStatus.UNKNOWN_ERROR (-1) - 同步操作發現未知錯誤。
UpdateState
此枚舉指定當前更新的狀態,可以在調用 方法時 getUpdateMetadata 指定該狀態。 它包含以下值:
codePush.UpdateState.RUNNING (0) - 指示更新表示當前正在運行的應用的版本。 對于在"新增功能?"中顯示發布說明等方案,這可用于標識有關應用的屬性 對話框或向分析或崩潰報告服務報告最新版本。
codePush.UpdateState.PENDING (1) - 指示已安裝更新,但尚未重啟應用應用。 這可用于確定是否有掛起的更新,你可能想要通過 (應用) restartApp 重啟。
codePush.UpdateState.LATEST (2) - 指示更新表示最新可用版本,并且可能當前正在運行或掛起。
Objective-C API 參考 (iOS)
Objective-C API 通過將 標頭導入 CodePush.h AppDelegate.m 文件提供,由名為 的單個公共類組成 CodePush 。
CodePush
包含用于檢索的靜態方法,該方法用于檢索 NSURL 表示最新 JavaScript 捆綁文件的,并且可以 RCTRootView 在 initWithBundleURL AppDelegate 文件中啟動應用時將其傳遞到的方法。
CodePush類的方法可以被視為復合解析程序,它始終加載適當的綁定,以適應以下方案:
當最終用戶從應用商店安裝應用時 (如 1.0.0) 一樣,他們將獲取二進制文件中包含的 JS 捆綁包。 這是你在不使用 CodePush 的情況下獲得的行為,但我們確保它不會中斷: )
開始發布 CodePush 更新后,最終用戶會立即獲取用于表示已配置部署的最新版本的 JS 捆綁包。 這是一種允許您循環訪問存儲的內容的行為。
一旦你將更新發布到應用商店 (如 1.1.0) ,最終用戶更新該更新后,他們將再次獲取二進制文件中包含的 JS 捆綁包。 此行為可確保 CodePush 以前的二進制版本所使用的更新不 (,因為我們不知道它們會) 運行,最終用戶始終具有應用的有效版本。
重復 #2,并 #3 CodePush 版本和應用商店版本是否繼續進入無限大 (和更高版本 )
由于此行為,你可以在必要時安全地將更新部署到應用商店 (的) 和 CodePush,并確保你的最終用戶將始終獲取最新版本。
方法
(NSURL *) bundleURL -返回上文所述的最新 JS 包 NSURL 。 此方法假定應用二進制文件中包含的 JS 包的名稱為 main.jsbundle 。
(NSURL *) bundleURLForResource: (NSString *) context.resourcename -等效于 bundleURL 方法,但也允許自定義在應用二進制文件中搜索的 JS 包的名稱。 如果不將此文件命名,則 (main 默認約定) 。 此方法假定 JS 捆綁包的擴展為 *.jsbundle 。
(NSURL *) bundleURLForResource: (NSString *) resourceName withExtension: (NSString *) resourceExtension: 等效于 方法,但也允許自定義在應用二進制文件中搜索的 JS 捆綁包使用的擴展。 bundleURLForResource: 如果不將此文件命名,則 (*.jsbundle 默認約定) 。
(void) overrideAppVersion: (NSString) * appVersionOverride - 設置應用程序的二進制接口的版本,否則默認為 CFBundleShortVersionString 在 Info.plist 中指定為 的 App Store 版本。 在加載捆綁 URL 之前,應調用一次。
(void) setDeploymentKey: (NSString *) deploymentKey - 設置應用在查詢更新時應該使用的部署密鑰。 這是在 Info.plist 中設置部署密鑰或在調用 或 時在 JS 中指定部署密鑰的動態 checkForUpdate 替代方法 sync 。
Android (Java API)
適用于 React Native 0.60 及以上版本的 API
由于 autolinking react-native.config.js 使用 鏈接插件,因此構造函數在該文件中指定。 但是,可以通過將這些值放在字符串資源中來替代自定義變量來管理 CodePush 插件。
公鑰 - 用于代碼簽名功能中的捆綁驗證。 有關代碼 簽名 功能的詳細信息,請參閱代碼簽名部分。
若要設置公鑰,應添加公鑰的內容,名稱 strings.xml 為 CodePushPublicKey 。 CodePush 會自動獲取此屬性并啟用代碼簽名功能。 例如:
your-public-key
服務器 URL - 用于指定 CodePush 服務器 URL。
通過將路徑添加到名稱 為 的 來重寫 https://codepush.appcenter.ms/ strings.xml 默認值 CodePushServerUrl ""。 CodePush 會自動獲取此屬性,并將使用此路徑發送請求。 例如:
https://yourcodepush.server.com
用于響應本機低于0.60 的 API
可以通過將類導入 com.microsoft.codepush.react.CodePush 到 MainActivity 文件中來提供 Java API,并包含名為的單個公共類 CodePush 。
CodePush
構造 CodePush 客戶端運行時,并表示 ReactPackage 添加到應用的包列表的實例。
構造函數
CodePush (String deploymentKey,Activity mainActivity) -創建 CodePush 運行時的新實例,該實例將用于通過提供的部署密鑰來查詢服務是否有更新。 在 mainActivity this 類中配置響應包列表時,應始終將參數設置為 MainActivity 。 此構造函數將 CodePush 運行時置于 "發布模式",因此,如果要啟用調試行為,請改用以下構造函數。
CodePush (String deploymentKey,Activity mainActivity,Bool isDebugMode) 等效于以前的構造函數,但允許您指定是否希望 CodePush 運行時處于調試模式。 使用此構造函數時, isDebugMode 應始終將參數設置為, BuildConfig.DEBUG 使其與生成類型保持同步。 將 CodePush 置于調試模式時,會啟用以下行為:
每當將新的二進制文件部署到模擬器/設備時,不會從存儲中刪除舊的 CodePush 更新。 利用此行為,你可以部署新的二進制文件,而無需在開發期間碰撞版本,并且無需在每次應用程序調用時持續獲取相同的更新 sync 。
只要安裝了 CodePush 更新,就會刪除響應本機運行時在調試模式下維護的本地緩存。 這可確保在應用更新后重新啟動應用后,可以看到預期的更改。 一旦合并 此 PR ,就不再需要執行此操作。
CodePush (String deploymentKey, Context context, boolean isDebugMode, Integer publicKeyResourceDescriptor) - 等效于上一構造函數,但允許你指定讀取公鑰內容所需的公鑰資源描述符。 有關代碼 簽名 功能的詳細信息,請參閱代碼簽名部分。
CodePush (String deploymentKey、 Context context、 boolean isDebugMode、 String serverUrl) - 構造函數允許你指定 CodePush 服務器 URL。 默認值: "https://codepush.appcenter.ms/" 由 中指定的值替代 serverUrl 。
靜態方法
getBundleUrl () - 返回應用的 JS 捆綁文件最新版本的路徑,假定資源名稱為 index.android.bundle 。 如果應用使用不同的捆綁名稱,請使用此方法的重載版本,這樣就可以指定它。 此方法具有與上述 Objective-C 等效項相同的解析行為。
getBundleUrl (String bundleName) - 使用指定的資源名稱返回應用的 JS 捆綁文件最新版本的路徑, (index.android.bundle) 。 此方法具有與上述 Objective-C 等效項相同的解析行為。
overrideAppVersion (String appVersionOverride) - 設置應用程序的二進制接口的版本,否則默認為 versionName build.gradle 中指定為 的 Play Store 版本。 在構造 CodePush 實例之前,應調用一次。
總結
以上是生活随笔為你收集整理的微软codepush搭建服务器,通过 CodePush API 参考对本机 SDK 作出响应 - Visual Studio App Center | Microsoft Docs...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java自定义标签遍历_自定义标签 -
- 下一篇: 怎么证明建立了存储过程_【Filecoi