检查更新SDK 常见问题FAQ

 

FAQ目录:

如何测试集成是否成功?

我们在小米开发者中心提供了测试沙盒,当您集成完毕之后,可以在沙盒中上传您的包进行测试,在沙盒中上传并不会发布出去,您可以放心测试

沙盒位置:登录小米开发者中心 – 选择您的应用 – 点击『检查更新SDK』 – 您可以看到沙盒测试按钮

如何设置仅在WiFi下检查更新?

默认是在有网络条件下即检查,可设置为只在WiFi情况下检查更新:

XiaomiUpdateAgent.setCheckUpdateOnlyWifi(true);
XiaomiUpdateAgent.update(this);

API:

- public void setCheckUpdateOnlyWifi(boolean isOnlyWiFi)
    isOnlyWiFi 布尔值 false(默认) 在有网络情况下就检查更新,true,只在WiFi下检查更新

我希望自己设计提醒样式,如何手动处理回调?

如果想自己处理更新可以按如下步骤,设置updateAutoPopup=false,SDK将停止弹框,实现更新监听接口,处理更新事件:

XiaomiUpdateAgent.setUpdateAutoPopup(false);
XiaomiUpdateAgent.setUpdateListener(new XiaomiUpdateListener() {

    @Override
    public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) {
        switch (updateStatus) {
            case UpdateStatus.STATUS_UPDATE:
                 // 有更新, UpdateResponse为本次更新的详细信息
                 // 其中包含更新信息,下载地址,MD5校验信息等,可自行处理下载安装
                 // 如果希望 SDK继续接管下载安装事宜,可调用
                 //  XiaomiUpdateAgent.arrange()
                 break;
             case UpdateStatus.STATUS_NO_UPDATE:
                // 无更新, UpdateResponse为null
                break;
            case UpdateStatus.STATUS_NO_WIFI:
                // 设置了只在WiFi下更新,且WiFi不可用时, UpdateResponse为null
                break;
            case UpdateStatus.STATUS_NO_NET:
                // 没有网络, UpdateResponse为null
                break;
            case UpdateStatus.STATUS_FAILED:
                // 检查更新与服务器通讯失败,可稍后再试, UpdateResponse为null
                break;
            case UpdateStatus.STATUS_LOCAL_APP_FAILED:
                // 检查更新获取本地安装应用信息失败, UpdateResponse为null
                break;
            default:
                break;
        }
    }
});
XiaomiUpdateAgent.update(this);

API:

- public void setUpdateAutoPopup(boolean autopopup)
    autopopup 布尔值 true(默认) 弹出更新对话框,false 禁止弹出更新对话框
- public void setUpdateListener(XiaomiUpdateListener listener)
    listener 更新回调接口
- public void onUpdateReturned(int statusCode, UpdateResponse updateInfo)
    statusCode 更新回调接口返回状态,与UpdateStatus里的常量相对应;updateInfo 更新回调返回数据,包括App更新信息、属性;updateLog 更新日志;versionCode 最新版本的版本号 versionName最新版本的版本名称;path 最新版下载链接
- public void arrange()
在update返回结果以后,可以调用,使SDK继续进行下载安装等事宜
注:在检查更新结果非STATUS_UPDATE时,请不要调用此接口

提醒:默认弹框方式下,点确定升级时,在装有小米应用商店的情况下会调起应用商店里对应的该应用的详情界面,在没有小米应用商店的情况,会直接调用系统下载管理器进行下载。

检查更新SDK如何检查新版本?

当调用SDK的update()方法时,SDK会获取当前应用的包名,版本号,签名和当前版本的MD5,上传至服务器,并带上相应的机型信息,由服务器进行匹配过滤,并将更新信息和下载地址等返回给SDK来处理。

混淆中遇到问题怎么处理?

如果您的应用使用了混淆, 由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:

-keep public class [您的应用包名].R$*{
    public static final int *;
}

请把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。

检查更新SDK申请的权限对应哪些功能?

  • android.permission.WRITE_EXTERNAL_STORAGE 允许许将下载的apk文件保存到sd卡中
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET
  • android.permission.ACCESS_WIFI_STATE 以上三个权限允许SDK访问手机的网络连接状态,判断是否更新
  • android.permission.READ_PHONE_STATE 用于读取手机硬件信息等,用于机型过滤
  • com.xiaomi.market.sdk.UPDATE 用于标明使用小米SDK

有时候测试发现并不是增量升级包是为什么?

由于增量更新需要通过比较当前包和更新包的差异来产生DIFF文件,如果一直检测不到增量更新,有可能是服务器上没有当前包的备份,无法生成DIFF文件。

增量更新有哪些要求?

  • 只要用户安装的App版本,曾经在小米应用商店发布过,在下载更新时,SDK就会自动下载增量包更新。无论与最新版之间相隔多少个版本,小米应用商店的服务器都会自动计算出合适的增量包。
  • 提醒1: 增量更新只在由SDK负责下载更新时生效
  • 提醒2: 因为增量包生成的触发,是首次有用户请求该增量包时发生的,因此,新版本刚刚发布时,会有极少部分用户下载到的仍然是完整包,后面我们会优化增量包的生成策略