2 Star 6 Fork 0

jiguang-official / ADJgSdk-Android

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README

ADJgSdk Android Sdk——接入文档 V3.9.0.01311

目录

[TOC]

1. 概述

1.1 概述

尊敬的开发者朋友,欢迎您使用ADJg广告聚合SDK。通过本文档,您可以快速完成多平台广告SDK的集成。

注意:本SDK仅支持中国大陆地区;如需发布到Google Play,请勿引入本SDK及相关依赖文件。

1.2 ADJg广告聚合SDK 组成结构

ADJg广告聚合SDK主要由ADJg核心SDK(简称ADJgSdk)和一个或多个三方平台适配器SDK(简称AdapterSdk)组成,开发者可以自由的在后台配置中选择需要接入的三方广告平台,然后导入所对应的AdapterSdk,其中天目平台的AdapterSdk是必须导入的

1.3 三方广告平台名称概述

Name 平台名称 平台别称
jgads 极光Ads 极光Ads
tianmu 天目 天目
gdt 优量汇 优量汇
toutiao 头条 穿山甲
baidu 百度 百青藤
ksad 快手 快手
mintegral Mintegral(汇量) Mobvsita
beizi 倍孜 倍孜
octopus 章鱼 章鱼

1.4 ADJg必添包容量

Name 大小 版本号 MD5
ADJg基础包 0.30M V3.9.0.01311 60e13204fb9e1ef4dd5c4165da54e5e9
OAID 1.10M
OAID适配器 0.03M 1.0.25.12122 2baa2506afcc7077a1ecd909ef625a52

1.5 三方广告平台适配器+三方广告sdk总容量

Name 容量 版本号 MD5
jgads 1.50M v2.2.0.03065 bf1e5e5679e3b9cfc036a3edf3bd560a
tianmu 1.80M v2.2.0.03066 c801edbd5f4e33828bfe177191444988
gdt 1.94M v4.562.1432.01261 8a04d98740da3ee484b2e0467106d6f1
toutiao 7.03M v5.9.0.8.02041 2d679461e7b56102cbfd4dde76994559
baidu 1.74M v9.332.02042 245534d5c2101618996c34805aefe853
ksad 4.25M v3.3.57.02191 6ff1a49ac492b3362fc3e9a3f9befec4
mintegral 2.80M v16.5.41.11221 6eb45c3f1b910855828727f74b1d2818
beizi 2.01M v4.90.2.55.08171 62a6a16943aba39c542456f83af5db0b
octopus 1.06M v1.5.9.13.03281 cc5619e98e8892747bb2883cef5efd3c

2. 支持的广告类型

2.1 普通广告

类型 简介 适用场景
开屏广告 开屏广告以APP启动作为曝光时机的模板广告,需要将开屏广告视图添加到承载的广告容器中,提供5s可感知广告展示 APP启动界面常会使用开屏广告
Banner广告 Banner广告是横向贯穿整个可视页面的模板广告,需要将Banner广告视图添加到承载的广告容器中 任意界面的固定位置,不建议放在RecyclerView、List这种滚动布局中当item
信息流广告 信息流广告集合原生自渲染广告和模板广告两种,可以通过后台配置和SDK相关方法判断进行不同的渲染,以满足不同的样式需求 信息流列表,轮播控件,固定位置都是较为适合
激励视频广告 将短视频融入到APP场景当中,用户观看短视频广告后可以给予一些应用内奖励 常出现在游戏的复活、任务等位置,或者网服类APP的一些增值服务场景
插屏广告 插屏广告是移动广告的一种常见形式,在应用流程中弹出,当应用展示插屏广告时,用户可以选择点击广告,访问其目标网址,也可以将其关闭并返回应用 在应用执行流程的自然停顿点,适合投放这类广告

2.2 倍孜广告接入注意

由于引入的倍孜 sdk 支持的最小版本与 app 支持的最小版本可能不一致,需要在 AndroidManifest 文件中添加如下代码:

<uses-sdk tools:overrideLibrary="com.beizi.ad,com.beizi.fusion"/>

3. Demo及SDK下载链接

请参考文档

4. SDK版本说明

4.1 ADJgSdk版本号说明

版本号格式为3.0.0.xxxxn,其中xxxx代表日期,最后一位n为版本扩展号;

4.2 AdapterSdk版本号说明

版本号格式为 y.y.xxxxn,y.y代表三方SDK版本号(可能两位、也可能三位、四位...),其中xxxx代表日期,最后一位n为版本扩展号;

4.3 AdapterSdk和ADJgSdk版本对应说明

AdapterSdk会指定支持的ADJgSdk版本,如果导入的AdapterSdk和ADJgSdk版本不对应会抛出异常提醒开发者使用相对应的版本

5. SDK接入流程

5.1 添加SDK到工程中

接入环境:Android Studio

5.1.1 添加仓库地址

首先需要在项目的build.gradle文件中引入如下配置:

allprojects {
    repositories {
        ...
        google()
        jcenter()
        mavenCentral()
        // Mintegral(汇量)渠道maven地址
        maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
    }
}

5.1.2 添加ADJgSdk和需要的AdapterSdk

将广告所需要的依赖集成进去,AdapterSdk可根据接入平台情况进行选择接入。

dependencies {
    // support支持库,如果是AndroidX请使用对应的支持库
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:design:28.0.0'

    // ADJg主SDK ,必须的
    implementation "cn.jiguang.sdk.ad:core:3.9.0.01311"

    // OAID1.0.25版本适配器不支持其它版本,ADJgSdk获取oaid使用
    implementation "cn.jiguang.sdk.ad:oaid:1.0.25.12122"
    // OAID库1.0.25
    implementation(name: 'oaid_sdk_1.0.25', ext: 'aar')

    // 极光Ads,必须的
    implementation "cn.jiguang.sdk.ad.adapter:jgads:2.2.0.03065"

    // 天目,必须的
    implementation "cn.jiguang.sdk.ad.adapter:tianmu:2.2.0.03066"

    // 优量汇AdapterSdk,可选的
    implementation "cn.jiguang.sdk.ad.adapter:gdt:4.562.1432.01261"

    // 头条AdapterSdk,可选的
    implementation "cn.jiguang.sdk.ad.adapter:toutiao:5.9.0.8.02041"

    // 百度增强版AdapterSdk,可选的
    implementation "cn.jiguang.sdk.ad.adapter:baidu-enhanced:9.332.02042"

    // 快手AdapterSdk,可选的
    implementation "cn.jiguang.sdk.ad.adapter:ksadbase:3.3.57.02191"

    // Mintegral(汇量) AdapterSdk,可选的
    implementation "cn.jiguang.sdk.ad.adapter:mintegral:16.5.41.11221"

    //倍孜
    implementation 'cn.jiguang.sdk.ad.adapter:beizi:4.90.2.55.08171'
      
    //章鱼
    implementation 'cn.jiguang.sdk.ad.adapter:octopus:1.5.9.13.03281'
}

