响应 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...相关推荐

  1. 微软android studio,Android 入门 - Visual Studio App Center | Microsoft Docs

    Android 入门 02/26/2021 本文内容 App Center SDK 使用模块化体系结构,因此可以使用任何或所有服务. 可以在 SDK.App Center 和常见问题解答App Cen ...

  2. 微软云服务器流量,使用 Visual Studio Mobile Center 进行真实用户度量 - Azure 流量管理器 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 如何使用 Visual ...

  3. 微软azure服务器配置,配置持续部署 - Azure App Service | Microsoft Docs

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 持续部署到 Azure ...

  4. 微软服务器安装显卡驱动,适用于 Windows 的 Azure N 系列 NVIDIA GPU 驱动程序安装 - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 在运行 Windows ...

  5. 文件共享服务器onedrive,访问共享文件和文件夹 - OneDrive API - OneDrive dev center | Microsoft Docs...

    使用远程项目访问共享文件和文件夹 09/10/2017 本文内容 OneDrive 支持将共享文件夹添加到驱动器中,以便可以更轻松地从共享文件夹访问内容. 将共享文件夹添加到 OneDrive 后,此 ...

  6. wsus服务器推送指定的补丁,WSUS SelfUpdate 不发送自动更新 - Windows Server | Microsoft Docs...

    WSUS SelfUpdate 服务不发送自动更新 10/20/2020 本文内容 本文提供了一种解决方案,可解决在使用 Microsoft Windows Server Update Service ...

  7. .net ajax 服务器,以服务器端为中心的 ASP.NET AJAX 模式(2)-陈广琛 | Microsoft Docs

    以服务器端为中心的 ASP.NET AJAX 模式 (Part 2 - Control) 01/05/2009 本文内容 作者:陈广琛 在上一篇文章当中,也就是<以服务器端为中心的 ASP.NE ...

  8. 配置VSS2005(在局域网内搭建服务器)

    以下内容大部分为转载,小部分本人修改过 本次配置VSS2005运行环境:Windows XP/DotNet2.0 注:VSS要求iis 支持 asp.net 2.0, 因为VSS2005的运行库是2. ...

  9. 用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

    原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...

最新文章

  1. 某程序员感叹:本是家族边缘人,但亲戚得知自己年入二百万后,都上来巴结!...
  2. BZOJ 1631: [Usaco2007 Feb]Cow Party【最短路】
  3. 文明使用计算机 教案,四年级信息技术下册 文明在我身边教案 华中师大版
  4. windows安装anaconda_[计算机科学工具系列] Anaconda和conda
  5. python消费datahub_DataHub使用指南-阿里云开发者社区
  6. HDU 4339 Query
  7. Sourcing Cockpit: 2. Demo of Service Purchase Order
  8. Apollo进阶课程㉟丨Apollo ROS原理—4
  9. 评测征集 | 2021全国知识图谱与语义计算大会
  10. 2.1基本算法之枚举_1749数字方格
  11. 乐鑫ESP32开发 1.Vscode创建新工程,编译,下载烧录,监视端口,点亮一个LED
  12. 书单丨上过太空的JavaScript用着就是香!
  13. 达梦数据库修改字段长度_达梦数据库,国产数据库替代的希望之星
  14. 富士通MB95F636H输出PWM
  15. 0-博客笔记导读目录(全部)-20220506backup
  16. 菜鸟学JAVA之——多线程
  17. Bootstrap3部分理解
  18. kvm 4.磁盘格式简介及使用磁盘格式转换的方式拍摄快照
  19. 【​观察】六脉神剑第四式-全面保障之移形换影
  20. 解决远程windows server12桌面复制文件大于2G出错问题

热门文章

  1. MySQL replace into (insert into 的增强版)
  2. Linux利用PROMPT_COMMAND实现审计功能
  3. 转发程序无法决定链接类型
  4. 详解:JVM内存调优参数
  5. window安装gcc编译器
  6. ios 筛选_万千网友让quot;低调使用quot;的软件!居然还支持iOS
  7. centos mysql 设置_CentOS下MySQL安装后配置和设置-阿里云开发者社区
  8. mysql 主主结构_高性能mysql主主架构
  9. spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!
  10. ruby打印_Ruby程序打印一个数字的乘法表