使用 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());
        }
    };);

加载离线包

  1. 创建 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);
        }
    }
    
  2. 使用 loadUrlAsync 方法将 URL 转换为离线包 URL,并使用 webview 加载转换后的 URL,参考代码如下 :

    mOfflineManager.loadUrlAysn(URL_WITH_BID_PARAM, new SimpleCallback<String>() {
        @Override
        public void callback(String transedUrl) {
            webview.loadUrl(transedUrl);
        }
    });
    
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""