5.1.3 注意事项

  • 支持主流架构,x86架构暂不支持

    ndk {
    	// 设置支持的SO库架构,暂不支持x86
    	abiFilters 'armeabi-v7a', 'arm64-v8a'
    }
  • AdapterSdk默认已经集成了三方的广告SDK,如果因为项目中也使用了相同的三方广告SDK而发生冲突,可通过以下方法尝试避免或解决;

  1. 移除己方使用的三方广告SDK和相关配置;

  2. 使用AdapterSdkwithout集成方式,该方式没有集成三方广告SDK和配置,开发者可自行集成三方广告SDK,但是需要注意,我们的AdapterSdk是基于三方广告SDK某个版本开发的,如果自行集成三方广告SDK,需要承担三方广告SDK版本不一致可能引起的兼容性和其他不可预知问题;

    // 优量汇AdapterSdk的without集成示例,其中x.x.x.x为AdapterSdk版本号
    implementation 'cn.jiguang.sdk.ad.adapter:gdt-without:x.x.x.x'
  3. 激励、全屏视频、插屏等广告对象一次成功拉取的广告数据只允许展示一次,还需展示请再次加载广告。

  4. Mintegral(汇量)渠道与微信sdk冲突解决办法 由于Mintegral渠道16.1.7版本支持小程序跳转功能,若媒体已导入opensdk,会导致冲突,可通过以下方式移除Mintegral适配器中的opensdk

    ('cn.jiguang.sdk.ad.adapter:mintegral:16.5.41.11221') {
            exclude group: "com.tencent.mm.opensdk", module: "wechat-sdk-android"
        }

5.2 OAID1.0.25版本支持

Android10之后IMEI等数据无法获取,这对广告投放将产生一定影响,所以移动安全联盟(MSA)提出OAID来代替IMEI参与广告投放决策,OAID的支持会在一定程度上影响广告收益;

OAID是必须集成项,没有集成将会抛出异常提醒开发者,OAID集成并不繁琐,SDK中已经进行了OAID1.0.25的封装适配,只需以下几步即可完成OAID的支持;

  1. 导入安全联盟的OAID支持库 oaid_sdk_1.0.25.aar,可在Demo的libs目录下找到,对接其它版本请勿参考该教程;

  2. 将Demo中assets文件夹下的supplierconfig.json文件复制到自己的assets目录下并按照supplierconfig.json文件中的说明进行OAID的 AppId 配置,supplierconfig.json文件名不可修改。需要设置 appid 的部分需要去对应厂商的应用商店的应用信息中查看;

  3. 添加以下混淆配置;

    -keep class com.bun.miitmdid.core.** {*;}
    -keep class XI.CA.XI.**{*;}
    -keep class XI.K0.XI.**{*;}
    -keep class XI.XI.K0.**{*;}
    -keep class XI.vs.K0.**{*;}
    -keep class XI.xo.XI.XI.**{*;}
    -keep class com.asus.msa.SupplementaryDID.**{*;}
    -keep class com.asus.msa.sdid.**{*;}
    -keep class com.bun.lib.**{*;}
    -keep class com.bun.miitmdid.**{*;}
    -keep class com.huawei.hms.ads.identifier.**{*;}
    -keep class com.samsung.android.deviceidservice.**{*;}
    -keep class com.zui.opendeviceidlibrary.**{*;}
    -keep class org.json.**{*;}
    -keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
  4. 修改AndroidManifest.xml,OAID SDK minSdkVersion为21,如果应用的minSdkVersion小于21,则添加:

    // 如果导入后有冲突可以不添加,sdk中已经添加过了
    <uses-sdk tools:overrideLibrary="com.bun.miitmdid"/>

    PS:目前华为应用市场会提示OAID1.0.25中存在网易(飞鱼)的sdk,这是由于OAID1.0.25中的包路径和网易(飞鱼)sdk的包路径相同,只能通过升级OAID进行解决。
    OAID 1.0.25以上版本需要到《移动智能终端补充设备标识体系统一调用SDK》申请APP专属密钥才能正常使用,需要开发者自行获取OAID,并参考 5.7 向SDK传入设备标识 ,将获取到的OAID字符串传给广告SDK,保证广告SDK参数成功接收到。


    注意:使用其它版本oaid请移除以下依赖,避免造成崩溃:

    // OAID1.0.25版本适配器不支持其它版本,ADJgSdk获取oaid使用
    implementation "cn.jiguang.sdk.ad:oaid:1.0.25.12122"
    // OAID库1.0.25
    implementation(name: 'oaid_sdk_1.0.25', ext: 'aar')
  5. 使用其它版本参考案例 Oaid高版本参考案例

5.3 权限申请

使用SDK时可能需要以下权限,为了保证使用广告的正确,请在6.0及以上的手机中使用SDK前及时申请。

<!-- 广告必须的权限允许网络访问 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 广告必须的权限允许安装未知来源权限如下载类广告下载完成后唤起安卓 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 广告必须的权限地理位置权限获取位置信息用于广告投放精准广告投放及反作弊 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- 如果有视频相关的广告播放请务必添加屏幕保持唤醒不锁屏部分渠道未添加该权限时会出现视频类广告黑屏-->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- 如果接入了优量汇渠道必须加入以下权限不然会导致优量汇填充失败 -->
<!-- 允许应用获取 MAC 地址广告投放及广告监测归因反作弊 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许应用检测网络状态SDK 会根据网络状态选择是否发送数据 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- 影响广告填充强烈建议的权限获取设备信息允许应用获取手机状态包括手机号码IMEIIMSI权限等)。广告投放及广告监测归因反作弊 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 为了提高广告收益建议设置的权限写入权限用于下载类广告数据写入 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 为了提高广告收益建议设置的权限读取权限用于下载类广告数据读取如判断是否已下载过该APK避免重复下载-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!-- 为了提高广告收益建议设置的权限获取粗略位置信息精准广告投放及反作弊 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

5.4 兼容配置

5.4.1 FileProvider配置

  1. 适配Anroid7.0以及以上,请在AndroidManifest中添加如下代码:
  • 如果支持库是support

    <provider
    	  android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
        		android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/adjg_file_paths" />
    </provider>
  • 如果支持库为androidx

    <provider
    	  android:name="androidx.core.content.FileProvider" 
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
        		android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/adjg_file_paths" />
    </provider>
  1. FileProvider配置. 在res/xml目录下(如果xml目录不存在需要手动创建),新建xml文件adjg_file_paths,在该文件中加入如下配置,如果存在相同android:authorities的provider,请将paths标签中的路劲配置到自己的xml文件中:
<?xml version="1.0" encoding="utf-8"?>  
<paths xmlns:android="http://schemas.android.com/apk/res/android">  
    <external-path name="external_path" path="." />
    <external-files-path name="external_files_path" path="." />  
</paths>

