小米应用商店检查更新SDK(下文简写为『检查更新SDK』)帮助您的用户尽快获得最新版本的应用。轻松增加『自动检查更新』功能,通过小米应用商店的CDN服务,快速的把最新版应用推送给用户。
一、功能特性
- 支持增量更新:检查更新SDK会自动识别用户版本,开发者可选择让用户跳转至小米应用商店,支持增量更新,加速省流;
- 方便省心:无需考虑配置服务器,部署CDN等问题,小米应用商店免费提供;
- 支持基于设备属性和API-Level的系统版本过滤,会将新版推送给支持的设备;
- 独家支持:在MIUI系统上支持调用系统商店更新,升级成功率更高。
二、接入准备
开发者你好,可通过以下业务账号和授权的apikey,用于检查更新sdk获取:
账号:mimarketupdate
key:AKCp8nG6QPsVt4NiuCr5brYzj9iKLgrww6DATp8V4jXCmippBs3UuzwJBA9gUMTHVGWz1zAbB
邮件需包含以下内容:
申请标题 | 因业务要求,现申请小米应用商店检查更新SDK接入权限。 |
开发者信息 | |
接入应用名称 | |
接入应用包名 |
邮件地址:developer@xiaomi.com
商店侧收到申请邮件后,会回复并提供业务账号和授权的apikey 用于检查更新sdk获取;
三、接入说明
检查更新SDK默认不会在AndroidManifest.xml中申请权限,使用方需要自行在自身的AndroidManifest.xml去申请相关权限。
四、开始集成
1、添加SDK依赖
1.1 在项目的根build.gradle中配置仓库地址:
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 业务账号id
password 业务账号apikey
}
}
1.2 添加依赖
//添加依赖
implementation 'mi-appstore:xiaomi-update-sdk:4.2.4'
2、在AndroidManifest.xml文件中添加SDK信息
2.1 添加检查更新需要的权限:
<!-- 获取网络状态权限, 检查更新功能必须声明此权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问网络权限, 检查更新功能必须声明此权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取Wi-Fi状态权限, 检查更新功能必须声明此权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 检查更新自定义权限, 检查更新功能自升级必须声明此权限 -->
<uses-permission android:name="com.xiaomi.market.sdk.UPDATE" />
3、Api说明
3.1 XiaomiUpdateAgent
3.1.1 public synchronized static void update(Context context, boolean debug)
/**
* 触发检查更新
* @param context 会以WeakRerference的形式存在, 若检查更新结果返回时, context已销毁,
* 此次检查更新被忽略
* @param debug 是否使用沙盒测试
*/
public synchronized static void update(Context context, boolean debug)
3.1.2 public static void setUpdateAutoPopup(boolean autoPopup)
/**
* 设置检查到应用可更新时是否自动弹窗,当设置为true时且updte方法传入的Context是Activity, 则在检查到更新时自动弹窗提醒
* 若设置为false,或者update接口的Context不是Activity时,则需要应用通过setUpdateListener注册检查结果回调,并自己处理检查结果
* @param autoPopup 设置有可更新包时, 是否自动弹出升级对话框, 默认为true
*/
public static void setUpdateAutoPopup(boolean autoPopup)
3.1.3 public static void setCheckUpdateOnlyWifi(boolean checkUpdateOnlyWifi)
/**
* 设置是否仅在wifi下检查更新
* @param checkUpdateOnlyWifi 是否仅wifi下检查更新, 默认为false
*/
public static void setCheckUpdateOnlyWifi(boolean checkUpdateOnlyWifi)
3.1.4 public static void setUpdateListener(XiaomiUpdateListener updateListener)
设置检查到更新时的回调接口。仅当setUpdateAutoPopup(false)时,才生效。
3.1.5 public static int getSDKVersion()
/**
* 返回当前sdk版本号
* @return sdk版本号
*/
public static int getSDKVersion()
3.1.6 public static void arrange()
/**
* 触发下载安装流程。
* 当setUpdateAutoPopup(true)时, 且update方法Context是Activity, 则会在用户点击升级对话框的升级按钮时, 会跳转至小米应用商店。
* 当setUpdateAutoPopup(false)时, 或update方法Context不是Activity时,检查到更新后. 需要应用主动调用此方法跳转至小米应用商店.
* 仅在当前手机安装有小米应用商店时生效
*/
public static void arrange()
3.2 public class UpdateStatus
检查更新返回码:
/**
* 有可更新版本
*/
public static final int STATUS_UPDATE = 0;
/**
* 无可更新版本
*/
public static final int STATUS_NO_UPDATE = 1;
/**
* 无wifi连接, 当设置了仅wifi检查且当前无wifi时返回此错误码
*/
public static final int STATUS_NO_WIFI = 2;
/**
* 检查更新时无网络连接
*/
public static final int STATUS_NO_NET = 3;
/**
* 检查更新失败, 主要是由于网络故障或服务器异常等
*/
public static final int STATUS_FAILED = 4;
/**
* 获取本地apk信息失败
*/
public static final int STATUS_LOCAL_APP_FAILED = 5;
3.3 public class UpdateResponse
/**
* 更新日志
*/
public String updateLog;
/**
* 版本名称
*/
public String versionName;
/**
* 版本号
*/
public int versionCode;
/**
* 下载地址
*/
public String path;
/**
* 安装包大小
*/
public long apkSize;
/**
* 安装包md5
*/
public String apkHash;
/**
* 安装包增量大小. sdk会根据本地apk和服务器apk的diff, 下载增量包, 并合成最终apk
*/
public long diffSize;
/**
* 判断语言是否支持
*/
public boolean matchLanguage;
3.4 public interface XiaomiUpdateListener
检查更新回调接口,用于接收检查更新结果,仅在setUpdateAutoPopup(false)时有效
3.4.1 void onUpdateReturned(int updateStatus, UpdateResponse updateInfo)
/**
* 检查更新结果回调
* @param updateStatus 参考4.2 UpdateStatus
* @param updateInfo 参考4.3 UpdateResponse
*/
void onUpdateReturned(int updateStatus, UpdateResponse updateInfo);
五、接入示例
检查更新
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
XiaomiUpdateAgent.update(this, false);
}
仅在Wifi下检查更新
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
XiaomiUpdateAgent.setCheckUpdateOnlyWifi(true);
XiaomiUpdateAgent.update(this, false);
}