更新历史:
Version | Author | Date | Description |
---|---|---|---|
v1.0.0 | junewong | 2019-05-29 | 1. 支持激励视频API; |
v1.0.6 | junewong | 2019-05-30 | 1. 增加新的回调事件; 1. 修正一些小问题; |
v1.0.7 | junewong | 2019-06-06 | 1. 调整和新增更详细的事件打点 |
v1.1.0 | junewong | 2019-06-11 | 1. 修正 isLoaded 判断方法; |
v1.2.0 | junewong | 2019-06-18 | 1. iOS开放banner, Interstitial and fullscreen video几种广告类型的API; |
v1.2.1 | junewong | 2019-06-19 | 1. 更新Android的banner默认设置; |
v1.2.2 | junewong | 2019-06-19 | 1. 修正iOS一些小问题; |
v1.2.3 | junewong | 2019-06-28 | 1. 增加SDK初始化回调(推荐使用回调的初始化方法); 1. 配置增加设置channel的参数; |
v1.2.4 | junewong | 2019-06-28 | 1. 修正iOS的填充失败的回调问题; |
v1.2.5 | junewong | 2019-07-08 | 1. iOS升级第三方sdk到2.1.0.1版本; |
v1.2.6 | junewong | 2019-07-22 | 1. Android升级第三方sdk版本; |
v1.2.7 | junewong | 2019-07-31 | 1. 增加广告点击的回调事件; |
v1.2.8 | junewong | 2019-08-09 | 1. 升级深度统计SDK到3.2.1版本; 1. 调整判断广告是否填充完成的规则; |
v1.2.9 | junewong | 2019-08-14 | 1. iOS增加评分以及用户反馈的API; |
v1.3.0 | junewong | 2019-08-15 | 1. Android更新深度统计SDK到3.3.4版本; |
v1.3.1 | junewong | 2019-08-27 | 1. iOS升级第三方sdk到2.4.0.0版本; |
v1.3.3 | junewong | 2019-09-19 | 1. iOS升级第三方sdk到2.4.6.0版本; |
v1.3.4 | junewong | 2019-09-23 | 1. 清除带有过时UIWebView类的类库; |
v1.3.5 | junewong | 2019-10-21 | 1. 修正iOS一些小问题; |
v1.3.6 | junewong | 2019-10-28 | 1、新增支持iOS广点通广告平台(平台sdk需要另外导入); 2、升级第三方广告sdk到2.4.6.7; |
v1.3.7 | junewong | 2019-10-31 | 1、iOS调整banner布局; |
v1.3.8 | ruansen | 2019-10-31 | 1、Android升级第三方广告sdk到2.5.2.6; |
v1.3.9 | junewong | 2019-12-10 | 1、iOS增加完整流程用户反馈功能; |
v1.4.0 | junewong | 2019-12-11 | 1、更新iOS第三方sdk到2.5.1.5(需要添加Accelerate.framework) |
v1.4.1 | junewong | 2019-12-12 | 1、更改激励和全屏视频广告为默认使用个性化模板展现; |
v1.4.2 | junewong | 2019-12-19 | 1、增加少量统计信息 |
v1.4.3 | junewong | 2020-01-04 | 1、iOS升级第三方广告sdk到2.7.5.2; 2、iOS修改isLoad的判定规则; |
v1.4.4 | ruansen | 2020-01-07 | 1、Android增加新的统计平台; |
v1.4.5 | heyouying | 2020-1-09 | 1、 Android新增激励视频广告奖励回调服务器校验功能; 2、 升级注意:广告的回调接口改变; |
v1.4.6 | junewong | 2020-1-16 | 1、iOS修正渲染失败重试的bug; |
v1.4.7 | ruansen | 2020-02-03 | 1、安卓端升级头条广告版本为v2.7.5.2; 2、新增个性化模板信息流广告; 3、升级注意:安卓端依赖配置新增cardview-v7:28.0.0。 |
v1.5.0 | junewong | 2020-02-03 | 1、双端增加ABTest需要的统计组件; |
v1.5.1 | ruansen | 2020-02-06 | 1、安卓端增加开屏广告类型; |
v1.5.2 | junewong | 2020-02-06 | 1、iOS端增加开屏广告类型; 2、升级注意:(iOS的组件目录结构有调整,这部分建议重新导入) |
v1.5.3 | ruansen | 2020-02-11 | 1、安卓端可通过json配置设置banner的高度; 2、升级注意:安卓端依赖配置新增okhttp。 |
v1.5.4 | junewong | 2020-02-11 | 1、iOS增加可切换强制使用本地配置的特性; |
v1.5.5 | junewong | 2020-03-10 | 1、iOS新增信息流广告类型; |
v1.5.6 | ruansen | 2020-03-20 | 1、修复安卓已知bug; 2、安卓支持同时展示多个信息流广告; |
v1.5.8 | junewong | 2020-04-22 | 1、安卓更新远程统计组件到1.1.5; 2、iOS初始化流程小优化; |
v1.5.9 | ruansen | 2020-04-26 | 1、安卓远程统计组件更新; |
v1.6.0 | ruansen | 2020-04-29 | 1、安卓增加统计平台开关以及设置统计计划特性; |
v1.6.1 | junewong | 2020-05-06 | 1、iOS增加统计平台开关以及设置统计计划特性; |
v1.6.2 | ruansen | 2020-05-14 | 1、安卓插屏广告支持模板渲染; |
v1.6.3 | junewong | 2020-07-04 | 1、iOS更新广点通sdk4.11.10,新增全屏广告类型;(注意添加libxml2.tbd库) 2、安卓增加广点通激励视频广告类型; |
v1.6.4 | junewong | 2020-08-18 | 1、升级广点通SDK;当前广点通在Unity2019.3以上存在问题,故独立出来; |
v1.6.5 | ruansen | 2020-09-02 | 1、安卓升级第三方SDK到9.1.3; |
v1.6.6 | junewong | 2020-10-13 | 1、iOS升级远程统计组件; |
一、概述
本 SDK 适用于对接中国区内的广告变现平台,通过简单流程即可同时集成高价值广告平台、统计分析工具等,提升接入效率、减少维护成本。
二、准备工作
- 下载 HippoSDK 的 Hippo_SDK.zip 压缩包:
hippo-ad-sdk-cn-unity-1-6-6.unitypackage.zip
【可选】广点通iOS SDK,如果需要接入,接入方法请参见文档下方:
hippo-ads-networks-gdt-1.1.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 文件。
三、接入步骤
**
1. 导入 HippoSDK 的Unity插件
将下载好的 Hippo_SDK.zip 压缩包内的 hippo_sdk.unitypackage 文件全部导入 Unity 项目中;
2、导入SDK配置文件
将hippo-ads-config.json文件导入到Unity工程的以下目录中:
Assets/StreamingAssets/
以后导出两种平台的项目工程,都会引用这份文件。
- 实现广告展示
具体实现方式请参考 Assets/HippoAdSDKDemo/HippoSDKDemo.cs 文件;
四、SDK使用说明:
1、初始化SDK
// 注册广告监听事件
HippoAdSDK.onAdload = new HippoAdSDK.HippoAdLoaded( AdLoaded );
HippoAdSDK.onReward = new HippoAdSDK.HippoRewarded( AdRewarded );
HippoAdSDK.onError = new HippoAdSDK.HippoAdError( AdError );
HippoAdSDK.onClosed = new HippoAdSDK.HippoAdClosed( AdClosed );
HippoAdSDK.onClicked = new HippoAdSDK.HippoAdClicked( AdClicked );
HippoAdSDK.registCallBack();
//(可选)需要服务器校验激励视频广告奖励回调时必须调用,不需要服务器校验时注释;
HippoAdSDK.setUserId("userId");
// (可选)开启服务器校验激励视频广告奖励回调机制,不需要服务器校验时注释;
HippoAdSDK.setShouldVerifyRewarded();
// 初始化sdk,方式1:
// 回调参数:
// isSuccess: 初始化是否成功
// message: 错误提示
HippoAdSDK.init((bool isSuccess,string message) => {
Debug.Log("HippoSdk init callback isSuccess:" + isSuccess+", message:"+message);
// 开始下一步,填充广告
// 如调用HippoAdSDK.initRewardedVideoAd方法 ...
});
// 初始化sdk,方式2:(无异步回调,安卓平台不推荐)
HippoAdSDK.init();
注意:打Android工程的时候,请注意查看下面的Android工程配置,特别是注意配置上onPause和onResume事件。
2、填充广告
// 创建banner广告
HippoAdSDK.createBannerAd( string adUnitId );
// 加载插屏广告
HippoAdSDK.initInterstitialAd( string adUnitId );
// 加载激励视频广告
HippoAdSDK.initRewardedVideoAd( string adUnitId );
// 加载全屏视频广告
HippoAdSDK.initFullScreenVideoAd( string adUnitId );
// 加载信息流广告
HippoNativeExpressStyle style = new HippoNativeExpressStyle();
style.radius = 20;
HippoAdSDK.initNativeExpressAd( string adUnitId , int width, int height, HippoNativeExpressStyle style );
//加载并展示开屏广告
HippoAdSDK.initAndShowSplashAd( string adUnitId );
注意:填充的广告一旦被展现后,会自动重新填充,无需手动处理;
3、展现广告
// 判断是否有广告填充
HippoAdSDK.IsLoadedAd( string adUnitId );
// 展现banner广告
HippoAdSDK.showBannerAd( string adUnitId );
// 隐藏banner广告
HippoAdSDK.hideBannerAd( string adUnitId );
// 展现插屏广告
HippoAdSDK.showInterstitialAd( string adUnitId );
// 展现全屏视频广告(可跳过的激励视频)
HippoAdSDK.showFullscreenVideoAd( string adUnitId );
// 展现激励视频广告
HippoAdSDK.showVideoAd( string adUnitId );
//设置信息流广告位置
HippoAdSDK.setNativeExpressPosition( string adUnitId, int x, int y);
//展示信息流广告
HippoAdSDK.showNativeExpressAd( string adUnitId );
//隐藏信息流广告
HippoAdSDK.hideNativeExpressAd( string adUnitId );
4、监听回调事件
当广告事件触发时,会回调注册好的事件方法,如:
private void AdLoaded(string adType, string adUnitId)
{
if ( adType == HippoAdSDK.AD_TYPE_BANNER) { // bannenr广告
// ....
} else if ( adType == HippoAdSDK.AD_TYPE_INTEREST ) { // 插屏广告
// ....
} else if ( adType == HippoAdSDK.AD_TYPE_REWARD ) { // 激励视频
// ....
}
}
private void AdRewarded(string adUnitId, string extraJson)
{
// ...
}
private void AdError(string adType, string errorMessage)
{
// ...
}
private void AdClosed(string adType, string adUnitId, string extraJson)
{
// ...
}
private void AdClicked(string adType, string adUnitId)
{
// ...
}
五、可选功能说明:
1、 友盟自定义事件
// customEventName 为自定义事件
// params 为事件属性
HippoAdSDK.sendEvent(string customEventName)
HippoAdSDK.sendEvent(string customEventName, Dictionary<string, string> params);
2、用户反馈功能
弹出一个对话框询问用户是否喜欢游戏,如果喜欢则走评分流程,如果不喜欢则走用户反馈流程;
注意:该功能当前只支持iOS平台;
HippoAdSDK.showRatingsOrFeedbackView();
3、统计平台开关
// 统计平台开关
// plateform: 统计平台,该常量可在HippoSDKBase里面查找相关平台,如:HippoSDKBase.ANALYTICS_PLATFORM_HIPPOANALYTICS。
// isEnable: true为开启,false为关闭。
// 注:如果使用该功能,请在初始化之前调用。
HippoAdSDK.enableAnalyticsPlatform(string platform, bool isEnable);
六、使用问题
1、 线程问题
关于Unity中所有关于Hippo-SDK的回调函数都在非主线程中,如若需要做UI层面的操作需导入如下脚本,具体实现方式请看文档;
UnityMainThreadDispatcher-master.zip
七、工程配置
iOS工程配置
iOS工程运行环境配置
**
- 支持系统 iOS 8.X 及以上;
- SDK编译环境 Xcode 9.4, Base SDK 11.1;
- 支持架构: arm64(正式包建议只保留arm64)
Unity导出iOS工程之后,请检查以下工程配置:
1、网络权限配置
存在 SDK API 已经全部支持HTTPS,但是有时广告主素材存在非HTTPS情况。解决办法:
工程plist文件设置,点击右边的information Property List后边的 “+” 展开
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。
2、检查是否存在以下库,如果没有请添加:
工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,点击“+”,添加下列中缺漏的依赖库:
- StoreKit.framework
- MobileCoreServices.framework
- WebKit.framework
- MediaPlayer.framework
- CoreMedia.framework
- AVFoundation.framework
- CoreLocation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- AdSupport.framework
- CoreMotion.framework
- libresolv.9.tbd
- libc++.tbd
- libz.tbd
- Accelerate.framework
- libxml2.tbd
3、添加“Other Linker Flags”参数:
Build Settings中Other Linker Flags 增加参数-ObjC,SDK同时支持-all_load。
4、注意要点
如果发布上传到Appstore时出现“ITMS-90171”错误:
请检查添加hippo_ad_sdk_cn.framework的方法,请确保是添加在“Linked Frameworks and Libraries”中,而不是“Embeded Binaries”中。
如果广告出现英文字样(如按钮或者跳过按钮都显示为英文):
在Xcode中明确设置语言国家为中国即可:
发布后被拒,提示“Missing Purpose String in Info.plist File -”
只是2019年春季后新策略,使用到的权限需要全部在Info.plist文件中声明(没有最好也是声明一下)。
比如少了NSBluetoothPeripheralUsageDescription,那就在Info.plist上加上NSBluetoothPeripheralUsageDescription一项,value则填写“App需要您的同意,才能访问蓝牙 ”。
其他常用权限也可以参考:https://www.jianshu.com/p/36c9b1081c07
建议使用:
<!-- 相册 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>游戏需要您的同意,才能访问相册</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>游戏需要您的同意,才能保存图片到您的相册</string>
<!-- 相机 -->
<key>NSCameraUsageDescription</key>
<string>游戏需要您的同意,才能访问相机</string>
<!-- 麦克风 -->
<key>NSMicrophoneUsageDescription</key>
<string>游戏需要您的同意,才能访问麦克风</string>
<!-- 位置 -->
<key>NSLocationUsageDescription</key>
<string>游戏需要您的同意,才能访问位置</string>
<!-- 在使用期间访问位置 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>游戏需要您的同意,才能在使用期间访问位置</string>
<!-- 始终访问位置 -->
<key>NSLocationAlwaysUsageDescription</key>
<string>游戏需要您的同意,才能始终访问位置</string>
<!-- 日历 -->
<key>NSCalendarsUsageDescription</key>
<string>游戏需要您的同意,才能访问日历</string>
<!-- 提醒事项 -->
<key>NSRemindersUsageDescription</key>
<string>游戏需要您的同意,才能访问提醒事项</string>
<!-- 蓝牙 -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>游戏需要您的同意,才能访问蓝牙</string>
<!-- 媒体资料库 -->
<key>NSAppleMusicUsageDescription</key>
<string>游戏需要您的同意,才能访问媒体资料库</string>
出现存在某些库不支持bitcode的提示
建议在设置中将bitcode关闭:
广点通平台的接入
将下载的hippo-ads-networks-gdt-xxx.zip解压后,将framework复制到Unity工程中的Assets/Plugins/iOS/libs/libs-ad目录下;
另外,需要跟河马运营确认hippo-ads-config.json已经包含了广点通的配置;
注意,在Unity2019.3版本以后,当前广点通版本在iOS13启动会有bug,解决办法是:
导出Xcode工程之后,需要找到hippo_ads_networks_gdt.framework,如果看到其绑定的target对应UnityFramework,需要手动将其改为绑定游戏的主target;
Android工程配置
1、运行环境配置
AndroidManifest文件需要添加如下代码:
<application
...
android:usesCleartextTraffic="true"
....
</application>
build.gradle需要添加依赖:
allprojects {
repositories {
...
google()
jcenter()
...
}
}
dependencies {
...
implementation 'com.android.support:cardview-v7: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'
...
}
注意: 如若报以下某方法找不到等错误,请直接导出Androin项目,进行如下配置:
需要在build.gradle中配置两个地方:
配置合并方式
android { ... defaultConfig { ... multiDexEnabled true ... } ... }
添加依赖
dependencies { ... implementation 'com.android.support:appcompat-v7:28.0.0' ... }
修改AndroidManifest.xml文件中的launchMode
将android:launchMode修改为”singleTop”,不建议使用默认的singleTask。
<activity
android:name="com.xxx.AppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="sensorPortrait"
android:theme="@style/WelcomeStyle">
深度统计方法
需要在每个Activity相应生命周期方法中调用我们相对应的API,在Activity的onResume()中调用HippoAdSdk.onAppResume(activity),在Activity的onPause()中调用HippoAdSdk.onAppPause(activity);若未使用Android的原生开发,则在进入/退出每一个页面的位置调用相应函数,示例如下:
1、如果选择在Android工程添加:
public class MainActivity extends AppCompatActivity {
…………
@Override
protected void onResume() {
super.onResume();
HippoAdSdk.onAppResume(this);
}
@Override
protected void onPause() {
super.onPause();
HippoAdSdk.onAppPause(this);
}
…………
}
注:自定义Unity生成的主界面Activity,可参考这篇文章:https://docs.unity3d.com/Manual/AndroidUnityPlayerActivity.html
2、如果选择在Unity工程添加,请在进入和退出每个游戏界面的事件里(也就是应用进入前台跟进后台时)分别添加:
// 进入界面
HippoAdSDK.onAppResume();
// 退出界面
HippoAdSDK.onAppPause();