PS  :  为了适配下载和安装相关功能,在工程中引用的包 com.android.support:support-v4:x.x.x请使用26.0.0及以上版本。

  1. 使用AdapterSdkwithout集成方式,需要对相应ADN进行配置。正常对接方式内部已配置完成,不用再次配置。
  <!--优量汇配置开始-->
  <provider
      android:name="com.qq.e.comm.GDTFileProvider"
      android:authorities="${applicationId}.gdt.fileprovider"
      android:exported="false"
      android:grantUriPermissions="true">
      <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/gdt_file_path" />
  </provider>
  <!--优量汇配置结束-->

  <!--头条配置开始-->
  <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/adjg_toutiao_file_paths" />
  </provider>

  <provider
      android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
      android:authorities="${applicationId}.TTMultiProvider"
      android:exported="false" />
  <!--头条配置结束-->

  <!--百度配置开始-->
  <activity
      android:name="com.baidu.mobads.sdk.api.AppActivity"
      android:configChanges="screenSize|keyboard|keyboardHidden|orientation"
      android:theme="@android:style/Theme.NoTitleBar"/>

  <activity
      android:name="com.baidu.mobads.sdk.api.MobRewardVideoActivity"
      android:configChanges="screenSize|orientation|keyboardHidden"
      android:launchMode="singleTask"
      android:theme="@android:style/Theme.Translucent.NoTitleBar" />

  <provider
      android:name="com.baidu.mobads.sdk.api.BdFileProvider"
      android:authorities="${applicationId}.bd.provider"
      android:exported="false"
      android:grantUriPermissions="true">
      <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/bd_file_paths" />
  </provider>
  <!--百度配置结束-->

  <!--汇量配置开始-->
  <!--激励视频和插屏视频广告所需Activity-->
  <activity
      android:name="com.mbridge.msdk.reward.player.MBRewardVideoActivity"
      android:configChanges="orientation|keyboardHidden|screenSize"
      android:excludeFromRecents="true" />
  <!--插屏图片广告所需Activity-->
  <activity
      android:name="com.mbridge.msdk.interstitial.view.MBInterstitialActivity"
      android:configChanges="orientation|screenSize"
      android:excludeFromRecents="true" />
  <!--交互广告所需Activity-->
  <activity
      android:name="com.mbridge.msdk.interactiveads.activity.InteractiveShowActivity"
      android:excludeFromRecents="true"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

  <receiver android:name="com.mbridge.msdk.click.AppReceiver">
      <intent-filter>
          <action android:name="android.intent.action.PACKAGE_ADDED" />
          <data android:scheme="package" />
      </intent-filter>
  </receiver>
  <!--汇量配置结束-->

5.4.2 网络配置

需要在 AndroidManifest.xml 添加依赖声明uses-library android:name="org.apache.http.legacy" android:required="false", 且 application标签中添加 android:usesCleartextTraffic="true",适配网络http请求,否则 SDK可能无法正常工作,接入代码示例如下:

<application
    android:name=".MyApplication"
	... ...
    android:usesCleartextTraffic="true"
	... ...>

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
    ... ...
</application>

5.4.3 混淆配置

如果打包时开启了混淆配置,请按需添加以下混淆内容,并保证广告资源文件不被混淆

-ignorewarnings
# v4v7如果是Support支持库需添加
-keep class android.support.v4.**{public *;}
-keep class android.support.v7.**{public *;}

# AndroidX (如果是AndroidX支持库需添加)
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep class * extends androidx.**

# 资源文件混淆配置
-keep class **.R$* { *; }
-keep public class **.R$*{
   public static final int *;
}
-keepclassmembers class **.R$* {
    public static <fields>;
}

# ADJgSdk混淆
-dontwarn cn.jiguang.jgssp.**
-dontwarn org.apache.commons.**
-keep class cn.jiguang.jgssp.**{public *;}
-keep class com.android.**{*;}
-keep class com.ciba.**{ *; }
-keep class org.apache.**{*;}

# okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}

# OAID混淆
-keep class com.bun.miitmdid.core.** {*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}

# 优量汇广告平台混淆
-keep class com.qq.e.** {public protected *;}
-keep class MTT.ThirdAppInfoNew {*;}
-keep class com.tencent.** {*;}

# 百度广告SDK混淆
-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}
-keepclassmembers enum * {
 public static **[] values();
 public static ** valueOf(java.lang.String);
}
-keep class com.baidu.mobads.** { *; }
-keep class com.baidu.mobad.** { *; }

# 头条广告平台混淆
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}

# mintegral广告平台混淆
-dontwarn com.mintegral.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mbridge.** {*; }
-keep interface com.mbridge.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mbridge.**
-keep class **.R$* { public static final int mbridge*; }

# 快手广告平台混淆
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class com.kwad.sdk.** { *;}
-keep class com.ksad.download.** { *;}
-keep class com.kwai.filedownloader.** { *;}
-keepclasseswithmembernames class * { native <methods>;}

# 极光Ads混淆
-keep class com.junion.**{ *; }
-keep class junion.com.** { *; }
-keep interface junion.com.** { *; }

# 天目广告混淆
-keep class com.tianmu.**{ *; }
-keep class tianmu.com.** { *; }
-keep interface tianmu.com.** { *; }

# Jgid的混淆规则
-keep class jgssp.com.** { *; }
-keep interface jgssp.com.** { *; }

#倍孜Beizi广告混淆
-dontwarn android.app.**
-dontwarn android.support.**
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-dontwarn  org.apache.**
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }

# 章鱼的混淆规则
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}

5.4.4 开启硬件加速,优化视频类广告播放效果。

<application
    android:name=".MyApplication"
	... ...
    android:hardwareAccelerated="true"
	... ...>

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
    ... ...
</application>

5.5 隐私信息控制开关

为了保证您的App顺利通过检测,结合当前监管关注重点,请务必将ADJgSdk的初始化放在用户同意隐私政策之后。

如合规有更高要求,可以使用以下方法进行控制,但会严重降低广告收益,可根据实际需求进行设置,或联系我发运营人员获取建议。 同时ADJgSDK初始化时开放以下接口,确保mac,imei等设备标识不被读取(目前部分三方广告平台支持):

//【慎改】是否同意隐私政策,将禁用一切设备信息读起严重影响收益
.agreePrivacyStrategy(true)
// 是否可获取定位数据
.isCanUseLocation(true)
// 是否可获取设备信息
.isCanUsePhoneState(true)
// 是否可读取设备安装列表
.isCanReadInstallList(true)
// 是否可读取设备外部读写权限
.isCanUseReadWriteExternal(true)

另外还可从根源上解决设备标识被读取等问题,可对配置清单中的权限增加tools:node="remove"配置; 如下:

<!-- 影响广告填充强烈建议的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
<!-- 为了提高广告收益建议设置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />

以上操作会对广告填充造成影响,请斟酌使用。

5.6 个性化开关

ADJg的个性化开关可统一控制第三方广告SDK的个性化开关接口,目前支持天目、优量汇、穿山甲、百度、快手、汇量;

// true为开启、false为关闭,请在初始化ADJg后进行控制
ADJgSdk.setPersonalizedAdEnabled(boolean personalized);

5.7 向SDK传入设备标识

统一由可选参数 : CustomDeviceInfoController 进行设置

  • 新增可选参数设置
