首页指南参考教程

Expo 更新 iconExpo 更新

GitHub

npm

允许以编程方式控制和响应应用可用的新更新的库。

Android
iOS
tvOS

expo-updates 库允许你以编程方式控制和响应应用可用的新更新。

¥The expo-updates library allows you to programmatically control and respond to new updates made available to your app.

安装

¥Installation

Terminal
npx expo install expo-updates

如果你将其安装在 裸 React Native 应用 中,你还应该遵循这些 附加安装说明

¥If you're installing this in a bare React Native app, you should also follow these additional installation instructions.

Are you using this library in a bare React Native app?

了解如何在 expo-updates 存储库中的安装说明 文件中配置原生项目。

¥Learn how to configure the native projects in the installation instructions in the expo-updates repository.

用法

¥Usage

该模块中的大部分方法和常量只能在发布模式下使用或测试。在调试版本中,默认行为是始终从开发服务器加载最新的 JavaScript。构建应用的调试版本,其更新行为与发布版本相同 是可能的。这样的应用不会从你的开发服务器打开最新的 JavaScript - 它会像发布版本一样加载已发布的更新。当应用未连接到开发服务器时,这对于调试应用的行为可能很有用。

¥Most of the methods and constants in this module can only be used or tested in release mode. In debug builds, the default behavior is to always load the latest JavaScript from a development server. It is possible to build a debug version of your app with the same updates behavior as a release build. Such an app will not open the latest JavaScript from your development server — it will load published updates just as a release build does. This may be useful for debugging the behavior of your app when it is not connected to a development server.

要在 Expo Go 应用中测试手动更新,请运行 eas update,然后使用 Expo Go 打开应用的已发布版本。

¥To test manual updates in the Expo Go app, run eas update and then open the published version of your app with Expo Go.

要使用独立应用测试手动更新,你可以创建 .apk模拟器构建,或者使用 npx expo run:android --variant releasenpx expo run:ios --configuration Release 在本地进行发布构建(你不需要将此构建提交到商店进行测试)。

