/**
* @param host 请求的基本地址
*/
public AppSpConfig setHost(String host) {
AppSpRequestUrl.Host = host;
return appSpConfig;
}
/**
* 设置是否打开debug开关
*
* @param debug true表示打开debug
*/
public AppSpConfig setDebuggable(boolean debug) {
AppSpLog.setDebugged(debug);
return appSpConfig;
}
/**
* 初始化
*
* @param context 可以是 activity/fragment/view
* @param appKey 用于标识哪个APP,唯一标识
*/
public AppSpConfig init(Context context, String appKey) {
this.context = context;
this.appKey = appKey;
return appSpConfig;
}
/**
* 获取设备信息
*/
public void deviceInit() {
AppSpVersionController appSpVersionController = new AppSpVersionController(context, appKey);
appSpVersionController.initDevice();
}
/**
* 版本更新回调
*
* @param iAppSpVersionCallback
*/
public void getVersion(IAppSpVersionCallback iAppSpVersionCallback) {
AppSpVersionController appSpVersionController = new AppSpVersionController(context, appKey);
appSpVersionController.getVersion(iAppSpVersionCallback);
}
/**
* 公告回调
*
* @param iAppSpNoticeCallback
*/
public void getNotice(IAppSpNoticeCallback iAppSpNoticeCallback) {
AppSpNoticeController appSpNoticeController = new AppSpNoticeController(context, appKey);
appSpNoticeController.getNotice(iAppSpNoticeCallback);
}
/**
* RSA加密
*
* @param data 待加密数据
* @param publicKey 公钥
* @return
*/
public static String encrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
int inputLen = data.getBytes().length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offset = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offset > 0) {
if (inputLen - offset > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data.getBytes(), offset, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data.getBytes(), offset, inputLen - offset);
}
out.write(cache, 0, cache.length);
i++;
offset = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
// 获取加密内容使用base64进行编码,并以UTF-8为标准转化成字符串
// 加密后的字符串
return Base64Util.encode(encryptedData);
}
接口
public interface IAppSpVersionService {
//获取版本信息
void getVersion();
}
实现
@Override
public void initDevice() {
//appKey不能为空
if(TextUtils.isEmpty(appKey)){
AppSpLog.e("initDevice Appkey is null or empty");
return;
}
//请求基础数据
AppSpPostData appSpPostData = getPostEncryptData();
AppSpHttpClient client = new AppSpHttpClient();
//请求
client.request(AppSpRequestUrl.Host + AppSpRequestUrl.initDevice, appSpPostData, new AppSpCallBack() {
@Override
public void onSuccess(String data) {
AppSpLog.d("initDevice success");
}
@Override
public void onError(String code, String msg) {
AppSpLog.d("initDevice error");
}
});
}
接口
public interface IAppSpVersionService {
//获取版本信息
void getVersion();
}
实现
@Override
public void getVersion() {
//appKey不能为空
if(TextUtils.isEmpty(appKey)){
AppSpLog.e("getVersion Appkey is null or empty");
return;
}
//请求基础数据
AppSpPostData appSpPostData = getPostEncryptData();
AppSpHttpClient client = new AppSpHttpClient();
//请求
client.request(AppSpRequestUrl.Host + AppSpRequestUrl.getAppVersion, appSpPostData, new AppSpCallBack() {
@Override
public void onSuccess(String data) {
//数据解析
if (appSpVersionHandler != null) {
appSpVersionHandler.handleVersionSuccess(data);
}
}
@Override
public void onError(String code, String msg) {
//数据解析
if (appSpVersionHandler != null) {
appSpVersionHandler.handleUpdateException(code, msg);
}
}
});
}
/**
* 版本更新获取数据成功
* json解析
*/
public void handleVersionSuccess(String data) {
if (appSpVersionCallback != null) {
synchronized (appSpVersionCallback) {
//Update
try {
AppSpModel<AppSpVersion> spVersionModel = new AppSpModel<>();
JSONObject jsonObject = new JSONObject(data);
spVersionModel.setRepCode(getStringElement(jsonObject.opt("repCode")));
spVersionModel.setRepMsg(getStringElement(jsonObject.opt("repMsg")));
Object repDtaObj = jsonObject.opt("repData");
if (repDtaObj != null && !TextUtils.isEmpty(repDtaObj.toString())
&& !"null".equalsIgnoreCase(repDtaObj.toString())) {
JSONObject repData = new JSONObject(repDtaObj.toString());
if (repData != null) {
AppSpVersion appSpVersion = new AppSpVersion();
appSpVersion.setDownloadUrl(getStringElement(repData.opt("downloadUrl")));
appSpVersion.setUpdateLog(getStringElement(repData.opt("updateLog")));
appSpVersion.setShowUpdate(getBooleanElement(repData.opt("showUpdate")));
appSpVersion.setMustUpdate(getBooleanElement(repData.opt("mustUpdate")));
spVersionModel.setRepData(appSpVersion);
}
}
AppSpLog.d("版本更新返回客户端数据 " + spVersionModel);
//结果返回给调用者
appSpVersionCallback.update(spVersionModel);
} catch (Exception e) {
AppSpLog.d("版本更新返回客户端数据 Exception e " + e.toString());
}
}
}
}
/**
* 版本更新异常处理
*
* @param code
* @param msg
*/
public void handleUpdateException(String code, String msg) {
if (appSpVersionCallback != null) {
synchronized (appSpVersionCallback) {
//Update error
//结果返回给调用者
appSpVersionCallback.error(code, msg);
}
}
}
public interface IAppSpNoticeService {
void getNotice();
}
@Override
public void getNotice() {
//appKey不为空
if (TextUtils.isEmpty(appKey)) {
AppSpLog.e("getNotice Appkey is null or empty");
return;
}
//请求基础数据
AppSpPostData appSpPostData = getPostEncryptData();
AppSpHttpClient client = new AppSpHttpClient();
client.request(AppSpRequestUrl.Host + AppSpRequestUrl.getAppNotice, appSpPostData, new AppSpCallBack() {
@Override
public void onSuccess(String data) {
//数据处理
if (appSpNoticeHandler != null) {
appSpNoticeHandler.handleNoticeSuccess(data);
}
}
@Override
public void onError(String code, String msg) {
//数据处理
if (appSpNoticeHandler != null) {
appSpNoticeHandler.handleNoticeExcption(code, msg);
}
}
});
}
数据解析,详见AppSpNoticeHandler.java ```java /**
公告获取数据成功 */ public void handleNoticeSuccess(String data) { if (appSpNoticeCallback != null) {
synchronized (appSpNoticeCallback) {
//Notice
try {
AppSpModel<List<AppSpNoticeModelItem>> spVersionModel = new AppSpModel<>();
JSONObject jsonObject = new JSONObject(data);
spVersionModel.setRepCode(getStringElement(jsonObject.opt("repCode")));
spVersionModel.setRepMsg(getStringElement(jsonObject.opt("repMsg")));
Object repDtaObj = jsonObject.opt("repData");
if (repDtaObj != null && !TextUtils.isEmpty(repDtaObj.toString())
&& !"null".equalsIgnoreCase(repDtaObj.toString())) {
JSONArray repData = new JSONArray(repDtaObj.toString());
List<AppSpNoticeModelItem> items = new ArrayList<>();
if (repData != null) {
for (int i = 0; i < repData.length(); i++) {
AppSpNoticeModelItem item = new AppSpNoticeModelItem();
JSONObject value = repData.getJSONObject(i);
item.setTitle(getStringElement(value.opt("title")));
item.setDetails(getStringElement(value.opt("details")));
item.setTemplateType(getStringElement(value.opt("templateType")));
item.setTemplateTypeName(getStringElement(value.opt("templateTypeName")));
items.add(item);
}
spVersionModel.setRepData(items);
appSpNoticeCallback.notice(spVersionModel);
}
}
AppSpLog.d("通知返回客户端数据 " + spVersionModel);
} catch (Exception e) {
AppSpLog.d("通知返回客户端数据 Exception e " + e.toString());
}
}
} }
/**