ADJgSdk.getInstance().init(
        this,
        new ADJgInitConfig.Builder()
                ...
                // 是否可读取wifi状态
                .isCanUseWifiState(false)
                // 是否可获取定位数据
                .isCanUseLocation(false)
                // 是否可获取设备信息
                .isCanUsePhoneState(false)
                .setCustomDeviceInfoController(new CustomDeviceInfoController() {
                    /**
                     * 当isCanUsePhoneState=false时,可传入imei信息,天目使用您传入的imei信息
                     * @return imei信息
                     */
                    @Override
                    public String getImei() {
                        return super.getImei();
                    }

                    /**
                     * 当isCanUsePhoneState=false时,可传入AndroidId信息,天目使用您传入的AndroidId信息
                     * @return androidid信息
                     */
                    @Override
                    public String getAndroidId() {
                        return super.getAndroidId();
                    }

                    /**
                     * 当isCanUseLocation=false时,可传入地理位置信息,天目使用您传入的地理位置信息
                     * @return 极光地理位置参数JUnionLocationProvider
                     */
                    @Override
                    public Location getLocation() {
                        return super.getLocation();
                    }

                    /**
                     * 当isCanUseWifiState=false时,可传入Mac地址信息,天目使用您传入的Mac地址信息
                     * @return Mac地址
                     */
                    @Override
                    public String getMacAddress() {
                        return super.getMacAddress();
                    }

                    /**
                     * 开发者可以传入oaid ,若不传或为空值,则不使用oaid信息
                     * @return oaid
                     */
                    @Override
                    public String getOaid() {
                        return super.getOaid();
                    }

                    /**
                     * 开发者可以传入vaid ,若不传或为空值,则不使用vaid信息
                     * @return vaid
                     */
                    @Override
                    public String getVaid() {
                        return super.getVaid();
                    }
                })
                ...
                .build()
);

6. 示例代码

6.1 SDK初始化

在隐私同意后进行SDK的初始化(详情请参考Demo SplashAdActivity.java类)

6.1.1 初始化主要 API

ADJgSdk

cn.jiguang.jgssp.ADJgSdk

方法名 介绍
init(Context context, ADJgInitConfig config) 构造方法。参数说明:context(初始化SDK请传入Application的上下文对象)、config(初始化配置信息)。
init(Context context, ADJgInitConfig config, ADJgInitListener listener) 构造方法。参数说明:context(初始化SDK请传入Application的上下文对象)、config(初始化配置信息)、listener(初始化状态监听)。
setPersonalizedAdEnabled(boolean enablePersonalized) 设置个性化推荐开关。参数说明:enablePersonalized(true:开启,false:关闭, 默认:true)。
getPersonalizedAdEnabled() 获取个性化推荐状态,true:开启,false:关闭。

ADJgInitConfig

cn.jiguang.jgssp.config.ADJgInitConfig

方法名 介绍
appId(String appId) 设置AppId,必填参数。
debug(boolean debug) 设置是否是Debug模式。参数说明:debug(true:开启,false:关闭, 默认:false)开发阶段以及提交测试阶段可设置为true,方便异常排查。
isCanUseLocation(boolean isCanUseLocation) 设置SDK是否可以使用定位信息。参数说明:isCanUseLocation(true:开启,false:关闭, 默认:true)。
isCanUsePhoneState(boolean isCanUsePhoneState) 设置SDK是否可以使用IMEI等设备信息。参数说明:isCanUsePhoneState(true:开启,false:关闭, 默认:true)。
isCanUseWifiState(boolean isCanUseWifiState) 设置SDK是否可以使用WIFI信息。参数说明:isCanUseWifiState(true:开启,false:关闭, 默认:true)。
agreePrivacyStrategy(boolean agreePrivacyStrategy) 是否同意隐私政策。参数说明:agreePrivacyStrategy(true:开启,false:关闭, 默认:true)。
filterThirdQuestion(boolean filterThirdQuestion) 设置是否过滤第三方平台的问题广告(例如: 已知某个广告平台在某些机型的Banner广告可能存在问题,如果开启过滤,则在该机型将不再去获取该平台的Banner广告)。参数说明:filterThirdQuestion(true:开启,false:关闭, 默认:true)。
setCustomDeviceInfoController(CustomDeviceInfoController controller) 自定义设备信息。可选参数。 请参考5.7 向SDK传入设备标识

CustomDeviceInfoController

cn.jiguang.jgssp.config.CustomDeviceInfoController

方法名 介绍
getImei() 当isCanUsePhoneState=false时,可传入imei信息,使用您传入的imei信息。
getAndroidId() 当isCanUsePhoneState=false时,可传入AndroidId信息,使用您传入的AndroidId信息。
getLocation() 当isCanUseLocation=false时,可传入地理位置信息,使用您传入的地理位置信息。
getMacAddress() 当isCanUseWifiState=false时,可传入Mac地址信息,使用您传入的Mac地址信息。
getOaid() 开发者可以传入oaid ,若不传或为空值,则不使用oaid信息。
getVaid() 开发者可以传入vaid ,若不传或为空值,则不使用vaid信息。

6.1.2 初始化接入示例

// 初始化ADJg广告SDK
ADJgSdk.getInstance().init(this, new ADJgInitConfig.Builder()
    // 设置APPID,必须的
    .appId(String appId)
    // 是否开启Debug,开启会有详细的日志信息打印,如果用上ADJgToastUtil工具还会弹出toast提示。
    // 注意上线后请置为false
    .debug(boolean debug)
    ...
    .build());

PS :AppId通过后台配置生成,初始化必须在主线程中进行,SDK暂不支持多进程。

6.2 开屏广告示例

开屏广告建议在闪屏页进行展示,开屏广告的宽度和高度取决于容器的宽高,都是会撑满广告容器;开屏广告的高度必须大于等于屏幕高度(手机屏幕完整高度,包括状态栏之类)的75%,否则可能会影响收益计费(优量汇的开屏甚至会影响跳过按钮的回调)。

6.2.1 开屏广告主要 API

ADJgSplashAd

cn.jiguang.jgssp.ad.ADJgSplashAd

