简体 EN 繁体

你正在使用老旧的 TGSDK 广告 SDK 版本!!!

目录

1、导入 TGSDK 到工程

将 TGSDK 文件复制到项目

首先从 Yomob 官方下载页 下载最新的 TGSDK 稳定版本。解压后可以看到目录结构如图所示

TGSDK for Android 目录结构

使用 Android Studio 的 Gradle 构建

如果使用 Android Studio 或 Gradle 构建你的 Android 项目,那么只需要将 TGSDK 目录中的所有 aar 文件导入你的项目即可。

使用 Eclipse 的 Ant 构建

如果使用 Eclipse 或 Ant 构建你的 Android 项目,那么你需要将 TGSDK 目录中子目录 for_eclipse 中的全部文件按照相应目录导入到你的项目中。

加入需要的依赖库

部分广告商的 SDK 运行依赖一些公共的第三方库,所以需要手动将这些依赖的库文件导入到你的项目中,这些库文件在 dependencies 文件夹下。

请务必将依赖的第三方库全部导入你的项目,否则在程序运行时可能因为缺少某些必要的支持而导致崩溃

所依赖的第三方库文件全部为 jar 形式,如果你使用 Android Studio 构建你的项目并且希望通过 Gradle 来管理你的依赖而不使用 jar 包的形式,那么你也可以通过下述方式来将所依赖的第三方库导入你的项目。

首先在你项目的主工程 build.gradle 文件中 repositories 节点加入 jcenter

buildscript {
    repositories {
        mavenCentral();
        // ******** 加入 jcenter ********
        jcenter()
        // ******** 加入 google ********
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
    }
}

allprojects {
    repositories {
        // ******** 加入 jcenter ********
        jcenter()
        // ******** 加入 google ********
        google()
    }
}

然后在你的 Module 模块的 build.gradle 文件中加入相应第三方库的依赖配置

dependencies {
    compile 'com.squareup.okio:okio:1.14.0'
    compile 'com.squareup.okhttp3:okhttp:3.10.0'
    // require GooglePlayService
    compile 'com.google.android.gms:play-services-ads:15.0.1'
    compile 'com.google.android.gms:play-services-ads-base:15.0.1'
    compile 'com.google.android.gms:play-services-ads-identifier:15.0.1'
    compile 'com.google.android.gms:play-services-location:15.0.1'
    compile 'com.google.android.gms:play-services-basement:15.0.1'
    compile 'com.google.android.gms:play-services-gass:15.0.1'
    // by Facebook
    compile 'com.android.support:recyclerview-v7:25.3.1'
    // by Vungle
    compile 'com.tonyodev.fetch:fetch:1.1.5'
    compile 'com.squareup.okhttp3:logging-interceptor:3.7.0'
    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    compile 'com.google.code.gson:gson:2.6'
    //by bytedance
    compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.6'
    // by Oneway
    compile 'com.liulishuo.okdownload:okdownload:1.0.5'
    compile 'com.liulishuo.okdownload:sqlite:1.0.5'
    compile 'com.liulishuo.okdownload:okhttp:1.0.5'
}

加入 Android Support V4 支持库

【注意】Android Support v4 支持库为强制依赖,请务必将其引入你的项目并且使用 26 版本以上的支持库(支持库向下兼容请勿担心),否则可能会导致程序崩溃!

部分广告的显示需要 android.support.v4 库的支持,所以请将其引入到你的项目中。如果你的项目使用 Android Studio 则可以编辑项目的 build.gradle 文件加入

dependencies {
    compile 'com.android.support:support-v4:24.+'
}

如果你的项目使用 Eclipse 或者是 Unity 项目,我们在 1.6.2(含)版本以上的 SDK 中默认放入了 v4 支持库。如果你使用的是 1.6.2 以前的版本,则需要手动将支持库加入你的项目。你可以在 Android SDK 目录中找到该库的 aar 文件手动添加。具体的库文件地址

Your-Android-SDK-Path/extras/android/m2repository/com/android/support/support-v4

【注意】Android Support v4 支持库为强制依赖,请务必将其引入你的项目并且使用 24 版本以上的支持库(支持库向下兼容请勿担心),否则可能会导致程序崩溃!

加入 Google Play Services 支持

如果你的产品最终要发布到 Google Play 应用商店,那么你需要在你的项目中加入 Google Play Services 支持,因为我们的广告会依赖这个服务。

只有发布到 GooglePlay 商店的应用才需要 Google Play Services,如果你的产品只在国内安卓渠道发行,那么不需要接入 Google Play Services

具体如何将 Google Play Services 引入你的项目,请参看 Google 的官方开发文档。需要注意的是:

不需要将全部 Google Play Services 的库导入你的项目中,我们只依赖

