微软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 实例之前,应调用一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计

除了使用媒体查询和现代css布局(如flexbox和grid)来创建响应式网站外&#xff0c;我们还可以做好某些被忽视的事情来制作响应式网站。在本文中&#xff0c;我们将探讨许多可用的工具(围绕html和css)&#xff0c;从响应图像到相对较新的CSS函数&#xff0c;无论我们是否使用媒体…

查找服务器大文件内容,Linux查找大文件命令,springmvc基础面试题

1、查询服务器中大于1G的文件find / -type f -size 1G查询结果如下&#xff1a;[rootlocalhost ~]# find / -type f -size 1G/var/lib/mysql/darkindustry/tbl_jm_account.ibd/var/lib/mysql/tase1/key_timing_3.ibd/var/lib/mysql/tase1/news_info_bak_1.MYD/var/lib/mysql/my…

vue 微信公众号支付接口_vue实现微信公众号支付DEMO

预备工作连接电源打开你的电脑打开你的vscode获取appidnpm install weixin-js-sdk开撸在你的支付按钮上添加一个事件、代码为&#xff1a;var url https://open.weixin.qq.com/connect/oauth2/authorize?appid输入你的appid&redirect_urihttp://tdjl.kurongdashi.com?pa…

如何将文件二进制传输至aix服务器,有什么办法把文件从WINDOWS系统中传到AIX中?...

有什么办法把文件从WINDOWS系统中传到AIX中&#xff1f;(2011-12-21 04:19:38)标签&#xff1a;杂谈有什么办法把文件从WINDOWS系统中传到AIX中&#xff1f;我有一台笔记本可以远程登陆170和F85&#xff0c;两台都是AIXV5.2&#xff0c;原来ML是04&#xff0c;想升级&#xff0…

小米手机硬改技术_小米11手机爆料:首发骁龙875 或采用屏下摄像头技术

12月1日高通应该就要公布骁龙875处理器&#xff0c;而对于这颗2021年的旗舰芯片&#xff0c;小米手机必然要抢首发&#xff0c;这也是他们一贯的传统。据最新消息称&#xff0c;小米11手机有望首发骁龙875处理器&#xff0c;不过这款手机预计要在明年3月份左右推出&#xff0c;…

小企业文件打印服务器,小企业云服务器方案

小企业云服务器方案 内容精选换一换在“确认配置”页面&#xff0c;查看云服务器配置详情。如果您对价格有疑问&#xff0c;可以单击“了解计费详情”来了解产品价格。如果您对价格有疑问&#xff0c;可以单击“了解计费详情”来了解产品价格。企业项目该参数针对企业用户使用。…

linux安装python27_linux下安装python27 nginx 和uwsgi

注意&#xff1a;python27 默认没有安装 pip 和setuptools所以要提前安装。(务必先提前安装python27 哈 )wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.pypython ez_setup.py--insecurewget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486…

太太丘舍去_过中不至,太丘舍去,去后乃至的意思

展开全部过了正午朋友还没有到&#xff0c;陈太丘不再等候他而离开了&#xff0c;陈太丘离开后朋友才到。原文出自e69da5e6ba903231313335323631343130323136353331333433643131《陈太丘与友期行》南北朝刘义庆陈太丘与友期行&#xff0c;期日中。过中不至&#xff0c;太丘舍去…

5怎么选国外节点_外卖包装怎么选?这5个技巧要掌握

(↑点上图“知识卡片”&#xff0c;按右上角箭头&#xff0c;可分享至朋友圈保存↑)在这个重颜值的时代&#xff0c;消费者对于外卖包装的诉求在逐渐提高&#xff0c;在餐品质量差异不大的前提下&#xff0c;那些包装好的商品&#xff0c;更具市场竞争力&#xff0c;能加深消费…

基于jmx监控kafka_0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用

1.文档编写目的Fayson在前面的文章介绍了《0374-如何在CDH集群中部署Kafka Manager》&#xff0c;本篇文章Fayson介绍另外一款的监控工具Kafka-eagle&#xff0c;它可以同时监控多个集群&#xff0c;监控集群中Topic的被消费情况(包含Lag产生、Offset的改变及Partition分布)&am…

android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】

说到逆向APP&#xff0c;很多人首先想到的都是反编译&#xff0c;但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值&#xff0c;极大地增加了逆向时的复杂度&#xff0c;有没有什么办法可以方便地知道被传入的参数和返回值呢&#xff1f;答案是有的…

jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

欢迎关注公众号&#xff1a;xfxuezhangMySQL数据库与JDBC编程JDBC (Java Database Connectivity)DDL(Data Definition Language&#xff0c;数据定义语言)语句创建表修改表结构增加列定义修改列定义删除列删除数据表清空表MySQL重命名数据表MySQL修改列名数据库约束索引(一个数…

mysql goldengate_goldengate同步mysql

一、source端add extract extl,vam,begin nowADD EXTTRAIL F:\ogg\mysql\dirdat\rl, EXTRACT EXTLedit params extlextract extlsourcedb testlocalhost:3306,userid root,password xifenfeiexttrail F:\ogg\mysql\dirdat\rldynamicresolutiongettruncatestable test.t_1;add E…

mysql 将时间戳_mysql 将时间戳直接转换成日期时间

date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串后面的 %Y%m%d 主要是将返回值格式化例如:mysql>SELECT FROM_UNIXTIME( 1249488000, %Y%m%d )->20071120mysql>SELECT FROM_UNIXTIME( 1249488000, %Y年%m月%d )->2007年11月…

mysql数据库时间字段看不懂_mysql数据库时间字段看不懂

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

简单mysql优化_mysql常见语句的简单优化策略

常见sql优化方法(1)优化insert语句大批量插入数据&#xff1a;对于Myisam类型的表&#xff0c;可以通过以下方式快速的导入大量的数据。ALTER TABLE tblname DISABLE KEYS; loading the dataALTER TABLE tblname ENABLE KEYS;这两个命令用来打开或者关闭Myisam表非唯一索引的更…

mysql 字符串函数大全_mysql 字符串函数大全

返回字符串str的最左面字符的ASCII代码值。如果str是空字符串&#xff0c;返回0。如果str是NULL&#xff0c;返回NULL。mysql> select ASCII(2); -> 50mysql> select ASCII(2); -> 50mysql> select ASCII(dx); -> 100也可参见ORD()函数。ORD(str)如果字符串s…

ef mysql modelfirst_MySQL –EF edmx(Model First)– Sql Server table

一、mysql environmentWhen we create an new database,first We need draw er diagram for somebody to show your idea,but our company have no goodauthorised tool to design sqlserver ER diagram,so I use mysql graphical tool to design it, after that,you can use m…

db2 联邦 mysql_DB2联邦数据库及配置方法(及联邦密码修改)

如果您需要使用所有不同的数据库&#xff0c;包括选择、插入、更新和删除&#xff0c;就象所有的表都位于单个数据库中那样&#xff0c;那么将获得非常高的工作效率。数据库联邦就是要做到这一点&#xff1a;使所有表看起来象是在同一个数据库中那么&#xff0c;数据库联邦是怎…

apache支持mysql ubuntu_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)

UbuntuApachePHPMysql环境搭建(完整版)一、操作系统Ubuntu 14.04 64位&#xff0c;阿里云服务器二、Apache1、安装Apache&#xff0c;安装命令&#xff1a;sudo apt-get install apache22、环境配置&#xff1a;1)配置文件&#xff1a;路径为/etc/apache2&#xff0c;配置文件是…