使用 SDK
初始化
协议版本
早期版本离线包任务推拉是依赖数据同步组件来完成的,从3.0.2.0版本起,离线包支持直接使用移动网关来实现任务推拉,可以解除任务推拉对数据同步组件的依赖。不过本次协议调整对新版服务有依赖,考虑到私有化客户不同的服务版本,SDK侧做了兼容,同时保留了两套协议实现,客户在初始化时根据自身服务情况指定协议版本即可。
public class ProtocolType {
/**
* 旧协议,依赖数据同步组件实现任务推拉
*/
public static final int PROTOCOL_TYPE_CONCH = 0;
/**
* 新协议:与数据同步组件解耦,
*/
public static final int PROTOCOL_TYPE_SHARK = 1;
}
- 如果您对接的是公有云版本服务,协议版本需选择PROTOCOL_TYPE_SHARK。
- 如果您对接的是私有化版本服务,默认协议版本是PROTOCOL_TYPE_CONCH,如果需要选择PROTOCOL_TYPE_SHARK,请联系管理员确认服务版本是否支持新协议。
初始化SDK
- 确保 TMF 基础库完成初始化
- 确保离线包所依赖其他模块可以正常运行 建议在 Application 中进行初始化,初始化 OfflineManager,参考代码如下
//TMFBase初始化
TMFBaseConfig config = new TMFBaseConfig.Builder()
.buildNo(BuildConfig.BUILD_NO) // 必须,网关, 热更等模块需要使用
.debug(true)
//...
.build();
TMFBase.init(this, config);
// TMFCipher初始化
TMFCipher.init(context);
//离线包初始化
OfflineManager.init(context, protocolType);//根据对接服务版本,选择protocoType
获取BID和URL
用户需要根据管理后台使用手册上传离线包,并获取得到 bid 和 url(H5 主路径),它们的获取已在 快速开始 解释说明。
创建OfflineMananger
离线包核心功能都通过OfflineManager对外暴露,OfflineManager实例需开发者自行维护,创建实例方法如下:
OfflineManager mOfflineManager = new OfflineManager(context);
检查离线包更新
得到 BID 后,通过 OfflineManager 提供的检查更新的方法,检查并下载离线包。OfflineManager 提供的方法,请参见 API 描述,示例代码如下:
mUpdateSetting = new UpdateSetting();
mUpdateSetting.ignoreFreqLimit = true;
mUpdateSetting.fromPush = false;
List<String> list = new ArrayList<>();
list.add(BID);
mOfflineManager.checkLatestUpdate(list, mUpdateSetting, new IOfflineUpdateCallback() {
@Override
public void update(int code, List<UpdateEntity> updateInfos) {
if(code == OfflineManager.CHECK_CODE_SUCC_NO_UPDATE){
Log.d(TAG, "update, 无更新");
}else {
Log.d(TAG, "update, code=" + code + " " + (updateInfos == null ? null :
updateInfos.toString()));
}
}
@Override
public void downloadProgress(ProgressEntity progressInfo) {
Log.d(TAG, "downloadProgress, " + progressInfo.toString());
}
@Override
public void downloadFinish(DownloadInfo downloadInfo) {
Log.d(TAG, "downloadFinish, " + downloadInfo.toString());
}
};);
加载离线包
创建 H5 容器,H5 容器的 WebView 需要重写 WebViewClient 的 shouldOverrideUrlLoading 方法,在该方法中需要使用 OfflineManager 类中的 shouldInterceptRequest 方法检查并使用本地离线包中的资源。
OfflineManager 类中的 shouldInterceptRequest 方法使用如下:
private class TestWebViewClient extends WebViewClient { @Override public WebResourceResponse shouldInterceptRequest(final WebView view, final String url) { TMFWebResourceResponse response = mOfflineManager.shouldInterceptRequest(url); if (response != null && response.getResourceResponse() != null) { return response.getResourceResponse(); } //注意这里必须返回父类的shouldInterceptRequest,不能直接返回null return super.shouldInterceptRequest(view, url); } }
使用 loadUrlAsync 方法将 URL 转换为离线包 URL,并使用 webview 加载转换后的 URL,参考代码如下 :
mOfflineManager.loadUrlAysn(URL_WITH_BID_PARAM, new SimpleCallback<String>() { @Override public void callback(String transedUrl) { webview.loadUrl(transedUrl); } });