方法名 介绍
ADJgSplashAd(Activity activity, ViewGroup container) 构造方法。参数说明:activity(当前页面activity对象)、container(展示广告视图的父容器)。
ADJgSplashAd(Fragment fragment, ViewGroup container) 构造方法。参数说明:fragment(当前页面fragment对象)、container(展示广告视图的父容器)。
setLocalExtraParams(ADJgExtraParams extraParams) 设置额外参数。参数说明:extraParams(广告额外参数)。
setImmersive(boolean isImmersive) 设置沉浸效果。参数说明:isImmersive(true:沉浸,false:不沉浸,影响跳过按钮位置)。
setOnlySupportPlatform(String platform) 设置广告定向,仅请求某一渠道。参数说明:platform(渠道名)。注:仅debug模式为true时生效。
setListener(ADJgSplashAdListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
loadAd(String posId) 请求广告并展示。参数说明:posId(广告位ID)。
loadOnly(String posId) 仅请求广告不展示。参数说明:posId(广告位ID)。
loadAd(String posId, ADJgNetworkRequestInfo requestInfo) 请求打底广告并展示,目前支持优量汇、头条、百度、快手。参数说明:posId(广告位ID)、requestInfo(打底广告对象,接口地址Gitee地址Github地址)。
showSplash() 展示广告。使用loadOnly方法去加载广告时,可在onAdReceive回调后去展示广告。
release() 释放广告。

ADJgExtraParams

cn.jiguang.jgssp.ad.entity.ADJgExtraParams

方法名 介绍
ADJgExtraParams.Builder().build() 构造方法。
adSize(ADJgAdSize adSize) 设置开屏视图宽高。参数说明:adSize(设置整个广告视图预期宽高(目前头条和倍孜平台需要,没有接入头条和倍孜平台可不设置),单位为px,如果不设置头条开屏广告视图将会以9 : 16的比例进行填充,小屏幕手机可能会出现素材被压缩的情况,大屏幕设备可能出现留白)。
setAdShakeDisable(boolean adShakeDisable) 设置摇一摇禁用,目前优量汇、快手、天目、极光Ads渠道支持,其他渠道需要提交工单或渠道后台控制关闭。参数说明:adShakeDisable(true:禁用、false:可用,默认:false)。

ADJgAdSize

cn.jiguang.jgssp.ad.entity.ADJgAdSize

方法名 介绍
ADJgAdSize(int width, int height) 构造方法。参数说明:
width(容器宽度,单位:px)请传入实际宽度、
height(容器高度,单位:px)请传入实际高度。

ADJgSplashAdListener

cn.jiguang.jgssp.ad.listener.ADJgSplashAdListener

方法名 介绍
onADTick(long millisUntilFinished) 广告倒计时剩余时长回调。参数说明:millisUntilFinished(剩余时间,单位:秒))。
onAdReceive(ADJgAdInfo adInfo) 广告加载成功回调。
onAdExpose(ADJgAdInfo adInfo) 广告展示回调。
onAdClick(ADJgAdInfo adInfo) 广告点击回调。
onAdSkip(ADJgAdInfo adInfo) 广告跳过回调,用户点击跳过按钮时触发。
onAdClose(ADJgAdInfo adInfo) 广告关闭回调,用户点击跳过按钮、触发落地页后返回开屏页、倒计时结束,则触发。
onReward(ADJgAdInfo adInfo) 广告奖励回调,目前仅优量汇渠道有效。
onAdFailed(ADJgError error) 广告失败回调。参数说明:error(广告错误信息)。

6.2.2 开屏广告加载并展示

// 创建开屏广告实例,第一个参数可以是Activity或Fragment,第二个参数是广告容器
ADJgSplashAd splashAd = new ADJgSplashAd(Activity activity, ViewGroup container);

// 创建额外参数实例
ADJgExtraParams extraParams = new ADJgExtraParams.Builder()
        .adSize(new ADJgAdSize(int width, int height))
        .build();

// 如果开屏容器不是全屏可以设置额外参数
splashAd.setLocalExtraParams(extraParams);

// 设置开屏广告监听
splashAd.setListener(new ADJgSplashAdListener() {
  	@Override
    public void onADTick(long countdownSeconds) {
        // 如果没有设置自定义跳过按钮不会回调该方法(单位为秒)
    }

    @Override
    public void onReward(ADJgAdInfo adInfo) {
        // 目前仅优量汇渠道支持该回调
    }
    @Override
    public void onAdSkip(ADJgAdInfo adInfo) {
      	// 广告跳过回调,不一定准确,埋点数据仅供参考
    }
    @Override
    public void onAdReceive(ADJgAdInfo adInfo) {
        // 广告获取成功回调
    }

    @Override
    public void onAdExpose(ADJgAdInfo adInfo) {
        // 广告展示回调,有展示回调不一定是有效曝光,如网络等情况导致上报失败
    }

    @Override
    public void onAdClick(ADJgAdInfo adInfo) {
        // 广告点击回调,有点击回调不一定是有效点击,如网络等情况导致上报失败
    }

    @Override
    public void onAdClose(ADJgAdInfo adInfo) {
        // 广告关闭回调,需要在此进行页面跳转
    }

    @Override
    public void onAdFailed(ADJgError error) {
        // 广告关闭回调,需要在此进行页面跳转
    }
});

// 加载并展示开屏广告
splashAd.loadAd(String posId);

开屏广告示例详情

6.2.3 开屏广告加载与展示分离

仅加载开屏广告
// 创建广告对象的逻辑与6.2.2的案例相同,不同点在loadAd
...
// 仅加载开屏广告
splashAd.loadOnly(String posId);
展示开屏广告
// 需要开发者在onAdReceive回调之后再展示开屏广告
...
public void onAdReceive(ADJgAdInfo adInfo) {
    // 广告获取成功回调...
    // 展示开屏广告
    splashAd.showSplash();
}
...

开屏广告加载与展示分离示例 Gitee地址

6.3 Banner横幅广告示例

Banner横幅广告建议放置在 固定位置,而非ListView、RecyclerView、ViewPager等控件中充当Item,Banner广告支持多种尺寸比例,可在后台创建广告位时配置,Banner广告的宽度将会撑满容器,高度自适应,建议Banner广告容器高度也为自适应。

6.3.1 横幅广告主要 API

ADJgBannerAd

cn.jiguang.jgssp.ad.ADJgBannerAd

