Data SDK

版本 时间 修改内容
1.0.0 2018年12月25日 第一次创建
1.0.1 2018年1月15日 1、修改CategoryList为ChannelList;Category为Channel;
2、修改YLInit uid不必传参数;3、删除MediaInfo的category字段;
4、修改YLFeedRequest.categories(NSubscriber< CategoryList >)为getChannels(NSubscriber< ChannelList >)
1.0.2 2018年1月24日 1、修改MediaInfo,去掉Provider;增加类Provider
2、增加请求相关、请求播放详情、请求播放地址
3、展示上报不用添加来源 referpage
1.0.3 2018年2月28日 1、增加广告请求
2、优化服务质量,增加阿里云httpdns解析
1.0.4 3月14日 1、去掉初始化时sid参数
2、去掉gson编译依赖
1.0.5 无,随UI SDK版本更新升级
1.0.6 4月15日 修改网络请求参数为null导致签名失败问题
1.0.7~1.0.9 无,随UI SDK版本更新升级
1.0.10 2019年6月14日 ugc接口增加sz
1.1.0 2019年7月1日 无,随UI SDK版本更新升级
1.2.0.1 2019年8月2日 无,随UI SDK版本更新升级
1.3.0.2 2019年8月12日 无,随UI SDK版本更新升级
1.3.2.1 2019年8月22日 无,随UI SDK版本更新升级
1.3.4.1 2019年8月22日 无,随UI SDK版本更新升级

一览Android Data SDK接入文档

一、SDK 概要

DataSDK为移动应用提供内容分发功能,为客户提供较为简洁的API接口,方便第三方应用快速的集成并实现内容分发功能。
DataSDK提供的功能如下:

  • 获取频道列表
  • 获取频道下视频列表
  • 用户行为采集上传

二、SDK 类

一览Data SDK主要提供了以下类:

  • YLInit:整个SDK的主入口,单例,主要提供初始化,配置用户信息。
  • YLFeedRequest: 单例,加载频道列表、视频列表的功能
  • YLReport: 单例,用于用户行为和视频上报
  • ChannelList:频道列表的model类
  • Channel:单个频道的model类
  • MediaList:频道下视频列表
  • MediaInfo:视频的model类
  • MediaDetail:视频详情的model类

2.1、开发准备

1.添加SDK到工程中

  • 推荐方式 gradle依赖
allprojects {
    repositories {
        google()
        jcenter()
        //添加一览 maven地址
        maven {
            url 'http://nexus.1lan.tv/repository/maven-releases/'
        }
        maven {
            url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
        }
    }
}
implementation 'com.yilan.sdk:data:xxx'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation ('com.aliyun.ams:alicloud-android-httpdns:1.2.3@aar') {
        transitive true
    }

2.混淆

若您的App开启了混淆,请为我们的SDK添加下述混淆规则

-keep class com.yilan.sdk.**{
    *;
}
-dontwarn javax.annotation.**
-dontwarn sun.misc.Unsafe
-dontwarn org.conscrypt.*
-dontwarn okio.**

阿里云混淆

-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}

三、初始化

在自定义Application的OnCreate中添加以下代码,初始化我们的SDK。

  • 代码示例
YLInit.getInstance()
        .setApplication(this)
        .setAccessKey("xxx")//设置accesskey,这里是测试账号,请联系一览客服提供正式key
        .setAccessToken("xxx")//设置token
        .setUid("uid")//设置登录用户唯一id
        .build();
  • 方法说明
方法名 参数 类型 描述 是否必须参数
setApplication context Application 设置Context
setAccessToken token String 设置token,token由一览提供
setAccessKey key String 设置key,key由一览提供
setUid uid String 为了获取更加准确的跨平台的个性化推荐内容,鼓励用户配置应用的唯一userId

四、数据请求

com.yilan.sdk.net.request.YLFeedRequest

1.请求频道列表数据

  • 代码示例
YLFeedRequest.instance().getChannels(new NSubscriber<ChannelList>() {
            @Override
            public void onError(Throwable e) {
            }
            @Override
            public void onNext(ChannelList entity) {
                super.onNext(entity);
            }
        });
  • 方法说明
/**
 * 获取所有频道列表
 *
 * @param listener 网络请求回调
 */
public void getChannels(new NSubscriber<ChannelList> listener);
  • 接口返回 ChannelList | 名称 | 类型 | 描述 | | --- | --- | --- | | data | List< Channel > | 频道列表 |

其中,单个频道的数据模型Channel各字段含义如下:

名称 类型 描述
id String 频道id
name String 频道名称

2.请求频道下视频列表

  • 方法说明
