进阶指南

接入 SDK 之后,您可以根据业务需求,设置升级白名单,使用 SDK 进行升级检测、并提示用户。

设置白名单

设置白名单用户 ID:

MPLogger.setUserId("您的白名单ID");

检测新版本

  • 快速检测新版本,并弹框提示:

    说明

    仅快速显示升级弹框,不包含强制升级逻辑,若您需要强制升级,请使用自定义升级来进行实现。

      MPUpgrade mMPUpgrade = new MPUpgrade();
      mMPUpgrade.fastCheckNewVersion(activity, drawable);
  • 快速检测新版本,仅返回检测结果:

      MPUpgrade mMPUpgrade = new MPUpgrade();
      // 同步方法,子线程中调用
      int result = mMPUpgrade.fastCheckHasNewVersion();
      if (result == UpgradeConstants.HAS_NEW_VERSION) {
        // 有新版本
      } else if (result == UpgradeConstants.HAS_NO_NEW_VERSION) {
        // 没有新版本
      } else if (result == UpgradeConstants.HAS_SOME_ERROR) {
        // 错误
      }

获取升级详细信息

调用 fastGetClientUpgradeRes 方法获取更多详细信息:

MPUpgrade mMPUpgrade = new MPUpgrade();
// 同步方法,子线程中调用
ClientUpgradeRes clientUpgradeRes = mMPUpgrade.fastGetClientUpgradeRes();

返回的示例显示新版本号、下载地址等信息,其中部分参数含义如下:

  • downloadURL:下载地址

  • guideMemo:升级信息

  • newestVersion:最新版本

  • resultStatus:升级模式

    • 202 为单次提醒

    • 204 为多次提醒

    • 203/206 为强制更新

  • fileSize:待下载的文件大小

其它自定义检测

更多定制,参考以下操作示例:

  • 实现 MPaaSCheckCallBack 接口,用于响应升级 SDK 发出的请求,如弹出提示框:

      MPUpgrade mMPUpgrade = new MPUpgrade();
      mMPUpgrade.setUpgradeCallback(new MPaaSCheckVersionService.MPaaSCheckCallBack() {
           .........
      });
  • 调用 MPUpgrade.checkNewVersion 方法检测升级信息。

    MPUpgrade 内部封装了 MPaaSCheckVersionService 的调用;您也可以定制实现。有关 MPaaSCheckVersionServiceMPaaSCheckCallBack 的介绍,请参见 API 说明

自定义安装包下载目录(10.1.60 及以上版本支持)

配置如下:

File dir = getApplicationContext().getExternalFilesDir("自定义目录");
MPUpgrade mpUpgrade = new MPUpgrade();
mpUpgrade.setDownloadPath(dir.getAbsolutePath());

同时在 file_path.xml 中添加以下配置:

// external-files-path 对应 getExternalFilesDir 的目录
// 请使用与您自定义的目录对应的元素,如果您不清楚该如何选择,请搜索“适配 File Provider”
<external-files-path
  name="download"
  path="自定义目录" />

处理强制升级解析包失败的问题

部分 rom 在强制升级后,会出现解析包失败问题。发生该问题的原因是,在部分 rom 中,安装包时会访问相应的 App 进程。而强制升级会强制结束 App 进程,所以导致解析包失败。虽然这种 rom 定制行为本身是不符合原生 Android 的行为,但您仍可以通过以下方式进行解决:设置 UpgradeForceExitCallback,在 needForceExit 返回 false 即可。

  1. 实现回调。

     public class UpgradeForceExitCallbackImpl implements UpgradeForceExitCallback {
         @Override
         public boolean needForceExit(boolean forceExitApp, MicroApplicationContext context) {
             // 返回 false,就不强制杀掉进程,不会有安装包解析失败问题;返回 true,需要对进程的退出进行处理,会走到下面 doForceExit 方法中。
             return false;
         }
         @Override
         public void doForceExit(boolean forceExitApp, MicroApplicationContext context) {
             // 如果需要关闭进程,则需要上面 needForceExit 返回 true,然后在本方法内关闭进程。
         }
     }
  2. 设置回调。

     MPUpgrade mpUpgrade = new MPUpgrade();
     mpUpgrade.setForceExitCallback(new UpgradeForceExitCallbackImpl());
    重要
    • 使用同一 MPUpgrade 实例设置回调或请求升级。

    • 设置回调后可以避免解析包失败问题,但升级组件将不再自动帮您杀进程。因此当用户没有点击 安装 而是返回到应用的时候,请您设置不可取消的弹框遮盖层,以防止用户绕过强制升级。