接入龙图安卓SDK的游戏及应用的android客户端开发者。
使用此文档内接口,需要先接入龙图安卓SDK。
1 接入龙图安卓SDK后,需要配置抖音SDK需要的依赖库。
2 然后将 抖音SDKLibrary/libs目录下的jar 和 aar 复制到你的工程的
Application Module/libs文件夹(没有的话须手动创建),
3 复制 抖音SDKLibrary/res 目录下的内容到工程的res目录下
4 将以下代码添加到您app的build.gradle中:
//必须 :该库因为SDK内部使用
//noinspection GradleCompatible
implementation 'com.android.support:cardview-v7:28.0.0'
//必须:这个库是加载一些广告中gif文件 所以需要依赖
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.18'
//必须:这个库是内部SDK用到 需要依赖
implementation 'com.google.code.gson:gson:2.8.6'
//必须:这个库保证版本在24以上即可
//noinspection GradleCompatible
implementation 'com.android.support:support-v4:26.1.0'
5 添加资源到 AndroidManifest.xml 内
<!--必须要有的权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!--最好能提供的权限-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 如果有视频相关的广告且使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--录屏前台服务配置-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
6 添加抖音配置到 AndroidManifest.xml 内
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
<!--若使用录屏功能且targetsdkversion为29时必须配置,否则不用配置-->
<service
android:name="com.ss.union.sdk.videoshare.service.RecordMediaProjectService"
android:enabled="true"
android:foregroundServiceType="mediaProjection" />
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
7 添加抖音参数,配置到 AndroidManifest.xml 内
抖音参数需要找运营同学获取
参数key | 参数说明 | 是否必选 | 获取方式 |
---|---|---|---|
LTDouYinAppId | 抖音appid | 必选 | 运营提供 |
LTDouYinChannel 渠道信息 | 必选 | 运营提供 | |
LTDouYinAppName | app名称 | 必选 | 运营提供 |
LTDouYinAppTestVison | 该配置为 optional 如果申请了AB测试 那么可以配置,否则可以忽略 | 可选 | 运营提供 |
<meta-data
android:name="LTDouYinAppId"
android:value="" />
<meta-data
android:name="LTDouYinChannel"
android:value="" />
<meta-data
android:name="LTDouYinAppName"
android:value="" />
<!-- 没有AB测试可以不添加此项 -->
<meta-data
android:name="LTDouYinAppTestVison"
android:value="" />
8 添加url scheme:
并将以下代码添加到您app的build.gradle中:
【您应用的深度转化url_scheme】 需要找运营获取。
// 在android的defaultConfig中添加
manifestPlaceholders.put("APPLOG_SCHEME", "【您应用的深度转化url_scheme】".toLowerCase())
9 适配Android10
前提:如果您的应用需要适配Android10(即设置targetSdkVersion=29) ##### 1.2.5.1 沙盒特性适配 因为Android10增加了沙盒特性,为保证在Android 10手机上功能正常,请在AndroidManifest.xml``application节点添加如下配置:
<application
android:requestLegacyExternalStorage="true">
调用抖音功能,需要先获取功能实列。
LTBase_DouYin_Charging mLTBase_DouYin_Charging = (LTBase_DouYin_Charging)
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseSDKGetChannelsObject();
游戏调用此接口后,可以展示抖音激励视频。
参数 | 参数说明 | 参数类型 | 是否必选 |
---|---|---|---|
广告ID | 抖音分配的广告ID | String | 必选 |
广告展示方式 | 固定值: “1” 竖屏 “2” 横屏 | int | 必选 |
奖励道具的名称 | 用户看完广告奖励的道具的名称 | String | 必选 |
奖励道具的数量 | 用户看完广告奖励的道具的数量 | int | 必选 |
回调 | 视频播放结果回调 | LTBase_DouYin_showDyAdListener | 必选 |
/**
* 加载抖音激励广告
*
* @param codeId 广告ID
* @param orientation 广告展示方向 LGBaseConfigAdDTO.ORIENTATION_HORIZONTAL 横屏
* LGBaseConfigAdDTO.ORIENTATION_VERTICAL 竖屏
* @param rewardName 奖励道具的名称
* @param rewardAmount 奖励道具的数量
* @param listener 回调
*/
public void LT_DouYin_loadDyAd(String codeId, int orientation, String rewardName, int rewardAmount, LTBase_DouYin_showDyAdListener listener);
/**
* 展示抖音激励视频
*/
mLTBase_DouYin_Charging.LT_DouYin_loadDyAd("945073805", LGBaseConfigAdDTO.ORIENTATION_VERTICAL,
"金币", 100, mLTBase_DouYin_showDyAdListener);
接收到的数据为激励视频 播放结果。
接口 | 接口说明 |
---|---|
onShowDyAdFail | 视频激励失败 |
onShowDyAdSuc | 视频激励成功 |
onShowDyAdError | 视频激励错误 |
onShowDyAdSkip | 视频激励跳过 |
/**
* 激励视频结果回调
*/
private LTBase_DouYin_showDyAdListener mLTBase_DouYin_showDyAdListener = new LTBase_DouYin_showDyAdListener() {
@Override
public void onShowDyAdFail() {
Logs.i(LOGTAG, " 视频激励失败 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频激励失败 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onShowDyAdSuc() {
Logs.i(LOGTAG, " 视频激励成功 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频激励成功 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onShowDyAdError() {
Logs.i(LOGTAG, " 视频激励错误 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频激励错误 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onShowDyAdSkip() {
Logs.i(LOGTAG, " 视频激励跳过 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频激励跳过 ", Toast.LENGTH_SHORT).show();
}
};
检测当前登录的用户,是否为渠道的游客账号。
可以用于判断是否展示绑定接口。
/**
* 检查当前用户是否为游客,暂时只为抖音开放
* @return true为游客, false 为非游客
*/
public boolean LTBaseCheckUserisgGuest();
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseCheckUserisgGuest();
抖音的游客账号,绑定为抖音正式账号。
/**
* 渠道的绑定账号,用于渠道需要主动触发绑定的情况
*
* @param listener 结果回回调
*/
public void LTBaseChannelBindAccount(LTBaseAccountBindListener listener)
/**
* 绑定账号
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseChannelBindAccount(mLTBaseAccountBindListener);
接收到的数据为激励视频 播放结果。
接口 | 接口说明 |
---|---|
LTBaseBindSuccess | 绑定成功 |
LTBaseBindFail | 绑定失败 |
/**
* 绑定结果
*/
private LTBaseAccountBindListener mLTBaseAccountBindListener = new LTBaseAccountBindListener() {
@Override
public void LTBaseBindSuccess(int i, String s) {
Logs.i(LOGTAG, " 绑定成功 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 绑定成功 ", Toast.LENGTH_SHORT).show();
}
@Override
public void LTBaseBindFail(int i, String s) {
Logs.i(LOGTAG, "绑定失败");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, "绑定失败 ", Toast.LENGTH_SHORT).show();
}
};
检测当前设置是否支持录屏
/**
* 是否允许屏幕录制。
*
* @return true 支持录屏 false 不支持录屏
*/
public boolean LT_DouYin_checkSupScreenRecord()
mLTBase_DouYin_Charging.LT_DouYin_checkSupScreenRecord();
录制当前游戏屏幕
参数值 | 参数说明 |
---|---|
LGScreenRecordOperate.START | 开始 |
LGScreenRecordOperate.PAUSE | 暂停 |
LGScreenRecordOperate.RESUME | 继续 |
LGScreenRecordOperate.STOP | 结束 |
/**
* 录制屏幕:支持开始、暂停、继续、结束
* <p>
* 注意:
* 只有调用结束录制屏幕,才会生成合法的视频文件,中断录屏流程将不会生成合法视频文件
*/
public void LT_DouYin_SupSreenReoocrd(LGScreenRecordOperate operate, LTBase_DouYin_screenRecordListener listener) ;
// 录屏开始 举例
mLTBase_DouYin_Charging.LT_DouYin_SupSreenReoocrd(LGScreenRecordOperate.START,
mLTBase_DouYin_screenRecordListener);
// 录屏结束 举例
mLTBase_DouYin_Charging.LT_DouYin_SupSreenReoocrd(LGScreenRecordOperate.STOP,
mLTBase_DouYin_screenRecordListener);
接收到的数据为激励视频 播放结果。
接口 | 接口说明 | 参数说明 |
---|---|---|
onScreenRecordSuc | 录制成功 | recordFilePath 录制成功后的视频地址 |
onScreenRecordFail | 录制失败 |
/**
* 抖音录屏结果
*/
private LTBase_DouYin_screenRecordListener mLTBase_DouYin_screenRecordListener = new LTBase_DouYin_screenRecordListener() {
@Override
public void onScreenRecordFail() {
Logs.i(LOGTAG, " 录制失败 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 录制失败 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onScreenRecordSuc(String recordFilePath) {
Logs.i(LOGTAG, " 录制成功 recordFilePath = " + recordFilePath);
mRecordFilePath = recordFilePath;
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 录制成功 ", Toast.LENGTH_SHORT).show();
}
};
打开交叉推广, 打开以后是抖音的一个悬浮广告框, 需要在抖音后台配置才有作用
/**
* 交叉推广
* @param x 展示坐标
* @param y 展示坐标
*/
public void LT_DouYin_showOverlapping_Recommend(int x, int y)
// 打开交叉推广
mLTBase_DouYin_Charging.LT_DouYin_showOverlapping_Recommend(0, 0);
关闭交叉推广框
// 关闭交叉推广
public void LT_DouYin_closeOverlapping_Recommend()
// 关闭交叉推广
mLTBase_DouYin_Charging.LT_DouYin_closeOverlapping_Recommend();
由抖音Ai系统对视频进行编辑,
编辑过程不可见,回调会返回编辑进度,游戏需要自行展示编辑中进度条。
参数 | 参数说明 | 参数类型 | 是否必选 |
---|---|---|---|
videoPath | 需要编辑的视频路径 | String | 必选 |
isShare | 是否吧编辑以后的视频进行分享 true 分享 false 不分享 | boolean | 必选 |
回调 | 编辑结果回调 | LTBase_DouYin_aiEditorVideoShareListener | 必选 |
/**
* 视频编辑
*
* @param videoPath 视频路径
* @param isShare 是否分享 true 分享 false 不分享
* @param listener 结果回调
*/
public void LT_Douyin_aiEditorVideoShare(String videoPath, boolean isShare, LTBase_DouYin_aiEditorVideoShareListener listener);
// 视频编辑
mLTBase_DouYin_Charging.LT_Douyin_aiEditorVideoShare(
mRecordFilePath, false,
mLTBase_DouYin_aiEditorVideoShareListener);
接收到的数据为激励视频 播放结果。
接口 | 接口说明 | 参数说明 |
---|---|---|
onScreenRecordSuc | 视频编辑成功 | aiEditedVideoPath 编辑成功后的视频地址 ,stayInDouYin 分享成功是否留在抖音 |
onEditingProgress | 视频编辑进度 | progress 视频编辑进度 |
onAiEditorVideoFail | 视频编辑失败 |
/**
* 抖音视频编辑结果回调
*/
private LTBase_DouYin_aiEditorVideoShareListener mLTBase_DouYin_aiEditorVideoShareListener
= new LTBase_DouYin_aiEditorVideoShareListener() {
@Override
public void onAiEditorVideoFail() {
Logs.i(LOGTAG, " 视频编辑失败 ");
mAiScreenReocrdIng = false;
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频编辑失败 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onAiEditorVideoSuc(String aiEditedVideoPath, boolean stayInDouYin) {
Logs.i(LOGTAG, " 视频编辑成功 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 视频编辑成功 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onEditingProgress(int progress) {
Logs.i(LOGTAG, " 视频编辑进度 progress = " + progress);
}
};
检查当前设备是否支持分享
/**
* 是否允许分享
*
* @return true 支持,false 不支持
*/
public boolean LT_DouYin_checkSupDouYinShare()
// 是否允许分享
mLTBase_DouYin_Charging.LT_DouYin_checkSupDouYinShare();
抖音分享:支持视频和图片分享
LGDouYinShareDTO 参数介绍
参数 | 参数说明 | 参数类型 | 是否必选 |
---|---|---|---|
type | 分享类型,LGDouYinShareDTO.Type.VIDEO 视频, LGDouYinShareDTO.Type.PICTURE 图片 | int | 必选 |
pathList | 资源列表,图片支持多张图片,视频只能添加一个 | ArrayList | 必选 |
回调 | 编辑结果回调 | LTBase_DouYin_ShareListener | 必选 |
/**
* 抖音分享接口
*
* @param douYinShareDTO 分享参数
* @param listener 分享回调
*/
public void LT_DouYin_SupDouYinShare(LGDouYinShareDTO douYinShareDTO, LTBase_DouYin_ShareListener listener);
// 抖音分享。
LGDouYinShareDTO mLGDouYinShareDTO = new LGDouYinShareDTO();
mLGDouYinShareDTO.type = LGDouYinShareDTO.Type.VIDEO;
mLGDouYinShareDTO.pathList.add(mRecordFilePath);
mLTBase_DouYin_Charging.LT_DouYin_SupDouYinShare(mLGDouYinShareDTO, mLTBase_DouYin_ShareListener);
接收到的数据为激励视频 播放结果。
接口 | 接口说明 | 参数说明 |
---|---|---|
onShareSuc | 分享成功 | stayInDouYin 分享成功是否留在抖音 |
onShareSaveAlbum | 分享成功后,视频保存路径 | filePathList 视频或者图片保存路径列表 |
onShareFail | 分享失败 |
/**
* 抖音分享回调
*/
private LTBase_DouYin_ShareListener mLTBase_DouYin_ShareListener = new LTBase_DouYin_ShareListener() {
@Override
public void onShareFail() {
Logs.i(LOGTAG, " 分享失败 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 分享失败 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onShareSuc(boolean stayInDouYin) {
Logs.i(LOGTAG, " 分享成功 stayInDouYin = " + stayInDouYin);
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 分享成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onShareSaveAlbum(ArrayList filePathList) {
Logs.i(LOGTAG, " 分享成功后视频保存成功 ");
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, " 分享成功后视频保存成功 ", Toast.LENGTH_SHORT).show();
}
};
发送抖音日志,自定义日志
参数 | 参数说明 |
---|---|
eventName | 事件名,由运营同学分配 |
jsonObject | 事件参数 ,json格式, 由运营同学分配 |
/**
* 发送自定义事件
*
* @param eventName 点位名称
* @param jsonObject 自定义事件数据,可以为null
*/
public void LT_DouYin_setOnEventV3(String eventName, JSONObject jsonObject)
// 发送一条 自定义事件
JSONObject eventJson = new JSONObject();
try {
eventJson.put("sample1", "sample1");
eventJson.put("sample2", "sample2");
} catch (Exception e) {
e.printStackTrace();
}
mLTBase_DouYin_Charging.LT_DouYin_setOnEventV3("diyevent", eventJson);
游戏调用此接口后,缓存抖音激励视频。
如果游戏不自己缓存,播放激励视频的时候会自动加载并缓存视频。
参数 | 参数说明 | 参数类型 | 是否必选 |
---|---|---|---|
广告ID | 抖音分配的广告ID | String | 必选 |
广告展示方式 | 固定值: “1” 竖屏 “2” 横屏 | int | 必选 |
回调 | 视频播放结果回调 | LTBase_Douyin_RewardVideoAdListener | 必选 |
/**
* 缓存抖音激励视频
*
* @param codeid 广告ID
* @param orientation 广告展示方向 LGBaseConfigAdDTO.ORIENTATION_HORIZONTAL 横屏
* LGBaseConfigAdDTO.ORIENTATION_VERTICAL 竖屏
*/
public void LT_Douyin_CacheRewardVideoAd(String codeid, int orientation, LTBase_Douyin_RewardVideoAdListener listener);
/**
* 缓存抖音激励视频
*/
mLTBase_DouYin_Charging.LT_Douyin_CacheRewardVideoAd("945073805", LGBaseConfigAdDTO.ORIENTATION_VERTICAL, mLTBase_Douyin_RewardVideoAdListener);
接收到的数据为激励视频 缓存结果。
接口 | 接口说明 |
---|---|
onError | 视频激励失败 |
onRewardVideoAdLoadSuc | 视频激励成功 |
/**
* 缓存视频回调
*/
private LTBase_Douyin_RewardVideoAdListener mLTBase_Douyin_RewardVideoAdListener
= new LTBase_Douyin_RewardVideoAdListener() {
@Override
public void onError(int code, String message) {
Logs.i(LOGTAG, " RewardVideoAdListener onError code:" + code + " message:" + message);
}
@Override
public void onRewardVideoAdLoadSuc() {
Logs.i(LOGTAG, " RewardVideoAdListener onRewardVideoAdLoadSuc");
}
};
游戏调用此接口后,可以注册 广告下载事件回调。
主要是用于统计玩家点击广告以后,下载广告内app的事件。
参数 | 参数说明 | 参数类型 | 是否必选 |
---|---|---|---|
回调 | 下载回调 | LTBase_DouYin_DownloadListener | 必选 |
/**
* 广告下载事件
*/
public void setDouYin_DownloadListener(LTBase_DouYin_DownloadListener listener);
/**
* 注册广告下载事件回调
*/
mLTBase_DouYin_Charging.setDouYin_DownloadListener(mLTBase_DouYin_DownloadListener);
接收到的数据为下载事件流程。
接口 | 接口说明 |
---|---|
onIdle | 下载准备 |
onDownloadActive | 下载中 |
onDownloadPaused | 下载暂停 |
onDownloadFailed | 下载失败 |
onDownloadFinished | 下载完成 |
onInstalled | 安装完成 |
/**
* 下载事件回调
*/
private LTBase_DouYin_DownloadListener mLTBase_DouYin_DownloadListener = new LTBase_DouYin_DownloadListener() {
@Override
public void onIdle() {
Logs.i(LOGTAG, " 可以下载了");
}
@Override
public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
Logs.i(LOGTAG, " 下载中");
}
@Override
public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 下载暂停 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 下载失败 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onDownloadFinished(long totalBytes, String fileName, String appName) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 下载完成 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onInstalled(String fileName, String appName) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 安装完成 ", Toast.LENGTH_SHORT).show();
}
};
上海中清龙图软件有限公司