运营 SDK 游戏更新


更新简介

全自动更新

游戏在后台提交新版游戏时自动制作差分包,更新时用户只需下载 APK 文件中新旧版本有差异的部分。更新内容和版本提交相关事宜,请联系4399相关运营对接人员。
当游戏初始化时,SDK 将检查后台是否有新版本游戏上线,如果有,则显示更新内容,并提示用户升级。全自动更新无需配置和代码接入,SDK在初始化时自动检查更新。

自定义更新流程

如果游戏需要自定义更新界面,需告知4399运营人员,由后台关闭全自动更新开关。由游戏方自主接入更新接口

1.1 检查新版本

/*
 * activity, 游戏 Activity 对象
 * UpgradeProgress<UpgradeInfo> 检查更新回调,返回检查更新的进度、结果
 */
OperateCenter.getInstance().doCheck(activity, new UpgradeProgress<UpgradeInfo>() {
    @Override
    public void onStart() {}
    
    @Override
    public void onProgress(long... ps) {}
    
    @Override
    public void onFinished(int code, String message, UpgradeInfo info) {
        // 根据 info 对象内容展示更新对话框
        // 需要区分几种情况:
        // 1 检查更新成功
        //     1.1 有新版本
        //         1.1.1 本地有下载好的文件,展示安装对话框,后续调用doInstall接口
        //         1.1.2 本地没有下载好的文件,展示下载对话框,后续调用doInstall接口
        //     1.2 无新版本,游戏方更加需要决定是否需要提升
        // 2 检查更新失败,游戏方根据需要提供重试按钮,后续调用doCheck接口
        showUpgradeInfo();
    }
 });

1.2 显示检查结果

private void showUpdateInfo(final UpgradeInfo info) {
    int code = info.code();

    if (code == UpgradeInfo.STATUS_UP_TO_DATE) {
        // 没有更新,这里可以选择不提示
    }  else if (code == UpgradeInfo.STATUS_NEED_UPGRADE) {
        // 有更新内容
        if (info.havePreparedFile()) {
            // 本地已有下载好的更新包,显示“立即安装”, 即开始安装
            // OperateCenter.getInstance().doInstall...
        } else {
            // 本地没有下载好的更新包,显示下载 UI
            if (info.isCompel()) {
                // 强制更新
            } else {
                // 非强制更新
            }
        }
    
    } else {
        // 检查更新失败,根据需要决定是否显示失败信息
    }
}

1.3 下载更新包

OperateCenter.getInstance().doDownload(info, new UpgradeProgress<Void>() {
    @Override
    public void onStart() {
        // 开始下载
    }
    
    @Override
    public void onProgress(long... ps) {
        long written = ps[0]; // 已完成下载的字节
        long total = ps[1];   // 需要下载的字节
        // 正在下载,展示进度
    }
    
    @Override
    public void onFinished(int code, String message, Void aVoid) {
        if (code == SUCCESS || code == SUCCESS_ALREADY) { // 下载成功, 可安装
            // OperateCenter.getInstance().doInstall...
        } else { // 下载失败,提醒重试
            
        }
    }

1.4 安装更新包

/*
 * 下载成功后,或者本地已有下载好的更新包时,可以调用此函数
 * SDK会根据是增量更新还是全量更新,采取不同的安装方式
 */
OperateCenter.getInstance().doInstall(info, new UpgradeProgress<Void>() {
    @Override
    public void onStart() {
        // 开始安装,SDK 可能会做一些安装准备,如合并包
    }
    
    @Override
        public void onProgress(long... ps) {
        if (ps[0] == UpgradeProgress.PROGRESS_INSTALLING) { 
            // 内部开始安装流程
        }
    }
    
    @Override
        public void onFinished(int code, String message, Void aVoid) {
        if (code != UpgradeProgress.SUCCESS) { 
            // 安装失败,可以提醒重试
        } 
        // 安装成功,应用进程将自动退出
    }
}