方法名 介绍
ADJgBannerAd(Activity activity, ViewGroup container) 构造方法。参数说明:activity(当前页面activity对象)、container(展示广告视图的父容器)。
ADJgBannerAd(Fragment fragment, ViewGroup container) 构造方法。参数说明:fragment(当前页面fragment对象)、container(展示广告视图的父容器)。
setAutoRefreshInterval(long seconds) 设置自刷新时间间隔。参数说明:seconds(0为不自动刷新(部分平台无效,如百度),其他取值范围为[30,120],单位秒)。
setOnlySupportPlatform(String platform) 设置广告定向,仅请求某一渠道。参数说明:platform(渠道名)。注:仅debug模式为true时生效。
setListener(ADJgBannerAdListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
setSceneId(String sceneId) 设置广告场景id,用于区分同一个广告位在不同场景下使用的数据。参数说明:sceneId(场景ID)。
loadAd(String posId) 请求广告并展示。参数说明:posId(广告位ID)。
release() 释放广告。

ADJgBannerAdListener

cn.jiguang.jgssp.ad.listener.ADJgBannerAdListener

方法名 介绍
onAdReceive(ADJgAdInfo adInfo) 广告加载成功回调。
onAdExpose(ADJgAdInfo adInfo) 广告展示回调。
onAdClick(ADJgAdInfo adInfo) 广告点击回调。
onAdClose(ADJgAdInfo adInfo) 广告关闭回调,开发者需要在此回调中对广告父视图进行隐藏或移除子视图,并对广告对象进行释放,避免自刷新逻辑持续进行
onAdFailed(ADJgError error) 广告失败回调。参数说明:error(广告错误信息)。

6.3.2 横幅广告加载并展示

// 创建Banner广告实例,第一个参数可以是Activity或Fragment,第二个参数是广告容器(请保证容器不会拦截点击、触摸等事件)
ADJgBannerAd bannerAd = new ADJgBannerAd(Activity activity, ViewGroup container);

// 设置Banner广告监听
bannerAd.setListener(new ADJgBannerAdListener() {
    @Override
    public void onAdReceive(ADJgAdInfo adInfo) {
        // 广告获取成功回调
    }

    @Override
    public void onAdExpose(ADJgAdInfo adInfo) {
    	// 广告展示回调,有展示回调不一定是有效曝光,如网络等情况导致上报失败
    }

    @Override
    public void onAdClick(ADJgAdInfo adInfo) {
    	// 广告点击回调,有点击回调不一定是有效点击,如网络等情况导致上报失败
    }

    @Override
    public void onAdClose(ADJgAdInfo adInfo) {
    	// 广告关闭回调,开发者需要在此回调中对广告父视图进行隐藏或移除子视图,
        // 并对广告对象进行释放,避免自刷新逻辑持续进行
   	}

    @Override
    public void onAdFailed(ADJgError error) {
    	// 广告获取失败回调
    }
});

// 加载Banner广告,参数为广告位ID,同一个ADJgBannerAd只有一次loadAd有效
bannerAd.loadAd(String posId);

Banner广告示例详情

6.4 信息流广告示例

信息流广告,具备自渲染和模板两种广告样式:自渲染是SDK将返回广告标题、描述、Icon、图片、多媒体视图等信息,开发者可通过自行拼装渲染成喜欢的样式;模板样式则是返回拼装好的广告视图,开发者只需将视图添加到相应容器即可,模板样式的容器高度建议是自适应。 请务必确保自渲染类型广告渲染时包含广告创意素材(至少包含一张图片)、平台logo、广告标识、关闭按钮;模板广告不得被遮挡。 注意,信息流广告点击关闭时,开发者需要在onAdClose回调中将广告容器隐藏或移除,避免如头条渠道点击关闭后视图依旧存在问题

6.4.1 信息流广告主要 API

ADJgNativeAd

cn.jiguang.jgssp.ad.ADJgNativeAd

方法名 介绍
ADJgNativeAd(Activity activity) 构造方法。参数说明:activity(当前页面activity对象)。
ADJgNativeAd(Fragment fragment) 构造方法。参数说明:fragment(当前页面fragment对象)。
setLocalExtraParams(ADJgExtraParams extraParams) 设置额外参数。参数说明:extraParams(广告额外参数)。
setOnlySupportPlatform(String platform) 设置广告定向,仅请求某一渠道。参数说明:platform(渠道名)。注:仅debug模式为true时生效。
setListener(ADJgNativeAdListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
setVideoListener(ADJgNativeVideoListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
setSceneId(String sceneId) 设置广告场景id,用于区分同一个广告位在不同场景下使用的数据。参数说明:sceneId(场景ID)。
loadAd(String posId) 请求广告并展示。参数说明:posId(广告位ID)。
loadAd(String posId, int count) 请求广告并展示。参数说明:posId(广告位ID)、count(广告数量,1~3条)。
release() 释放广告。

ADJgExtraParams

cn.jiguang.jgssp.ad.entity.ADJgExtraParams

方法名 介绍
ADJgExtraParams.Builder().build() 构造方法。
adSize(ADJgAdSize adSize) 设置整个广告视图预期宽高。参数说明:adSize(广告容器宽高,建议传入宽度为容器实际宽度,高度传入0(自适应高度))。
nativeStyle(ADJgAdNativeStyle adNativeStyle) 设置模板广告内外边距参数。参数说明:adNativeStyle(模板广告样式,目前仅天目平台需要)。
nativeAdPlayWithMute(boolean isMute) 视频静音设置。参数说明:isMute(true:静音、false:不静音,默认:true)。

ADJgAdNativeStyle

cn.jiguang.jgssp.ad.entity.ADJgAdNativeStyle

方法名 介绍
ADJgAdNativeStyle(int padding) 构造方法。参数说明:padding(容器内边距)。
ADJgAdNativeStyle(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) 构造方法。参数说明:paddingLeft(容器左边距)、paddingTop(容器上边距)、paddingRight(容器右边距)、paddingBottom(容器下边距)。
setTitleSize(int titleSize) 设置标题大小。参数说明:titleSize(标题大小,单位:sp)。
setDescSize(int descSize) 副标题大小。参数说明:descSize(副标题大小,单位:sp)。

ADJgNativeAdListener

cn.jiguang.jgssp.ad.listener.ADJgNativeAdListener

方法名 介绍
onAdReceive(List<ADJgNativeAdInfo> adInfos) 广告加载成功回调。
onAdExpose(ADJgNativeAdInfo adInfo) 广告展示回调。
onAdClick(ADJgNativeAdInfo adInfo) 广告点击回调。
onAdClose(ADJgNativeAdInfo adInfo) 广告关闭回调,在此回调中移除页面中的视图。
onAdFailed(ADJgError error) 广告失败回调。参数说明:error(广告错误信息)。
onRenderFailed(ADJgNativeAdInfo adInfo, ADJgError error) 广告失败回调。参数说明:error(广告错误信息)。

ADJgNativeVideoListener

cn.jiguang.jgssp.ad.listener.ADJgNativeVideoListener

方法名 介绍
onVideoLoad(ADJgNativeAdInfo nativeAdInfo) 视频加载中回调。
onVideoStart(ADJgNativeAdInfo nativeAdInfo) 视频播放回调。
onVideoPause(ADJgNativeAdInfo nativeAdInfo) 视频暂停回调。
onVideoComplete(ADJgNativeAdInfo nativeAdInfo) 视频播放完毕回调。
onVideoError(ADJgNativeAdInfo nativeAdInfo) 视频异常回调。

信息流广告父对象ADJgNativeAdInfo

信息流模板和自渲染均继承自该类

cn.jiguang.jgssp.ad.data.ADJgNativeAdInfo

方法名 介绍
isNativeExpress() 广告类型,返回boolean类型,true模板类型,false自渲染类型。

当isNativeExpress返回true时,可强转为ADJgNativeExpressAdInfo类,否则转为ADJgNativeFeedAdInfo类

模板广告对象ADJgNativeExpressAdInfo继承自ADJgNativeAdInfo

cn.jiguang.jgssp.ad.data.ADJgNativeExpressAdInfo

方法名 类型 介绍
getNativeExpressAdView() View 获取的是整个模板广告视图。
render(ViewGroup container) void 渲染视图,调用该方法才能响应曝光、点击等操作,影响广告收益。参数说明:container(承载广告的容器,不能为空)

自渲染广告对象ADJgNativeFeedAdInfo继承自ADJgNativeAdInfo

cn.jiguang.jgssp.ad.data.ADJgNativeFeedAdInfo

方法名 类型 介绍
getTitle() String 获取广告标题,可能为空。
getDesc() String 获取广告描述,可能为空。
getActionType() int 获取广告交互类型,未知:-1,应用内打开落地页:0,浏览器打开落地页:1,下载类型:2,拨打电话:3。
getCtaText() String 广告交互按钮文案,可能为空。
getIconUrl() String 广告图标地址,可能为空。
getImageUrl() String 图片地址,可能为空。。
getImageUrlList() List 广告图片集合,可能为空。
hasMediaView() boolean 判断是否包含多媒体广告视图。
getMediaView() View 获取的是多媒体广告视图。
getPlatformIcon() int 获取广告平台角标,资源文件地址。
registerViewForInteraction(ViewGroup container, View... actionViews) void 注册广告视图。参数说明:container(广告容器,若对接优量汇自渲染,此处一定要传入com.qq.e.ads.nativ.widget.NativeAdContainer布局,否则优量汇渠道无法曝光)、
actionViews(可点击的布局)
registerCloseView(View close) void 注册关闭按钮。参数说明:close(点击关闭的view,不注册将不会回调onAdClose事件)

6.4.2 信息流广告加载并展示

6.4.2.1 信息流广告加载

// 创建信息流广告实例
ADJgNativeAd nativeAd = new ADJgNativeAd(Activity activity);
int widthPixels = getResources().getDisplayMetrics().widthPixels;
// 创建额外参数实例
ADJgExtraParams extraParams = new ADJgExtraParams.Builder()
    // 设置整个广告视图预期宽高(目前仅头条,艾狄墨搏平台需要,没有接入头条、艾狄墨搏可不设置),单位为px,高度如果小于等于0则高度自适应
    .adSize(new ADJgAdSize(widthPixels, 0))
   	.build();
// 设置一些额外参数,有些平台的广告可能需要传入一些额外参数,如果有接入头条平台,该参数必须设置
nativeAd.setLocalExtraParams(extraParams);

// 设置广告监听
nativeAd.setListener(new ADJgNativeAdListener() {
    @Override
    public void onRenderFailed(ADJgNativeAdInfo adInfo, ADJgError error) {
      	// 广告渲染失败,可在此回调中移除视图和释放广告对象
    }

    @Override
    public void onAdReceive(List<ADJgNativeAdInfo> adInfos) {
        // 广告获取成功回调
    }

    @Override
    public void onAdExpose(ADJgNativeAdInfo adInfo) {
    	// 广告展示回调,有展示回调不一定是有效曝光,如网络等情况导致上报失败
    }

    @Override
    public void onAdClick(ADJgNativeAdInfo adInfo) {
    	// 广告点击回调,有点击回调不一定是有效点击,如网络等情况导致上报失败
    }

    @Override
    public void onAdClose(ADJgNativeAdInfo adInfo) {
        // 广告关闭回调,可在此回调中移除视图和释放广告对象
    }

    @Override
    public void onAdFailed(ADJgError error) {
        // 广告获取失败回调
    }
});

// 请求广告数据,参数一广告位ID,参数二请求数量[1,3]
nativeAd.loadAd(String posId, int count);

6.4.2.2 信息流广告展示-模板

// 判断广告Info对象是否被释放(调用过ADJgNativeAd的release()或ADJgNativeAdInfo的release()会释放广告Info对象)
// 释放后的广告Info对象不能再次使用
if (!ADJgAdUtil.adInfoIsRelease(nativeExpressAdInfo)) {
    // 当前是信息流模板广告,getNativeExpressAdView获取的是整个模板广告视图
    View nativeExpressAdView = nativeExpressAdInfo.getNativeExpressAdView((ViewGroup) itemView);
    // 将广告视图添加到容器中的便捷方法
    ADJgViewUtil.addAdViewToAdContainer((ViewGroup) itemView, nativeExpressAdView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    // 渲染广告视图, 必须调用, 因为是模板广告, 所以传入ViewGroup和响应点击的控件可能并没有用
    // 务必在最后调用
    nativeExpressAdInfo.render((ViewGroup) itemView);
}

6.4.2.3 信息流广告展示-自渲染

// 判断广告Info对象是否被释放(调用过ADJgNativeAd的release()或ADJgNativeAdInfo的release()会释放广告Info对象)
// 释放后的广告Info对象不能再次使用
if (!ADJgAdUtil.adInfoIsRelease(nativeFeedAdInfo)) {
    NativeAdAdapter.setVideoListener(nativeFeedAdInfo);

    // 交由子类实现加载图片还是MediaView
    setImageOrMediaData(context, nativeFeedAdInfo);

    Glide.with(context).load(nativeFeedAdInfo.getIconUrl()).into(ivIcon);
    ivAdTarget.setImageResource(nativeFeedAdInfo.getPlatformIcon());
    tvTitle.setText(nativeFeedAdInfo.getTitle());
    tvDesc.setText(nativeFeedAdInfo.getDesc());
    tvAdType.setText(nativeFeedAdInfo.getCtaText());

    // 注册广告交互, 必须调用
    // 注意:广点通只会响应View...actionViews的点击事件,且这些View都应该是com.qq.e.ads.nativ.widget.NativeAdContainer的子View
    nativeFeedAdInfo.registerViewForInteraction((ViewGroup) itemView, rlAdContainer, tvAdType);

    // 注册关闭按钮,将关闭按钮点击事件交于SDK托管,以便于回调onAdClose
    // 务必最后调用
    nativeFeedAdInfo.registerCloseView(ivClose);
}

信息流自渲染广告示例详情 信息流模板广告示例详情

6.5 激励视频广告示例

将短视频融入到APP场景当中,用户观看短视频广告后可以给予一些应用内奖励。

6.5.1 激励视频广告主要 API

ADJgRewardVodAd

cn.jiguang.jgssp.ad.ADJgRewardVodAd

方法名 介绍
ADJgRewardVodAd(Activity activity) 构造方法。参数说明:activity(当前页面activity对象)。
ADJgRewardVodAd(Fragment fragment) 构造方法。参数说明:fragment(当前页面fragment对象)。
setLocalExtraParams(ADJgExtraParams extraParams) 设置额外参数。参数说明:extraParams(广告额外参数)。
setOnlySupportPlatform(String platform) 设置广告定向,仅请求某一渠道。参数说明:platform(渠道名)。注:仅debug模式为true时生效。
setListener(ADJgRewardVodAdListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
setSceneId(String sceneId) 设置广告场景id,用于区分同一个广告位在不同场景下使用的数据。参数说明:sceneId(场景ID)。
loadAd(String posId) 请求广告并展示。参数说明:posId(广告位ID)。
release() 释放广告。

ADJgExtraParams

cn.jiguang.jgssp.ad.entity.ADJgExtraParams

方法名 介绍
ADJgExtraParams.Builder().build() 构造方法。
rewardExtra(ADJgRewardExtra extra) 设置服务端奖励验证额外参数。参数说明:extra(服务端奖励验证额外参数请参考:Gitee地址
setVideoWithMute(boolean isMute) 视频静音设置。参数说明:isMute(true:静音、false:不静音,默认:true)。

ADJgRewardVodAdListener

cn.jiguang.jgssp.ad.listener.ADJgRewardVodAdListener

方法名 介绍
onAdReceive(ADJgRewardVodAdInfo adInfo) 广告加载成功回调。
onAdExpose(ADJgRewardVodAdInfo adInfo) 广告曝光回调。
onAdClick(ADJgRewardVodAdInfo adInfo) 广告点击回调。
onAdClose(ADJgRewardVodAdInfo adInfo) 广告关闭回调。
onReward(ADJgRewardVodAdInfo adInfo) 广告奖励回调。
onVideoCache(ADJgRewardVodAdInfo adInfo) 广告缓存成功回调。
onVideoComplete(ADJgRewardVodAdInfo adInfo) 广告播放完毕回调。
onVideoError(ADJgRewardVodAdInfo adInfo, ADJgError error) 视频播放错误回调。
onAdFailed(ADJgError error) 广告获取失败回调。

ADJgRewardVodAdInfo

cn.jiguang.jgssp.ad.data.ADJgRewardVodAdInfo

方法名 介绍
showRewardVod(Activity activity) 展示广告。参数说明:activity(当前页面activity对象)。

6.5.2 激励视频广告加载并展示

// 创建激励视频广告实例
ADJgRewardVodAd rewardVodAd = new ADJgRewardVodAd(Activity activity);

// 设置激励视频广告监听
rewardVodAd.setListener(new ADJgRewardVodAdListener() {

    @Override
    public void onAdReceive(ADJgRewardVodAdInfo adInfo) {
        // 广告获取成功回调
        // 全屏视频广告对象一次成功拉取的广告数据只允许展示一次
        // 广告展示
        adInfo.showRewardVod(Activity activity)
    }

    @Override
    public void onVideoCache(ADJgRewardVodAdInfo adInfo) {
        // 广告视频缓存成功回调
        // 部分渠道存在激励展示类广告,不会回调该方法,建议在onAdReceive做广告展示处理
    }

    @Override
    public void onVideoComplete(ADJgRewardVodAdInfo adInfo) {
        // 广告观看完成回调
    }

    @Override
    public void onVideoError(ADJgRewardVodAdInfo adInfo, ADJgError error) {
        // 广告播放错误回调
    }

    @Override
    public void onReward(ADJgRewardVodAdInfo adInfo) {
        // 广告激励发放回调
    }

    @Override
    public void onAdExpose(ADJgRewardVodAdInfo adInfo) {
        // 广告展示回调,有展示回调不一定是有效曝光,如网络等情况导致上报失败
    }

    @Override
    public void onAdClick(ADJgRewardVodAdInfo adInfo) {
        // 广告点击回调,有点击回调不一定是有效点击,如网络等情况导致上报失败
    }

    @Override
    public void onAdClose(ADJgRewardVodAdInfo adInfo) {
        // 广告关闭回调
    }

    @Override
    public void onAdFailed(ADJgError error) {
        // 广告获取失败回调
    }
});

// 加载激励视频广告,参数为广告位ID
rewardVodAd.loadAd(String posId);

激励视频广告示例详情

Android-ADJgSDK 激励视频服务端验证使用说明

6.6 插屏广告示例

插屏广告是移动广告的一种常见形式,在应用流程中弹出,当应用展示插屏广告时,用户可以选择点击广告,也可以将其关闭并返回应用。

6.6.1 插屏广告主要 API

ADJgInterstitialAd

cn.jiguang.jgssp.ad.ADJgInterstitialAd

方法名 介绍
ADJgInterstitialAd(Activity activity) 构造方法。参数说明:activity(当前页面activity对象)。
ADJgInterstitialAd(Fragment fragment) 构造方法。参数说明:fragment(当前页面fragment对象)。
setLocalExtraParams(ADJgExtraParams extraParams) 设置额外参数。参数说明:extraParams(广告额外参数)。
setOnlySupportPlatform(String platform) 设置广告定向,仅请求某一渠道。参数说明:platform(渠道名)。注:仅debug模式为true时生效。
setListener(ADJgInterstitialAdListener listener) 设置广告相关状态。参数说明:listener(广告状态监听器)。
setSceneId(String sceneId) 设置广告场景id,用于区分同一个广告位在不同场景下使用的数据。参数说明:sceneId(场景ID)。
loadAd(String posId) 请求广告并展示。参数说明:posId(广告位ID)。
release() 释放广告。

ADJgExtraParams

cn.jiguang.jgssp.ad.entity.ADJgExtraParams

方法名 介绍
ADJgExtraParams.Builder().build() 构造方法。
setVideoWithMute(boolean isMute) 视频静音设置。参数说明:isMute(true:静音、false:不静音,默认:true)。

ADJgInterstitialAdListener

cn.jiguang.jgssp.ad.listener.ADJgInterstitialAdListener

方法名 介绍
onAdReceive(ADJgInterstitialAdInfo adInfo) 广告加载成功回调。
onAdExpose(ADJgInterstitialAdInfo adInfo) 广告曝光回调。
onAdClick(ADJgInterstitialAdInfo adInfo) 广告点击回调。
onAdClose(ADJgInterstitialAdInfo adInfo) 广告关闭回调。
onAdReady(ADJgInterstitialAdInfo adInfo) 广告准备完毕回调。
onAdFailed(ADJgError error) 广告获取失败回调。

ADJgInterstitialAdInfo

cn.jiguang.jgssp.ad.data.ADJgInterstitialAdInfo

方法名 介绍
showInterstitial(Activity activity) 展示广告。参数说明:activity(当前页面activity对象)。

6.6.2 插屏广告加载并展示

ADJgInterstitialAd interstitialAd = new ADJgInterstitialAd(Activity activity);

// 设置插屏广告监听
interstitialAd.setListener(new ADJgInterstitialAdListener() {

    @Override
    public void onAdReceive(ADJgInterstitialAdInfo adInfo) {
        // 广告获取成功回调
        // 插屏广告对象一次成功拉取的广告数据只允许展示一次
        // 展示广告
        adInfo.showInterstitial(Activity activity);
    }

    @Override
    public void onAdReady(ADJgInterstitialAdInfo adInfo) {
        // 广告准备完毕回调
    }

    @Override
    public void onAdExpose(ADJgInterstitialAdInfo adInfo) {
        // 广告展示回调,有展示回调不一定是有效曝光,如网络等情况导致上报失败
    }

    @Override
    public void onAdClick(ADJgInterstitialAdInfo adInfo) {
        // 广告点击回调,有点击回调不一定是有效点击,如网络等情况导致上报失败
    }

    @Override
    public void onAdClose(ADJgInterstitialAdInfo adInfo) {
        // 广告点击关闭回调
    }

    @Override
    public void onAdFailed(ADJgError error) {
        // 广告获取失败回调
    }
});

// 加载插屏广告
interstitialAd.loadAd(String posId);

注意广告对象的获取是异步的,请在onAdReceive或onAdReady回调后展示广告

插屏广告示例详情

6.10 备注

具体的接入代码和流程,请参考Demo

7. 常见问题和错误调试

常见问题和错误调试及错误码

Empty file

About

广告聚合SdkDemo-Android expand collapse
Java
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
Java
1
https://gitee.com/jiguang-official/adjg-sdk-android.git
git@gitee.com:jiguang-official/adjg-sdk-android.git
jiguang-official
adjg-sdk-android
ADJgSdk-Android
master

Search