/**
     * 请求频道视频列表
     *
     * @param channelId 频道id
     * @param load_type  加载方式:0上拉加载更多 1非首次下拉刷新时 2首次刷新某个频道
     * @param callback   回调
     */
    public void feedList(String channelId, int load_type, NSubscriber<MediaList>( callback) {
  • 接口返回 MediaList | 名称 | 类型 | 描述 | | --- | --- | --- | | data | List< MediaInfo > | 视频列表 |

其中,单个频道的数据模型MediaInfo各字段说明如下:

名称 类型 描述
log_id String 推荐id
video_id String 视频id
title String 视频名称
tags String 视频标签,格式 "热血长安, 默剧, 恶搞"
h5_url String h5打开地址
image String 封面图
duration long 时长,单位 s
provider Provider 内容提供者
publish_date String 视频生成时间,格式:"2018-01-01 12:00:00"
video_w int 视频宽
video_h int 视频高
play_num int 视频播放数
like_num int 喜欢数
create_time long 视频生产时间
update_time long 视频更新时间

3.请求相关推荐视频

  • 方法说明
/**
 * 请求相关推荐
 *
 * @param videoId 视频id
 * @param callback
 */
public void getRelateVideos(String videoId, NSubscriber<MediaList> callback)

4.请求视频详情

  • 方法说明
/**
     * 请求相关推荐
     *
     * @param videoId 视频id
     * @param callback   回调
     */
    public void getVideoDetail(String videoId, NSubscriber<MediaDetail> callback)

MediaDetail类字段说明 

名称 类型 描述
create_time String 视频id
title String 视频标题
image String 视频封面图
duration String 视频时长
provider Provider 内容提供者

5. 请求小视频列表

  • 方法说明
/**
    * requestType 加载方式:0上拉加载更多 1非首次下拉刷新时 2首次刷新某个频道
    * sz:请求个数,默认和最大8个
    * callback 回调
*/
YLFeedRequest.instance().ugcList(requestType, 8,new NSubscriber<MediaList>() {

            @Override
            public void onError(Throwable e) {
                sendFail();
            }

            @Override
            public void onNext(MediaList entity) {
                super.onNext(entity);
            }
        });

五、数据上报

数据上报在一览内容提供平台有着极其重要的作用,可以为App用户提供更为精准和个性化的推荐,进而提高VV和PV,增加收入。所以建议开发者接入sdk后,必须准确的调用数据上报。
com.yilan.sdk.report.YLReport

1.视频展示上报

  • 调用时机

在视频item(mediainfo)展示时调用
注意: 为了节省流量,app开发者应尽量避免同一视频的展示上报事件多次上传。 快速滑动列表产生的曝光,因用户未来得及观看,不能算作有效展示事件。建议在每个列表项展示0.5s后再进行上报。

  • 代码示例
YLReport.instance().reportVideoShow(mediaInfo);
  • 方法说明
/**
 *
 * @param mediaInfo
 */
public void reportVideoShow(MediaInfo mediaInfo)
  • 接口返回

以RecyclerView为例,给出一种曝光统计方案
  • 覆写Recycler.Adapter. onViewAttachedToWindow
public void onViewAttachedToWindow(VH viewHolder) {
    if (null != viewHolder) {
            int pos = viewHolder.getAdapterPosition();
            if (pos < 0 || pos >= mList.size()) {
                return;
            }
            MediaInfo mediaInfo = mList.get(pos);
            if (mediaInfo != null) {
                YLReport.instance().reportVideoShow(mediaInfo);
            }
        }
}
  • 如果在ViewPager+Fragment列表里面展示上报,为了更加精确。可以在可以采用如下方式:
private boolean mIsVisible = false;//记录该页面是否展示
@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        mIsVisible = isVisibleToUser;
        if (mIsVisible && mManager != null) {
            int first = mManager.findFirstVisibleItemPosition();
            int last = mManager.findLastVisibleItemPosition();
            if (first >= 0 && last >= 0 && first < last) {
                for (int i = first; i <= last; i++) {
                    if (mPresenter.getList().get(i) instanceof MediaInfo) {
                        MediaInfo info = (MediaInfo) mPresenter.getList().get(i);
                        YLReport.instance().reportVideoShow(info);
                    }
                }
            }
        }
    }

2.视频点击上报

  • 调用时机

在点击每个视频item时,调用

  • 代码示例
YLReport.instance().reportVideoClick(mediaInfo);
  • 方法说明
/**
 * 
 * @param mediaInfo
 */
public void reportVideoClick(MediaInfo mediaInfo)
  • 接口返回


京公网安备 11010502034970号 京ICP备17041367号
北京一览科技有限公司 ©2017 1lan.tv 版权所有.

Documentation built with MkDocs.