com.google.android.gms:play-services-ads-15.0.1

com.google.android.gms:play-services-ads-base-15.0.1

com.google.android.gms:play-services-ads-identifier-15.0.1
com.google.android.gms:play-services-ads-lite-15.0.1
com.google.android.gms:play-services-location-15.0.1
com.google.android.gms:play-services-basement-15.0.1

关于 Android 7.0权限

  • 1.接入sdk打包之前必须将 uses_provider.txt 文件中的内容复制粘贴到 AndroidManifest.xml 中的<application>节点内

    Eclipse开发者需要将文件中的 `${applicationId}` 替换成 app 的包名
    
  • 2.混淆配置文件中加上:

-keep class android.support.v4.*{ ;}

避免support-V4包中的FileProvider代码被混淆。

修改 AndroidManifest.xml 文件

Eclipse开发者使用SDK需要将 android_manifest.txt 文件中的内容复制粘贴到你项目使用的 AndroidManifest.xml 文件的 <application></application> 节点之间。

所有的开发者都需要将 uses_permissions.txt 文件中的内容复制粘贴到你项目使用的 AndroidManifest.xml 文件中,且 <uses-permission> 节点位置应于 <application> 节点同级。

<application>
    <activity>
        ......
    </activity>
</application>

<uses-permission android:name="xxxx" />
<uses-permission android:name="xxxx" />
<uses-permission android:name="xxxx" />

如果使用 Proguard

如果你的项目使用了 proguard,你需要将 proguard-project.txt 文件中的内容复制粘贴到你项目使用的 proguard 配置文件中。

Cocos2d-x 支持

如果你的产品使用了 Cocos2d-x 引擎开发,我们还提供方便开发者在 Cocos2d-x 项目中使用 TGSDK 的封装以及 JavaScript 和 Lua 绑定支持,具体请移步这里

2、初始化 TGSDK

Yomob官方网站 为产品注册好账户后,你将会从网站得到你的产品对应的 AppID 使用这个参数来初始化 TGSDK

不要忘记在 Activity 的生命周期回调方法中调用 TGSDK 的同名方法

如果你的产品在国内发型,并需要在多个应用渠道进行发型,初始化的方法略有不同,具体请参见《支持多渠道分包》

