更新历史:
版本 | 开发者 | 更新日期 | 更新内容 |
---|---|---|---|
v1.1.4 | heyy | 2019-07-19 | 1. 升级头条广告版本; 1. Banner类型的广告升级(2019.9.1之前有接入Banner类型的游戏务必升级此SDK); |
v1.1.5 | junewong | 2019-08-15 | 1. 升级深度统计到3.3.4版本; |
v1.1.6 | ruansen | 2019-11-27 | 1.升级头条广告版本为v2.5.2.6 |
v1.2.0 | ruansen | 2020-01-04 | 1.加入新的统计平台 |
v1.2.1 | heyouying | 2020-01-09 | 1.穿山甲激励视频广告增加服务器校验奖励回调; |
v1.2.3 | ruansen | 2020-02-03 | 1.升级头条广告版本为v2.7.5.2; 2.新增个性化模板信息流广告; 3.升级注意:依赖配置新增cardview-v7:28.0.0。 |
v1.2.4 | ruansen | 2020-02-06 | 1.安卓端增加开屏广告类型; |
v1.2.5 | ruansen | 2020-02-12 | 1.新增接口:json配置控制banner高度; 2.升级注意:依赖配置新增okhttp。 |
v1.2.7 | ruansen | 2020-03-20 | 1.修复已知信息流广告bug; 2.支持同时显示多个信息流广告; |
v1.2.8 | ruansen | 2020-04-26 | 1.远程统计组件更新; |
v1.3.0 | ruansen | 2020-05-08 | 1.增加统计平台开关以及设置统计计划特性; 2.统计平台一律只从本地配置中读取。 |
v1.3.1 | ruansen | 2020-05-14 | 1.插屏广告支持模板渲染; |
v1.4.7 | ruansen | 2020-09-02 | 1.安卓增加广点通激励视频广告类型; 2.第三方统计SDK更新到9.1.3; 3.远程统计组件更新; |
一、概述
本 SDK 适用于对接中国区内的广告变现平台,通过简单流程即可同时集成高价值广告平台、统计分析工具等,提升接入效率、减少维护成本。
二、准备工作
- 下载 HippoSDK 的 Hippo_SDK.zip 压缩包:
- 与河马运营人员获取如下配置文件:
hippo-ads-config.json,该json文件包含了广告相关的各种信息,请不要随便修改。
- 其中 Hippo-SDK 中已接入了友盟国内版SDK,若之前已经接过友盟,且有jar包冲突,请删除自己接入的友盟统计中的 umeng-analytics-xxx.jar 和 umeng-common-xxx.jar 文件;Hippo-SDK 中还接入了阿里云移动数据分析SDK,若之前已经接过该SDK,且有jar包冲突,请删除自己接入的阿里云移动数据分析SDK中的 alicloud-android-sdk-beacon-xxx.jar 、 alicloud-android-ut-xxx.jar、alicloud-android-utils-xxx.jar和alicloud-android-utdid-xxx.jar 文件。
三、接入步骤
- 导入HippoSDK的aar包;
将下载的所有aar包导入到Android项目中,并添加依赖;
- 导入SDK配置文件
将hippo-ads-config.json文件导入到Android工程的以下目录中(assets文件夹不存在时请自行创建,json文件名称请不要随意修改):
src/main/assets/hippo-ads-config.json
- AndroidManifest文件需要添加如下代码:
<application
...
android:usesCleartextTraffic="true"
....
</application>
- 配置应用的build.gradle,添加必要的依赖(请根据实际版本号修改):
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'
//准备要支持安卓手机5.x以下的,可以用okhttp:3.12.8。
implementation 'com.squareup.okhttp3:okhttp:3.12.8'
//准备要支持是5.x以上的建议okhttp:4.3.1。
implementation 'com.squareup.okhttp3:okhttp:4.3.1'
// 广告相关依赖
implementation(name: 'hippo-ad-sdk-v1.2.1', ext: 'aar')
implementation(name: 'bdtracker-3.3.4-alpha.1-pangolin', ext: 'aar')
implementation(name: 'open_ad_sdk-v2.1.0.3', ext: 'aar')
implementation(name: 'android-gif-drawable-1.2.6', ext: 'aar')
implementation(name: 'GameSdk-v102', ext: 'aar')
implementation(name: 'aweme-open-sdk', ext: 'aar')
implementation(name: 'alicloud-android-man-1.2.4',ext: 'aar')
implementation(name: 'hippo-remote-analytics-v1.0.0',ext: 'aar')
implementation(name: 'hippo-unique-id-v1.0',ext: 'aar')
//友盟统计(如果找不到友盟统计的相关类,可以按照以下方式依赖)
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs/umeng-sdk')
//implementation(name: 'hippo-recorder-sdk-v1.0.8', ext: 'aar') // 录屏功能sdk(可选)
//implementation(name: 'xiaomi-sdk-v1.0', ext: 'aar') // 小米广告sdk(可选)
}
四、SDK使用说明
Hippo-Ad-SDK
1. 初始化SDK
// (可选)需要服务器校验激励视频广告奖励回调时必须调用,不需要服务器校验时注释;
HippoAdSdk.setUserId("123");
// (可选)开启服务器校验激励视频广告奖励回调机制,不需要服务器校验时注释;
HippoAdSdk.setShouldVerifyRewarded();
// 使用本地广告配置,需要服务器下发广告配置时注释;
//HippoAdSdk.setJsonConfigFromLocal();
// 打开调试日志,上线时注释
HippoAdSdk.openDebugLog();
// 初始化广告
HippoAdSdk.init(this, new IHippoSDKInitListener() {
@Override
public void onFailure(int i, String s) {
Log.d("hippo_sdk", "HippiSDK 初始化失败:errorCode=" + i + ", errorMessage:" + s);
}
@Override
public void onSuccess() {
Log.d("hippo_sdk", "HippiSDK 初始化成功");
}
});
2. 设置广告的监听事件
HippoAdSdk.setAdsListener(new HippoAdsListener());
public class HippoAdsListener implements IAdsListener {
@Override
public void hippoAdsLoaded(String hippoAdsId, String adsType) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 加载成功");
}
@Override
public void hippoAdsShown(String hippoAdsId, String adsType) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 展示成功");
}
@Override
public void hippoAdsClicked(String hippoAdsId, String adsType) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 点击成功");
}
@Override
public void hippoAdsClosed(String hippoAdsId, String adsType, String extraJson) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 关闭成功");
}
@Override
public void hippoAdsVideoComplete(String hippoAdsId, String adsType, String extraJson) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 奖励");
}
@Override
public void hippoAdsError(String hippoAdsId, String adsType, int code, String message) {
Log.d("hippo_sdk", "MainActivity adsType:" + adsType + " 加载失败 errCode:" + code + ", message:" + message);
}
}
3. 填充广告
// 加载激励视频广告
HippoAdSdk.loadRewardVideoAds(string adUnitId);
// 加载全屏视频广告
HippoAdSdk.loadFullScreenVideoAds(string adUnitId);
// 多态加载横幅广告
// 第一种方法:json配置控制banner高度
HippoAdSdk.loadBannerAds(String hippoAdsId);
// 第二种方法:横幅广告可支持的多种尺寸比例:600*300,600*400,600*500,600*260,600*90,600*150,640*100,690*388
HippoAdSdk.loadBannerAds(String hippoAdsId, int width, int height);
// 加载插页广告
HippoAdSdk.loadInterstitialAds(String hippoAdsId);
//加载信息流广告
NativeExpressStyle style = new NativeExpressStyle();
style.setRadius(20);
HippoAdSdk.loadNativeExpressAd(String hippoAdsId, int width, int height, NativeExpressStyle style);
//加载并展示开屏广告
HippoAdSdk.loadAndShowSplashAd(String hippoAdsId);
注意:使用时只需要首次加载一次,填充的广告一旦被展示后,会自动重新填充,无需多次调用加载的方法;
4. 展示广告
// 在展示前最好先判断是否有广告填充
HippoAdSDK.isLoaded( string adUnitId );
// 展示激励视频广告
HippoAdSdk.showRewardVideoAds(string adUnitId, Context context);
// 展示全屏视频广告
HippoAdSdk.showFullScreenVideoAds(string adUnitId, Context context);
// 展示横幅广告
// 目前只支持顶部(BannerPosition.TOP)、底部(BannerPosition.BOTTOM)展示
HippoAdSdk.showBannerAds(Activity context, String adUnitId, BannerPosition position);
// 展示插页广告
HippoAdSdk.showInterstitialAds(String hippoAdsId, Activity context);
//设置信息流广告位置
HippoAdSdk.setNativeExpressPosition(String hippoAdsId, int x, int y);
//展示信息流广告
HippoAdSdk.showNativeExpressAd(String hippoAdsId, Activity context);
//隐藏信息流广告
HippoAdSdk.hideNativeExpressAd();
5. 数据统计(必须)
需要在每个Activity相应生命周期方法中调用我们相对应的API,在Activity的onResume()中调用 HippoAdSdk.onAppResume(activity),在Activity的onPause()中调用HippoAdSdk.onAppPause(activity);若未使 用Android的原生开发,则在进入/退出每一个页面的位置调用相应函数,示例如下:
public class MainActivity extends AppCompatActivity {
…………
@Override
protected void onResume() {
super.onResume();
HippoAdSdk.onAppResume(this);
}
@Override
protected void onPause() {
super.onPause();
HippoAdSdk.onAppPause(this);
}
…………
}
6. 自定义事件
本SDK统计的自定义事件,调用方法如下:
/**
* context:上下文
* event:事件名称
* map:包含上报的事件属性
*/
HippoReport.sendCustomEvent(Context context, String event, Map<String, String> map)
7. 统计平台开关(可选)
// 统计平台开关
// plateform: 统计平台,该常量可在ConstantConfig里面查找相关平台,如:ConstantConfig.ANALYTICS_PLATFORM_UMENG。
// isEnable: true为开启,false为关闭。
// 注:如果使用该功能,请在初始化之前调用。
HippoAdSdk.enableAnalyticsPlatform(String platform, boolean isEnable);
Hippo-Recorder-SDK(可选)
1. 初始化录屏SDK
HippoAdSdk.initRecorder(this, new IRecordListener() {
@Override
public void onEveryplayShown() {
}
@Override
public void onEveryplayHidden() {
}
@Override
public void onEveryplayReadyForRecording(int resultCode) {
// 当resultCode为1时表示可以进行录制
}
@Override
public void onEveryplayRecordingStarted() {
// 开始录屏
}
@Override
public void onEveryplayRecordingStopped() {
// 停止录屏
}
@Override
public void onEveryplayThumbnailReadyAtTextureId(int i, int i1) {
}
@Override
public void onFileReady(String videoPath) {
// 录屏停止时返回录制的视频路径
}
});
2. 开始和停止录屏
// 开始录屏
HippoAdSdk.startRecorder();
// 停止录屏
HippoAdSdk.stopRecorder();
Hippo-Share-SDK(可选)
1. 调用方法
// 检查是否支持某平台分享
HippoAdSdk.isSupported(Context context, SharePlatform platform);
// 设置分享内容
ShareContentInfo shareContentInfo = new ShareContentInfo();
// 设置分享视频文件的路径
shareContentInfo.setFilePath(mRecordVideoPath);
/**
* SharePlatform: 分享的平台
* ShareType: 分享的内容类型
* ShareContentInfo: 分享内容
* shareHandler: 与回调相关(需要setBackClassName设置分享回来的界面的Activity(包名下)的全路径,setListener设置回调)
*/
HippoAdSdk.share(Activity activity, SharePlatform platform, ShareType type, ShareContentInfo shareContentInfo, HPShareHandler shareHandler);
五、混淆
本SDK未设置混淆,如若接入的项目中开启了混淆,请将如下代码配置到混淆文件中:
# hippo-sdk(必选)
-keep class com.hippo.ads.**{*;}
-keep class com.hippo.ads.**
-dontwarn com.hippo.ads.**
-keeppackagenames com.hippo.ads.**
# jrtt-sdk(必选)
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.androidquery.** {*;}
-keep class com.androidquery.**
-dontwarn com.androidquery.**
-keeppackagenames com.androidquery.**
-keep class com.ss.android.**{*;}
-keep class com.ss.android.**
-dontwarn com.ss.android.**
-keeppackagenames com.ss.android.**
# umeng-sdk(必选)
-keep class com.umeng.** {*;}
-keep class com.uc.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.zui.** {*;}
-keep class com.miui.** {*;}
-keep class com.heytap.** {*;}
-keep class a.** {*;}
-keep class com.vivo.** {*;}
# recorder-sdk(接入必选)
-keep class com.everyplay.Everyplay.**{*;}
-keep class com.everyplay.Everyplay.**
-dontwarn com.everyplay.Everyplay.**
-keeppackagenames com.everyplay.Everyplay.**
六、问题
1. 如若报以下某方法找不到等错误,请进行如下配置:
需要在build.gradle中配置两个地方:
配置合并方式
android { ... defaultConfig { ... multiDexEnabled true ... } ... }
添加依赖
implementation 'com.android.support:appcompat-v7:28.0.0'