更新历史:

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 适用于对接中国区内的广告变现平台,通过简单流程即可同时集成高价值广告平台、统计分析工具等,提升接入效率、减少维护成本。

二、准备工作

  1. 下载 HippoSDK 的 Hippo_SDK.zip 压缩包:

hippo-ad-sdk-cn-unity-1-6-6.unitypackage.zip

【可选】广点通iOS SDK,如果需要接入,接入方法请参见文档下方
hippo-ads-networks-gdt-1.1.zip

  1. 与河马运营人员获取如下配置文件:

hippo-ads-config.json,该json文件包含了广告相关的各种信息,请不要随便修改。且配置与包名是绑定的。

  1. 其中 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/

以后导出两种平台的项目工程,都会引用这份文件。

  1. 实现广告展示
      具体实现方式请参考 Assets/HippoAdSDKDemo/HippoSDKDemo.cs 文件;

四、SDK使用说明:

1、初始化SDK

  1. // 注册广告监听事件
  2. HippoAdSDK.onAdload = new HippoAdSDK.HippoAdLoaded( AdLoaded );
  3. HippoAdSDK.onReward = new HippoAdSDK.HippoRewarded( AdRewarded );
  4. HippoAdSDK.onError = new HippoAdSDK.HippoAdError( AdError );
  5. HippoAdSDK.onClosed = new HippoAdSDK.HippoAdClosed( AdClosed );
  6. HippoAdSDK.onClicked = new HippoAdSDK.HippoAdClicked( AdClicked );
  7. HippoAdSDK.registCallBack();
  8. //(可选)需要服务器校验激励视频广告奖励回调时必须调用,不需要服务器校验时注释;
  9. HippoAdSDK.setUserId("userId");
  10. // (可选)开启服务器校验激励视频广告奖励回调机制,不需要服务器校验时注释;
  11. HippoAdSDK.setShouldVerifyRewarded();
  12. // 初始化sdk,方式1:
  13. // 回调参数:
  14. // isSuccess: 初始化是否成功
  15. // message: 错误提示
  16. HippoAdSDK.init((bool isSuccess,string message) => {
  17. Debug.Log("HippoSdk init callback isSuccess:" + isSuccess+", message:"+message);
  18. // 开始下一步,填充广告
  19. // 如调用HippoAdSDK.initRewardedVideoAd方法 ...
  20. });
  21. // 初始化sdk,方式2:(无异步回调,安卓平台不推荐)
  22. 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。
bu_2.png

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。

bu_3.png

4、注意要点

如果发布上传到Appstore时出现“ITMS-90171”错误:

请检查添加hippo_ad_sdk_cn.framework的方法,请确保是添加在“Linked Frameworks and Libraries”中,而不是“Embeded Binaries”中。

如果广告出现英文字样(如按钮或者跳过按钮都显示为英文):

在Xcode中明确设置语言国家为中国即可:

image.png

发布后被拒,提示“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关闭:

image.png

广点通平台的接入

将下载的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;
image.png

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项目,进行如下配置:

微信图片_20190428163926.png

需要在build.gradle中配置两个地方:

  1. 配置合并方式

    android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
        ...
    }
    ...
    }
    
  2. 添加依赖

    dependencies {
     ...
     implementation 'com.android.support:appcompat-v7:28.0.0'
     ...
    }
    
  3. 修改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();