¥To test manual updates with standalone apps, you can create a .apk or a simulator build, or make a release build locally with npx expo run:android --variant release and npx expo run:ios --configuration Release (you don't need to submit this build to the store to test).

手动检查更新

¥Check for updates manually

一旦应用已经运行,expo-updates 库就会导出各种函数来与更新交互。在某些情况下,你可能想要检查更新是否可用。这可以通过使用 checkForUpdateAsync() 手动完成,如下例所示:

¥The expo-updates library exports a variety of functions to interact with updates once the app is already running. In some scenarios, you may want to check if updates are available or not. This can be done manually by using checkForUpdateAsync() as shown in the example below:

App.js
import { View, Button } from 'react-native';
import * as Updates from 'expo-updates';

function App() {
  async function onFetchUpdateAsync() {
    try {
      const update = await Updates.checkForUpdateAsync();

      if (update.isAvailable) {
        await Updates.fetchUpdateAsync();
        await Updates.reloadAsync();
      }
    } catch (error) {
      // You can also add an alert() to see the error message in case of an error when fetching updates.
      alert(`Error fetching latest Expo update: ${error}`);
    }
  }

  return (
    <View>
      <Button title="Fetch update" onPress={onFetchUpdateAsync} />
    </View>
  );
}

expo-updates 与自定义服务器结合使用

¥Use expo-updates with a custom server

每个自定义更新服务器都必须实现 Expo 更新协议

¥Every custom updates server must implement the Expo Updates protocol.

定制 Expo 更新服务器

你可以在此 GitHub 存储库中找到自定义服务器和使用该服务器的应用的示例实现。

配置选项

¥Configuration options

有一些构建时配置选项可以控制 expo-updates 的行为。

¥There are build-time configuration options that control the behavior of expo-updates.

在 Android 上,这些选项设置为 meta-data 标记,与安装期间在 AndroidManifest.xml 文件中添加的标记相邻。你还可以在运行时通过传递 Map 作为 UpdatesController.overrideConfiguration() 的第二个参数来定义这些选项,并且提供的值将覆盖 AndroidManifest.xml 中指定的任何值。

¥On Android, these options are set as meta-data tags adjacent to the tags added during installation in the AndroidManifest.xml file. You can also define these options at runtime by passing a Map as the second parameter of UpdatesController.overrideConfiguration(), and the provided values will override any value specified in AndroidManifest.xml.

在 iOS 上,这些属性在 Expo.plist 文件中设置为键。你还可以在运行时通过在初始化 expo-updates 之前的任何时候调用 [EXUpdatesAppController overrideConfigurationWithConfiguration:] 来设置它们,并且此字典中的值将覆盖 Expo.plist 中指定的任何值。如果你尝试使用 AppDelegate.mm 中的 EXUpdatesAppController,则需要添加以下导入:

¥On iOS, these properties are set as keys in the Expo.plist file. You can also set them at runtime by calling [EXUpdatesAppController overrideConfigurationWithConfiguration:] at any point before expo-updates is initialized, and the values in this dictionary will override any values specified in Expo.plist. If you tried to use the EXUpdatesAppController from the AppDelegate.mm, you will need to add the following imports:

From Objective-C to import Swift headers for expo-updates
#import "ExpoModulesCore-Swift.h"
#import "EXUpdatesInterface-Swift.h"
#import "EXUpdates-Swift.h"
iOS plist/字典键Android 地图键Android 元数据名称默认必需的?
EXUpdatesEnabledenabledexpo.modules.updates.ENABLEDtrue
EXUpdatesURLupdateUrlexpo.modules.updates.EXPO_UPDATE_URL(没有任何)
EXUpdatesRequestHeadersrequestHeadersexpo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY(没有任何)
EXUpdatesRuntimeVersionruntimeVersionexpo.modules.updates.EXPO_RUNTIME_VERSION(没有任何)
EXUpdatesCheckOnLaunchcheckOnLaunchexpo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCHALWAYSALWAYSNEVERWIFI_ONLYERROR_RECOVERY_ONLY
EXUpdatesLaunchWaitMslaunchWaitMsexpo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS0
EXUpdatesCodeSigningCertificatecodeSigningCertificateexpo.modules.updates.CODE_SIGNING_CERTIFICATE(没有任何)
EXUpdatesCodeSigningMetadatacodeSigningMetadataexpo.modules.updates.CODE_SIGNING_METADATA(没有任何)
EXUpdatesCodeSigningIncludeManifestResponseCertificateChaincodeSigningIncludeManifestResponseCertificateChainexpo.modules.updates.CODE_SIGNING_INCLUDE_MANIFEST_RESPONSE_CERTIFICATE_CHAINfalse
EXUpdatesConfigCodeSigningAllowUnsignedManifestscodeSigningAllowUnsignedManifestsexpo.modules.updates.CODE_SIGNING_ALLOW_UNSIGNED_MANIFESTSfalse

有关详细说明,请参阅 expo-updates 存储库。

¥For a detailed explanation, see the expo-updates repository.

API

import * as Updates from 'expo-updates';

Constants

Updates.channel

Type: string | null


The channel name of the current build, if configured for use with EAS Update. null otherwise.

Expo Go and development builds are not set to a specific channel and can run any updates compatible with their native runtime. Therefore, this value will always be null when running an update on Expo Go or a development build.

Updates.checkAutomatically

Type: UpdatesCheckAutomaticallyValue | null


Determines if and when expo-updates checks for and downloads updates automatically on startup.

Updates.createdAt

Type: Date | null


If expo-updates is enabled, this is a Date object representing the creation time of the update that's currently running (whether it was embedded or downloaded at runtime).

In development mode, or any other environment in which expo-updates is disabled, this value is null.

Updates.emergencyLaunchReason

Type: null | string


If isEmergencyLaunch is set to true, this will contain a string error message describing what failed during initialization.

Updates.isEmbeddedLaunch

Type: boolean


This will be true if the currently running update is the one embedded in the build, and not one downloaded from the updates server.

Updates.isEmergencyLaunch

Type: boolean


expo-updates does its very best to always launch monotonically newer versions of your app so you don't need to worry about backwards compatibility when you put out an update. In very rare cases, it's possible that expo-updates may need to fall back to the update that's embedded in the app binary, even after newer updates have been downloaded and run (an "emergency launch"). This boolean will be true if the app is launching under this fallback mechanism and false otherwise. If you are concerned about backwards compatibility of future updates to your app, you can use this constant to provide special behavior for this rare case.

Updates.isEnabled

Type: boolean


Whether expo-updates is enabled. This may be false in a variety of cases including:

  • enabled set to false in configuration
  • missing or invalid URL in configuration
  • missing runtime version or SDK version in configuration
  • error accessing storage on device during initialization

When false, the embedded update is loaded.

Updates.manifest

Type: Partial<Manifest>


If expo-updates is enabled, this is the manifest (or classic manifest) object for the update that's currently running.

In development mode, or any other environment in which expo-updates is disabled, this object is empty.

Updates.runtimeVersion

Type: string | null


The runtime version of the current build.

Updates.updateId

Type: string | null


The UUID that uniquely identifies the currently running update. The UUID is represented in its canonical string form and will always use lowercase letters. This value is null when running in a local development environment or any other environment where expo-updates is disabled.

Example

"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Hooks

useUpdates()

Hook that obtains information on available updates and on the currently running update.

Example

import { StatusBar } from 'expo-status-bar';
import * as Updates from 'expo-updates';
import { useEffect } from 'react';
import { Button, Text, View } from 'react-native';

export default function UpdatesDemo() {
  const {
    currentlyRunning,
    isUpdateAvailable,
    isUpdatePending
  } = Updates.useUpdates();

  useEffect(() => {
    if (isUpdatePending) {
      // Update has successfully downloaded; apply it now
      Updates.reloadAsync();
    }
  }, [isUpdatePending]);

  // If true, we show the button to download and run the update
  const showDownloadButton = isUpdateAvailable;

  // Show whether or not we are running embedded code or an update
  const runTypeMessage = currentlyRunning.isEmbeddedLaunch
    ? 'This app is running from built-in code'
    : 'This app is running an update';

  return (
    <View style={styles.container}>
      <Text style={styles.headerText}>Updates Demo</Text>
      <Text>{runTypeMessage}</Text>
      <Button onPress={() => Updates.checkForUpdateAsync()} title="Check manually for updates" />
      {showDownloadButton ? (
        <Button onPress={() => Updates.fetchUpdateAsync()} title="Download and run update" />
      ) : null}
      <StatusBar style="auto" />
    </View>
  );
}

Returns

  • UseUpdatesReturnType

the structures with information on currently running and available updates.

Methods

Updates.checkForUpdateAsync()

Checks the server to see if a newly deployed update to your project is available. Does not actually download the update. This method cannot be used in development mode, and the returned promise will be rejected if you try to do so.

Checking for an update uses a device's bandwidth and battery life like any network call. Additionally, updates served by Expo may be rate limited. A good rule of thumb to check for updates judiciously is to check when the user launches or foregrounds the app. Avoid polling for updates in a frequent loop.

Returns

  • Promise<UpdateCheckResult>

A promise that fulfills with an UpdateCheckResult object.

The promise rejects in Expo Go or if the app is in development mode, or if there is an unexpected error or timeout communicating with the server. It also rejects when expo-updates is not enabled.

Updates.clearLogEntriesAsync()

Clears existing expo-updates log entries.

For now, this operation does nothing on the client. Once log persistence has been implemented, this operation will actually remove existing logs.

Returns

  • Promise<void>

A promise that fulfills if the clear operation was successful.

The promise rejects if there is an unexpected error in clearing the logs.

Updates.fetchUpdateAsync()

Downloads the most recently deployed update to your project from server to the device's local storage. This method cannot be used in development mode, and the returned promise will be rejected if you try to do so.

Note: reloadAsync() can be called after promise resolution to reload the app using the most recently downloaded version. Otherwise, the update will be applied on the next app cold start.

Returns

  • Promise<UpdateFetchResult>

A promise that fulfills with an UpdateFetchResult object.

The promise rejects in Expo Go or if the app is in development mode, or if there is an unexpected error or timeout communicating with the server. It also rejects when expo-updates is not enabled.

Updates.getExtraParamsAsync()

Retrieves the current extra params.

This method cannot be used in Expo Go or development mode. It also rejects when expo-updates is not enabled.

Returns

  • Promise<Record<string, string>>

Updates.readLogEntriesAsync(maxAge)

NameTypeDescription
maxAge
(optional)
number

Sets the max age of retrieved log entries in milliseconds. Default to 3600000 ms (1 hour).

Default: 3600000

Retrieves the most recent expo-updates log entries.

Returns

  • Promise<UpdatesLogEntry[]>

A promise that fulfills with an array of UpdatesLogEntry objects;

The promise rejects if there is an unexpected error in retrieving the logs.

Updates.reloadAsync()

Instructs the app to reload using the most recently downloaded version. This is useful for triggering a newly downloaded update to launch without the user needing to manually restart the app.

It is not recommended to place any meaningful logic after a call to await Updates.reloadAsync(). This is because the promise is resolved after verifying that the app can be reloaded, and immediately before posting an asynchronous task to the main thread to actually reload the app. It is unsafe to make any assumptions about whether any more JS code will be executed after the Updates.reloadAsync method call resolves, since that depends on the OS and the state of the native module and main threads.

This method cannot be used in Expo Go or development mode, and the returned promise will be rejected if you try to do so. It also rejects when expo-updates is not enabled.

Returns

  • Promise<void>

A promise that fulfills right before the reload instruction is sent to the JS runtime, or rejects if it cannot find a reference to the JS runtime. If the promise is rejected in production mode, it most likely means you have installed the module incorrectly. Double check you've followed the installation instructions. In particular, on iOS ensure that you set the bridge property on EXUpdatesAppController with a pointer to the RCTBridge you want to reload, and on Android ensure you either call UpdatesController.initialize with the instance of ReactApplication you want to reload, or call UpdatesController.setReactNativeHost with the proper instance of ReactNativeHost.

Updates.setExtraParamAsync(key, value)

NameTypeDescription
keystring-
valueundefined | null | string-

Sets an extra param if value is non-null, otherwise unsets the param. Extra params are sent as an Expo Structured Field Value Dictionary in the Expo-Extra-Params header of update requests. A compliant update server may use these params when selecting an update to serve.

This method cannot be used in Expo Go or development mode. It also rejects when expo-updates is not enabled.

Returns

  • Promise<void>

Interfaces

ExpoUpdatesModule

Extends: Pick<ProxyNativeModule, 'addListener' | 'removeListeners'>

ExpoUpdatesModule Properties

NameTypeDescription
channelstring

Can be empty string

checkAutomaticallystring-
checkForUpdateAsync() => Promise<UpdateCheckResultRollBack | UpdateCheckResultNotAvailable | Omit<UpdateCheckResultAvailable, "manifest"> & ({ manifestString: string; } | { manifest: Manifest; })>-
clearLogEntriesAsync() => Promise<void>-
commitTime
(optional)
string-
emergencyLaunchReasonnull | string-
fetchUpdateAsync() => Promise<UpdateFetchResultFailure | UpdateFetchResultRollBackToEmbedded | Omit<UpdateFetchResultSuccess, "manifest"> & ({ manifestString: string; } | { manifest: Manifest; })>-
getExtraParamsAsync() => Promise<Record<string, string>>-
isEmbeddedLaunchboolean-
isEmergencyLaunchboolean-
isEnabledboolean-
isUsingEmbeddedAssets
(optional)
boolean-
localAssets
(optional)
Record<string, string>-
manifest
(optional)
Manifest-
manifestString
(optional)
string-
readLogEntriesAsync(maxAge: number) => Promise<UpdatesLogEntry[]>-
reload() => Promise<void>-
runtimeVersionstring

Can be empty string

setExtraParamAsync(key: string, value: null | string) => Promise<void>-
shouldDeferToNativeForAPIMethodAvailabilityInDevelopmentboolean-
updateId
(optional)
string-

Types

CurrentlyRunningInfo

Structure encapsulating information on the currently running app (either the embedded bundle or a downloaded update).

NameTypeDescription
channel
(optional)
string

The channel name of the current build, if configured for use with EAS Update, undefined otherwise.

createdAt
(optional)
Date

If expo-updates is enabled, this is a Date object representing the creation time of the update that's currently running (whether it was embedded or downloaded at runtime).

In development mode, or any other environment in which expo-updates is disabled, this value is undefined.

emergencyLaunchReasonstring | null

If isEmergencyLaunch is set to true, this will contain a string error message describing what failed during initialization.

isEmbeddedLaunchboolean

This will be true if the currently running update is the one embedded in the build, and not one downloaded from the updates server.

isEmergencyLaunchboolean

expo-updates does its very best to always launch monotonically newer versions of your app so you don't need to worry about backwards compatibility when you put out an update. In very rare cases, it's possible that expo-updates may need to fall back to the update that's embedded in the app binary, even after newer updates have been downloaded and run (an "emergency launch"). This boolean will be true if the app is launching under this fallback mechanism and false otherwise. If you are concerned about backwards compatibility of future updates to your app, you can use this constant to provide special behavior for this rare case.

manifest
(optional)
Partial<Manifest>

If expo-updates is enabled, this is the manifest object for the update that's currently running.

In development mode, or any other environment in which expo-updates is disabled, this object is empty.

runtimeVersion
(optional)
string

The runtime version of the current build.

updateId
(optional)
string

The UUID that uniquely identifies the currently running update if expo-updates is enabled. The UUID is represented in its canonical string form and will always use lowercase letters. In development mode, or any other environment in which expo-updates is disabled, this value is undefined.

Example

"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Manifest

Literal Type: multiple types

Acceptable values are: ExpoUpdatesManifest | EmbeddedManifest

UpdateCheckResult

Literal Type: multiple types

The result of checking for a new update.

Acceptable values are: UpdateCheckResultRollBack | UpdateCheckResultAvailable | UpdateCheckResultNotAvailable

UpdateCheckResultAvailable

The update check result when a new update is found on the server.

NameTypeDescription
isAvailabletrue

Whether an update is available. This property is false for a roll back update.

isRollBackToEmbeddedfalse

Whether a roll back to embedded update is available.

manifestManifest

The manifest of the update when available.

reasonundefined

If no new update is found, this contains one of several enum values indicating the reason.

Deprecated

UpdateCheckResultFailure

Type: UpdateCheckResultNotAvailable

UpdateCheckResultNotAvailable

The update check result if no new update was found.

NameTypeDescription
isAvailablefalse

Whether an update is available. This property is false for a roll back update.

isRollBackToEmbeddedfalse

Whether a roll back to embedded update is available.

manifestundefined

The manifest of the update when available.

reasonUpdateCheckResultNotAvailableReason

If no new update is found, this contains one of several enum values indicating the reason.

UpdateCheckResultRollBack

The update check result when a rollback directive is received.

NameTypeDescription
isAvailablefalse

Whether an update is available. This property is false for a roll back update.

isRollBackToEmbeddedtrue

Whether a roll back to embedded update is available.

manifestundefined

The manifest of the update when available.

reasonundefined

If no new update is found, this contains one of several enum values indicating the reason.

Deprecated

UpdateCheckResultSuccess

Type: UpdateCheckResultAvailable

UpdateFetchResult

Literal Type: multiple types

The result of fetching a new update.

Acceptable values are: UpdateFetchResultSuccess | UpdateFetchResultFailure | UpdateFetchResultRollBackToEmbedded

UpdateFetchResultFailure

The failed result of fetching a new update.

NameTypeDescription
isNewfalse

Whether the fetched update is new (that is, a different version than what's currently running). Always false when isRollBackToEmbedded is true.

isRollBackToEmbeddedfalse

Whether the fetched update is a roll back to the embedded update.

manifestundefined

The manifest of the fetched update.

UpdateFetchResultRollBackToEmbedded

The roll back to embedded result of fetching a new update.

NameTypeDescription
isNewfalse

Whether the fetched update is new (that is, a different version than what's currently running). Always false when isRollBackToEmbedded is true.

isRollBackToEmbeddedtrue

Whether the fetched update is a roll back to the embedded update.

manifestundefined

The manifest of the fetched update.

UpdateFetchResultSuccess

The successful result of fetching a new update.

NameTypeDescription
isNewtrue

Whether the fetched update is new (that is, a different version than what's currently running). Always true when isRollBackToEmbedded is false.

isRollBackToEmbeddedfalse

Whether the fetched update is a roll back to the embedded update.

manifestManifest

The manifest of the fetched update.

UpdateInfo

Literal Type: multiple types

Combined structure representing any type of update.

Acceptable values are: UpdateInfoNew | UpdateInfoRollback

UpdateInfoNew

Structure representing a new update.

NameTypeDescription
createdAtDate

For all types of updates, this is a Date object representing the creation time or commit time of the update.

manifestManifest

For updates of type UpdateInfoType.NEW, this is the manifest for the update.

typeUpdateInfoType.NEW

The type of update.

updateIdstring

For updates of type UpdateInfoType.NEW, this is a string that uniquely identifies the update. For the manifests used in the current Expo Updates protocol (including EAS Update), this represents the update's UUID in its canonical string form and will always use lowercase letters.

Example

"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

UpdateInfoRollback

Structure representing a rollback directive.

NameTypeDescription
createdAtDate

For all types of updates, this is a Date object representing the creation time or commit time of the update.

manifestundefined

For updates of type UpdateInfoType.ROLLBACK, this is always set to undefined.

typeUpdateInfoType.ROLLBACK

The type of update.

updateIdundefined

For updates of type UpdateInfoType.ROLLBACK, this is always set to undefined.

UpdatesLogEntry

An object representing a single log entry from expo-updates logging on the client.

NameTypeDescription
assetId
(optional)
string

If present, the unique ID or hash of an asset associated with this log entry.

codeUpdatesLogEntryCode

One of the defined code values for expo-updates log entries.

levelUpdatesLogEntryLevel

One of the defined log level or severity values.

messagestring

The log entry message.

stacktrace
(optional)
string[]

If present, an Android or iOS native stack trace associated with this log entry.

timestampnumber

The time the log was written, in milliseconds since Jan 1 1970 UTC.

updateId
(optional)
string

If present, the unique ID of an update associated with this log entry.

UseUpdatesReturnType

The structures and methods returned by useUpdates().

NameTypeDescription
availableUpdate
(optional)
UpdateInfo

If a new available update has been found, either by using checkForUpdateAsync(), or by the UpdateEvent listener in useUpdates(), this will contain the information for that update.

checkError
(optional)
Error

If an error is returned from either the startup check for updates, or a call to checkForUpdateAsync(), the error description will appear here.

currentlyRunningCurrentlyRunningInfo

Information on the currently running app.

downloadError
(optional)
Error

If an error is returned from either a startup update download, or a call to fetchUpdateAsync(), the error description will appear here.

downloadedUpdate
(optional)
UpdateInfo

If an available update has been downloaded, this will contain the information for that update.

initializationError
(optional)
Error

If an error occurs during initialization of useUpdates(), the error description will appear here.

isCheckingboolean

True if the app is currently checking for a new available update from the server.

isDownloadingboolean

True if the app is currently downloading an update from the server.

isUpdateAvailableboolean

True if a new available update has been found, false otherwise.

isUpdatePendingboolean

True if a new available update is available and has been downloaded.

lastCheckForUpdateTimeSinceRestart
(optional)
Date

A Date object representing the last time this client checked for an available update, or undefined if no check has yet occurred since the app started. Does not persist across app reloads or restarts.

Enums

UpdateCheckResultNotAvailableReason

UpdateCheckResultNotAvailableReason Values

NO_UPDATE_AVAILABLE_ON_SERVER

UpdateCheckResultNotAvailableReason.NO_UPDATE_AVAILABLE_ON_SERVER = "noUpdateAvailableOnServer"

No update manifest or rollback directive received from the update server.

ROLLBACK_NO_EMBEDDED

UpdateCheckResultNotAvailableReason.ROLLBACK_NO_EMBEDDED = "rollbackNoEmbeddedConfiguration"

A rollback directive was received from the update server, but this app has no embedded update.

ROLLBACK_REJECTED_BY_SELECTION_POLICY

UpdateCheckResultNotAvailableReason.ROLLBACK_REJECTED_BY_SELECTION_POLICY = "rollbackRejectedBySelectionPolicy"

A rollback directive was received from the update server, but the directive does not pass the configured selection policy.

UPDATE_PREVIOUSLY_FAILED

UpdateCheckResultNotAvailableReason.UPDATE_PREVIOUSLY_FAILED = "updatePreviouslyFailed"

An update manifest was received from the update server, but the update has been previously launched on this device and never successfully launched.

UPDATE_REJECTED_BY_SELECTION_POLICY

UpdateCheckResultNotAvailableReason.UPDATE_REJECTED_BY_SELECTION_POLICY = "updateRejectedBySelectionPolicy"

An update manifest was received from the update server, but the update is not launchable, or does not pass the configured selection policy.

UpdateInfoType

The different possible types of updates. Currently, the only supported type is UpdateInfoType.NEW, indicating a new update that can be downloaded and launched on the device. In the future, other types of updates may be added to this list.

UpdateInfoType Values

NEW

UpdateInfoType.NEW = "new"

This is the type for new updates found on or downloaded from the update server, that are launchable on the device.

ROLLBACK

UpdateInfoType.ROLLBACK = "rollback"

This type is used when an update is a directive to roll back to the embedded bundle.

UpdatesCheckAutomaticallyValue

The possible settings that determine if expo-updates will check for updates on app startup. By default, Expo will check for updates every time the app is loaded. Set this to ON_ERROR_RECOVERY to disable automatic checking unless recovering from an error. Set this to NEVER to completely disable automatic checking.

UpdatesCheckAutomaticallyValue Values

NEVER

UpdatesCheckAutomaticallyValue.NEVER = "NEVER"

Automatic update checks are off, and update checks must be done through the JS API.

ON_ERROR_RECOVERY

UpdatesCheckAutomaticallyValue.ON_ERROR_RECOVERY = "ON_ERROR_RECOVERY"

Only checks for updates when the app starts up after an error recovery.

ON_LOAD

UpdatesCheckAutomaticallyValue.ON_LOAD = "ON_LOAD"

Checks for updates whenever the app is loaded. This is the default setting.

WIFI_ONLY

UpdatesCheckAutomaticallyValue.WIFI_ONLY = "WIFI_ONLY"

Only checks for updates when the app starts and has a Wi-Fi connection.

UpdatesLogEntryCode

The possible code values for expo-updates log entries

UpdatesLogEntryCode Values

ASSETS_FAILED_TO_LOAD

UpdatesLogEntryCode.ASSETS_FAILED_TO_LOAD = "AssetsFailedToLoad"

INITIALIZATION_ERROR

UpdatesLogEntryCode.INITIALIZATION_ERROR = "InitializationError"

JS_RUNTIME_ERROR

UpdatesLogEntryCode.JS_RUNTIME_ERROR = "JSRuntimeError"

NONE

UpdatesLogEntryCode.NONE = "None"

NO_UPDATES_AVAILABLE

UpdatesLogEntryCode.NO_UPDATES_AVAILABLE = "NoUpdatesAvailable"

UNKNOWN

UpdatesLogEntryCode.UNKNOWN = "Unknown"

UPDATE_ASSETS_NOT_AVAILABLE

UpdatesLogEntryCode.UPDATE_ASSETS_NOT_AVAILABLE = "UpdateAssetsNotAvailable"

UPDATE_CODE_SIGNING_ERROR

UpdatesLogEntryCode.UPDATE_CODE_SIGNING_ERROR = "UpdateCodeSigningError"

UPDATE_FAILED_TO_LOAD

UpdatesLogEntryCode.UPDATE_FAILED_TO_LOAD = "UpdateFailedToLoad"

UPDATE_HAS_INVALID_SIGNATURE

UpdatesLogEntryCode.UPDATE_HAS_INVALID_SIGNATURE = "UpdateHasInvalidSignature"

UPDATE_SERVER_UNREACHABLE

UpdatesLogEntryCode.UPDATE_SERVER_UNREACHABLE = "UpdateServerUnreachable"

UpdatesLogEntryLevel

The possible log levels for expo-updates log entries

UpdatesLogEntryLevel Values

DEBUG

UpdatesLogEntryLevel.DEBUG = "debug"

ERROR

UpdatesLogEntryLevel.ERROR = "error"

FATAL

UpdatesLogEntryLevel.FATAL = "fatal"

INFO

UpdatesLogEntryLevel.INFO = "info"

TRACE

UpdatesLogEntryLevel.TRACE = "trace"

WARN

UpdatesLogEntryLevel.WARN = "warn"

错误代码

¥Error codes

代码描述
ERR_UPDATES_DISABLED当禁用更新模块或应用在开发模式下运行时尝试调用方法
ERR_UPDATES_RELOAD尝试重新加载应用时发生错误,无法重新加载。对于裸工作流应用,请仔细检查此模块的设置步骤,以确保其已正确安装并调用正确的原生初始化方法。
ERR_UPDATES_CHECK尝试检查新更新时发生意外错误。检查错误消息以获取更多信息。
ERR_UPDATES_FETCH尝试获取新更新时发生意外错误。检查错误消息以获取更多信息。
ERR_UPDATES_READ_LOGS尝试读取日志条目时发生意外错误。检查错误消息以获取更多信息。
Expo 中文网 - 粤ICP备13048890号