class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TGSDK.initialize(
            this,
            "Your application ID from yomob",
            null);
    }

    @Override
    protected void onStart() {
        super.onStart();
        TGSDK.onStart(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        TGSDK.onStop(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        TGSDK.onPause(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        TGSDK.onResume(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        TGSDK.onDestroy(this);
    }

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent data) {
        super.onActivityResult(reqCode, resCode, data);
        TGSDK.onActivityResult(this, reqCode, resCode, data);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        TGSDK.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
    }

}

3、预加载广告资源

为了有充裕的时间来加载广告资源,建议尽早调用预加载 API 来开始广告的加载工作。甚至你可以在初始化 TGSDK 的同时就开始调用广告预加载 API 来预加载广告。  

TGSDK.preloadAd(activity);

注意!!!你的应用使用的包名( package name )必须和你在 Yomob 网站上注册的一致,否则可能无法正常加载广告资源,无法正常显示广告

4、播放广告

通过 Yomob 官方网站 为注册的应用建立广告场景,获得相应的广告场景 ID 后,通过场景 ID 参数来判断广告是否已经准备好,如果对应场景的广告已经准备好,则可以调用播放 API 来播放对应场景的广告。

if (TGSDK.couldShowAd("Your scene ID from yomob")) {
    TGSDK.showAd(activity, "Your scene ID from yomob");
}

5、Banner类型广告的播放

针对Banner广告的特殊性,需要提前设置Banner广告的类型以及位置:

TGSDK.setBannerConfig(String scene, TGBannerType type, 
                      int x, int y, 
                      int width, int height, 
                      int interval);

参数解释:

  • scene Banner 广告对应注册的广告场景 ID

  • type Banner 广告尺寸类型, 其中 TGBannerType 分为三种类型:

Banner类型 Banner尺寸
TGBannerNormal 320*50
TGBannerLarge 320*90
TGBannerMediumRectangle 300*250
  • x、y Banner 放置的位置对应的 X 坐标和 Y 坐标,单位:px

  • width、height Banner 广告预留展示位置的宽高,单位:px

  • interval Banner 广告轮播切换广告内容的间隔时间,单位:秒

坐标以屏幕左上角为零点,interval为轮播时间,以秒为单位,建议在30-120范围内。显示Banner广告:

if (TGSDK.couldShowAd("Your scene ID from yomob")) {
    TGSDK.showAd(activity, "Your scene ID from yomob");
}

需要时还可以关闭Banner广告:

TGSDK.closeBanner(Activity activity, "Your scene ID from yomob")

[注意] 当不需要展示 Banner 广告或者展示 Banner 广告的视图被关闭销毁时,请一定调用 TGSDK.closeBanner(activity, scene) 方法手动关闭 Banner 广告,否则会影响下一次的 Banner 广告正常展示。

6、高级用法

开启 Debug 模式

开启 debug 模式后可以看到更多 Log 输出,方便定位遇到的问题。但需要注意

在生产环境请勿使用 Debug 模式,另外,如果需要启动 Debug 模式,请在调用初始化 API 前设置 Debug 模式的开启

TGSDK.setDebugModel(true);

设置广告预加载事件监听

你可以通过设置一个 listener 来监控广告资源的加载情况。

TGSDK.preloadAd(new ITGPreloadListener() {

    @Override
    public void onPreloadSuccess(String result) {
        // 广告配置获取成功
    }

    @Override
    public void onPreloadFailed(String scene, String error) {
        // 广告配置获取失败
    }

    @Override
   public void onAwardVideoLoaded(String result) {
       //奖励视频已就绪
   }

   @Override
   public void onInterstitialLoaded(String result) {
       //静态插屏已就绪
   }

   @Override
   public void onInterstitialVideoLoaded(String result) {
       //插屏视频已就绪
   }

});

【注意】onPreloadSuccess 只表示成功的获取了广告配置数据,并不代表广告本身加载完成,请不要根据此回调作为判断是否可以播放广告的依据

设置广告播放行为事件监听

在广告播放过程中可以通过一个 listener 来监控广告播放过程中产生的一系列事件。


TGSDK.setADListener(new ITGADListener() {

   @Override
   public void onShowSuccess(String scene, String result) {
        //广告播放成功(场景id, 广告商名称)
   }

   @Override
   public void onShowFailed(String scene, String result, String error) {
        //广告播放失败(场景id, 广告商名称)
    }

    @Override
    public void onADClick(String scene, String result) {
        //广告点击(场景id, 广告商名称)
    }

    @Override
    public void onADClose(String scene, String result, boolean couldReward) {
        //广告关闭(场景id, 广告商名称, 奖励视频是否可以获取奖励)
    }


});

【注意】onADComplete 事件只代表视频广告的视频部分播放结束,并不代表整体广告行为结束,请不要使用该事件作为广告结束的依据,广告结束应使用 onADClose 事件

【注意】Banner广告 在onShowFailed 回调后说明 Banner 广告加载失败,广告没有正常显示,需要手动调用 TGSDK.closeBanner 关闭当前展示的 Banner,然后可以再次尝试调用 TGSDK.showAd 重新展示 Banner 广告。

广告播放测试工具

此功能只在 TGSDK 1.6.5(含)以上版本中提供,建议升级您的 TGSDK 以获得更好的使用体验

请不要在生产环境使用此功能,此功能仅供测试

在测试阶段,你可以使用广告播放测试工具 API 来替代正常的广告播放 API,这样更方便你整体检测广告的加载情况和广告的运行情况

使用广告播放测试工具接口

TGSDK.showTestView(activity, "Your scene id from Yomob");

来替代广告播放接口

TGSDK.showAd(activity, "Your scene id from Yomob");

将会弹出如下图所示的 UI 界面,从中你可以检查广告插件的运行情况并通过点击准备好播放的广告插件来播放指定广告商的广告。

TGSDK_showTestView

付费用户追踪

此功能只在 TGSDK 1.7.0(含)以上版本中提供,建议升级您的 TGSDK 以获得更好的使用体验

Yomob在为您提供广告变现优化服务的同时,也提供内付费(IAP)和广告变现的联合优化服务,以增加您应用的总收入。为此,您需要接入付费相关的API,向我们发送用户付费行为数据,我们会提供如下相应优化功能:

  • 每日付费、人均付费、人均广告 + 付费总收入等数据统计。

  • 广告观看与付费行为的交叉分析,分析付费/非付费用户在广告观看行为上的差异。

  • 智能优化算法对于付费/非付费用户给予更为精准的广告推送,提升eCPM。

  • 可以针对付费行为进行个性化广告策略配置,如对付费用户减少广告展示(提升付费潜力)、对非付费用户增加广告展示,进而提升总收入。

付费用户追踪接口的具体形式为:

TGSDK.tagPayingUser(TGPayingUser user,
                    float        currency,
                    float        currentAmount,
                    float        totalAmount);

参数说明:

  • user 用于标识用户的付费等级,目前可用的付费等级有:TGNonPayingUser(非付费用户)、TGSmallPaymentUser(小额付费用户)、TGMediumPaymentUser(中等额度付费用户)、TGLargePaymentUser(大额付费用户),具体额度等级用户可根据自身产品决定

  • currency 用户所在地区付费使用的货币标识,请遵循ISO 4217 标准

  • currentAmount 当前支付数额

  • totalAmount 用户累计支付总数额

调用建议:

每当用户成功完成一笔支付交易时通过该接口上报用户交易行为,如果不方便统计用户累计支付总额度的,用户累计支付总额度可以传 0

上报用户观看广告行为

如果开发者想了解广告场景对于用户的吸引力,可以通过 API 主动上报一些关于用户观看广告行为的数据。上报后,开发者在 Dashboard 相关页面可以查看并分析“场景展示 - 点击观看”的转化率情况,有助于开发者优化场景设计,以增加广告播放量进而增加总收入。

上报广告展示行为

TGSDK iOS 上报广告展示行为

如图所示,当用户通过产品 UI 明确意识到产品即将发生广告播放的行为,或是产品通过 UI 展现了让用户选择是否播放广告的控件,例如图示的产品展示了广告播放按钮让用户选择是否通过播放广告来获得收益时,请上报告知 TGSDK 这种行为

TGSDK.showAdScene("Your scene ID from yomob");

上报用户拒绝观看广告行为

TGSDK iOS 拒绝观看广告的行为

如图所示,当用户在明确意识到接下来要发生的广告播放行为的情况下,明确选择拒绝或放弃了这次广告播放,例如,当用户在图示的产品中明确看到了通过观看广告获得收益的播放按钮 UI,但是还是明确选择了 Give Up 放弃,那么请上报这个行为告知 TGSDK

TGSDK.reportAdRejected("Your scene ID from yomob");

支持国内安卓多渠道分包

由于国内安卓市场的特殊性,你的产品如果在国内发行的话可能需要发布到多个不同的应用商店,这时你在初始化 TGSDK 时需要附带应用所发行的应用商店的渠道标记,即 ChannelId,渠道标记请参看国内安卓渠道表

class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TGSDK.initialize(
            this,
            "Your application ID from yomob",
            "Your channel ID of App Store",
            null);
    }

    @Override
    protected void onStart() {
        super.onStart();
        TGSDK.onStart(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        TGSDK.onStop(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        TGSDK.onPause(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        TGSDK.onResume(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        TGSDK.onDestroy(this);
    }

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent data) {
        super.onActivityResult(reqCode, resCode, data);
        TGSDK.onActivityResult(this, reqCode, resCode, data);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        TGSDK.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
    }

}

当然,为了方便大家多渠道打包你的安卓应用,我们也提供通过从 AndroidManifest.xml 读取 AppId 和 ChannelId 来初始化 TGSDK,你需要做的是在你项目中的 AndroidManifest.xml 文件中增加两个项目

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.soulgame.tgsdksampleapp.android">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- 用于初始化 TGSDK -->
        <meta-data android:name="TGSDK_APPID" android:value="Your application id from Yomob" />
        <meta-data android:name="TGSDK_CHANNELID" android:value="Your channel id of app store" />

        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

AndroidManifest.xml 中配置好 AppId 和 ChannelId 后,在你的代码里初始化 TGSDK 的时候你就无需再传这两个参数了。

class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TGSDK.initialize(
            this,
            null);
    }

    @Override
    protected void onStart() {
        super.onStart();
        TGSDK.onStart(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        TGSDK.onStop(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        TGSDK.onPause(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        TGSDK.onResume(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        TGSDK.onDestroy(this);
    }

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent data) {
        super.onActivityResult(reqCode, resCode, data);
        TGSDK.onActivityResult(this, reqCode, resCode, data);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        TGSDK.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
    }

}

国内安卓渠道表

渠道ID中文名称
10010360手机助手
10040腾讯应用宝
10009小米应用商店
10041百度手机助手
10029华为应用市场
10042安卓市场
10024步步高应用商店
10035谷歌
10023可可软件商店
10037豌豆荚
10017安智市场
10043魅族应用商店
1000491助手
10034中国联通沃商店
10012联想乐商店
10026宇龙酷派应用商店
10028搜狗手机助手
10044金立应用商店
10032 中国电信天翼空间
10033中国移动
10001快用应用商店
10003 PP手机助手
10002 同步推应用商店
10005 iToos
10008易玩应用商店
10011拇指玩应用商店
10013金山应用商店
10015海马应用商店
10016 当乐应用商店
10018UC浏览器应用商店
10030优酷应用商店
10038卓易市场
10045手机qq
10046微信游戏
10047腾讯精品游戏
100484399游戏
10049乐视游戏
10050天天游戏
10021应用汇
10051新浪游戏
10052网易
10053Taptap
10054酷安
10055虫虫助手
10056朋友玩