API参考

最近修改时间2020-09-21 02:25:81

JavaScript 常量


downloadRootDir

下载的根目录。你可以使用react-native-fs等第三方组件检查其中的内容。


packageVersion

当前应用原生包的版本。其中android取自versionName字段(位于android/app/build.gradle中)。ios取自CFBundleShortVersionString字段(位于ios/项目名/Info.plist中)。


currentVersion

当前热更新版本(jsbundle文件)的Hash号。


isFirstTime

是否更新后的首次启动。当此项为真时,你需要在合适的时候调用markSuccess()以确保更新成功。否则应用下一次启动时将会回滚。


isRolledBack

是否刚刚经历了一次回滚。

JavaScript 方法


async function checkUpdate(appKey)

检查更新,返回值有三种情形:

  1. {expired: true}:该应用原生包已过期(已从pushy服务器中删除),需要前往应用市场下载新的版本(在设置中填写downloadUrl)。

    {
        expired: true,
        downloadUrl: 'http://appstore/downloadUrl',
    }
  2. {upToDate: true}:当前已经更新到最新,无需进行更新。
  3. {update: true}:当前有新版本可以更新。info的namedescription字段可 以用于提示用户,而metaInfo字段则可以根据你的需求自定义其它属性(如是否静默更新、 是否强制更新等等)。另外还有几个字段,包含了热更新文件的下载地址,

    {
        update: true,
        name: '1.0.3-rc',
        hash: 'hash',
        description: '添加聊天功能\n修复商城页面BUG',
        metaInfo: '{"silent":true}',
        pdiffUrl: 'http://update-packages.reactnative.cn/hash',
        diffUrl: 'http://update-packages.reactnative.cn/hash',
    }

async function downloadUpdate(info, progressCallbacks)

下载更新版本。infocheckUpdate函数的返回值,并且仅当update:true时实际进行下载。

v5.8.0版本开始新增接受第二个可选参数,为下载和解压进度的回调函数(onDownloadProgressonUnzipProgress)。可根据回调参数自行设计进度的展示。示例:

const hash = await downloadUpdate(info, 
// 下载和解压回调为可选参数,自v5.8.0版本起可用
{
  onDownloadProgress: ({ received, total }) => {
    // 已下载的字节数, 总字节数
    console.log(received, total)
  },
  onUnzipProgress: ({ received, total }) => {
    // 已解压的文件数, 总文件数
    console.log(received, total)
  },
});

function switchVersion(hash)

立即重启应用,并加载已经下载完毕的版本。


function switchVersionLater(hash)

在下一次启动应用的时候加载已经下载完毕的版本。


function markSuccess()

isFirstTimetrue时,必须调用此函数作为更新成功的标记(否则下次启动会默认失败自动回滚)。


Android 方法

UpdateContext.setCustomInstanceManager(ReactInstanceManager instanceManager)

如果是集成/混编Android方案,则可以使用此方法传入你自行创建的ReactInstanceManager。自v5.5.8版本起可用。

示例:

import cn.reactnative.modules.update.UpdateContext

mReactInstanceManager = ReactInstanceManager.builder()
                // ...各种setter,但注意不要调用setBundleAssetName
                .setJSBundleFile(UpdateContext.getBundleUrl(mContext))
                .build();
UpdateContext.setCustomInstanceManager(mReactInstanceManager);

iOS 方法

待补充