下载SDK使用说明 - GrouthDownload/TDownloadSDK GitHub Wiki

  腾讯下载SDK基于halley下载器进行接口封装,提供基础的下载接口、下载任务持久化以及下载日志上报等服务。   下载SDK的使用分为三个步骤,分别为初始化、接口使用和注销。各模块执行时机,建议如下: image.png

下载SDK接入

添加maven仓库

maven {
   url "http://maven.oa.com/nexus/content/repositories/thirdparty"
}

在模块中添加依赖

   implementation "com.tencent.basicservices:download:1.0.2-release102-WithJce-HideHalley-4001"

初始化

  下载SDK使用前,需要进行初始化。初始化时需要将App的Context(SDK内部会主动获取ApplicationContext)以及将appKey和appSecret传递给SDK,具体示例代码如下:

private String mAppKey    = "YOUR APPKEY";
private String mAppSecret = "YOUR APPSECRET";

private void initDownloadSDK(){
    Map<String, String> initParamMap = new HashMap<>();
    initParamMap.put(InitParam.APP_KEY, mAppKey);
    initParamMap.put(InitParam.APP_SECRET, mAppSecret);
    TDownloader.init(getApplicationContext(),initParamMap);
}

SDK普通下载接口的使用

  TDownloader提供下载相关的接口,通过TDownloader进行下载相关的操作。SDK下载具体使用操作包括注册下载监听器和调用下载接口,本文将分小节详细介绍。

1 注册监听器

  下载过程需要监听下载任务的状态,因此需要注册一个回调监听器给SDK。SDK内部持有监听器的弱引用,因此使用方需要持有监听器的强引用,防止监听器被GC回收,导致无法接收到回调信息。   SDK的下载监听器TaskListener回调接口以及注册示例代码如下:

private TaskListener mDownloadStateListener = new TaskListener() {
    @Override
    public void onTaskStateChanged(DownloadInfo downloadInfo) {
        //任务状态变化
    }

    @Override
    public void onTaskProgressChanged(DownloadInfo downloadInfo) {
        //任务进度变化
    }

    @Override
    public void onInstalled(DownloadInfo downloadInfo) {
        //任务安装成功回调
    }
};

// 注册监听器
TDownloader.getDownloader().addTaskListener(mDownloadStateListener);

2 调用下载接口

  下载任务相关的操作包括:开始、暂停、删除、查询和安装。各接口使用示例代码如下:

DownloadInfo info = new DownloadInfo();
// 下载URL
info.downloadURL = "https://imtt.dd.qq.com/16891/ACBE213904903B19E431351FEA6E7207.apk";
// 下载Apk包名
info.packageName = "com.qiyi.video";

//开始下载任务
TDownloader.getDownloader().startDownload(info);

//暂停下载任务
TDownloader.getDownloader().pauseDownload(info.downloadURL);

//查询下载任务状态
DownloadInfo infoFromSDK = TDownloader.getDownloader().getDownloadTaskInfo(info.downloadURL);

//删除下载任务
TDownloader.getDownloader().deleteDownload(info.downloadURL);

//触发已完成任务的安装
TDownloader.getDownloader().install(info);

   注意: 示例中DownloadInfo只填写了url和包名参数,实际使用中应该根据业务场景的实际情况,完善DownloadInfo结构体的字段数据,在后续的统计日志内容也会更加完善。   DownloadInfo常用外部传入字段说明:

字段名称 含义
downloadURL 下载链接,必须填
packageName Apk任务包名信息
versionCode Apk任务版本号信息
fileSize 文件长度
fileMd5 文件md5
via 业务VIA,标识来源
fileType 文件类型
appId 数据源返回的appid
apkId 数据源返回的apkid
recommendId 数据源返回的recommendid
channelId 数据源返回的channelId
scene 外部自定场景信息
autoInstall 是否由SDK自动触发安装
pauseOnMobile 是否在移动网络下自动暂停
extraInfo 额外信息,预留给外部使用

3 注销

  应用关闭时需要调用注销接口,防止资源泄漏。具体调用代码如下:

@Override
protected void onDestroy() {
    super.onDestroy();
    TDownloader.getDownloader().destroy();
}

共享下载(接力下载)

SDK的1.0.3及以上版本开始支持共享下载能力,本小节主要介绍下载SDK模块内共享下载相关的接口和使用说明。

I.共享下载概念

当两个或者多个App同时接入该SDK时,可以通过共享下载任务的临时文件实现同一任务在不同时刻被不同的App触发继续下载,以此提高下载任务的完成率。整个下载过程是不同App之间接力完成下载,因此被称为接力下载能力或共享下载能力。 整个过程示意图如下: 共享下载示意图

II.共享下载相关接口使用

为了支持共享下载能力,SDK接口IDownloader内新增以下两个接口:

    /**
     * 开始接力下载
     */
    void startRelayDown();

    /**
     * 暂停所有接力下载任务
     */
    void pauseAllRelayTasks();
  • App在合适的时机(比如连上wifi时)调用startRelayDown,尝试触发接力下载任务的下载(SDK内部会分析是否有合适的接力下载任务可被下载);
  • 当希望暂停接力下载任务时(比如网络从wifi切到4G)调用pauseAllRelayTasks,实现接力下载任务的暂停操作。

注意:对于使用方而言只需要触发下载和暂停动作即可,不需要关系接力下载任务的具体细节,SDK内部会记录该任务的操作记录,跟随下载日志一起上报到后台,用于分析任务的下载过程。

另外,SDK的DownloadInfo内新增字段:isRelayDownloadTask,用于标记任务是否可被接力下载(只有可被接力下载的任务才可能会被其他接入该SDK的App拿到并触发下载):

    /**
     * 1-允许接力下载, 0-不允许
     */
    public int isRelayDownloadTask = 0;

使用方在新建下载任务时,可以通过主动把DownloadInfoisRelayDownloadTask字段置为1,从而将任务设置为可被接力下载的任务。