开发文档
通用Android SDK接入文档(V2.1.28)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

注:若您项目中已经接入穿山甲(open_ad_sdk)和广点通(GDTSDK),请将他们的aar包删除,否则会与我们的包冲突。将他们删除后使用我方包并不会影响您软件已有广告展现, 同时我们资源包内预算价格更高。

一.添加gradle依赖

** Project的gradle下配置如下:**

** app的gradle配置如下:**

从1.0.8版本开始支持AndroidX,引入如下:

配置java8支持

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
二.开始使用

*友情提示*

1. **自1.0.24 版本起对广告增加了风控管理来保证广告的正常投放,触发风控时会在对应广告的 onAdError 回调中打印错误码与错误信息,请开发者根据错误码与信息自行处理对用户的友好提示;错误码详见文档第六章。**

2. **SDK包中的资源不支持混淆,如需要混淆,请联系我们获取资源白名单。**

SDK初始化

在Application的onCreate()添加如下代码:

*备注:尽可能早的调用此方法,此为异步执行,不会阻塞主线程执行。*

userId必须是唯一的,如业务用户id,设备id等

SDK 在调用 init 方法的时候会初始化广告数据,如果需要监听初始化结果,则增加回调参数即可

QuadsSDKManager.getInstance().init(this"userId"new OnInitAdDataCallback() {
    @Override
    public void onInitAdDataSuccess() {
        LogUtil.i("SDK 初始化广告数据完成");
    }

    @Override
    public void onInitAdDataError(int code, String msg) {
        LogUtil.e("SDK 初始化广告数据失败:code=code" + " ,error=" + msg);
    }
});
SDK销毁

应用退出或者不再使用时调用SDK销毁方法释放资源

开屏广告

** 参数说明:**

参数1 :Activity上下文

参数2 :FrameLayout,承载开屏广告的父布局

参数3 :OnScreenAdCallback,广告回调

激励视频

** 参数说明:**

参数1 :Activity上下文

参数2 :OnRewardVideoAdCallback,激励视频广告回调

Banner广告

** 参数说明:**

参数1 :Activity上下文

参数2 :framLayout,承载广告的父布器

参数3 :Banner宽度,一般设置为屏幕宽度,单位为px,如果不设置或者设置为0,则SDK自动设置为屏幕宽度

参数4 :Banner高度,如果设置为0,则为高度自适应

参数5 :sizeKey,Banner尺寸类型key,定义在BannerAdvertSize 枚举类中,只对开通的尺寸类型有效,开通的那种尺寸就传入那个尺寸对应的key

参数6 :OnSimpleAdCallback,banner广告回调

在不使用广告或者适当的地方销毁view,以释放资源

信息流广告

** 参数说明:**

参数1 :Activity上下文

参数2 :显示宽度,一般设置为屏幕宽度,单位为px,如果不设置或者设置为0,则SDK自动设置为屏幕宽度

参数3 :显示高度,如果设置为0,则为高度自适应

参数4 :加载广告的条数,最大 3 条

参数5 :sizeKey,尺寸类型key,定义在ExpressAdvertSize 枚举类中,传入实际开通的广告尺寸对应的key

参数6 :OnInfoStreamCallback,广告回调

在不使用广告或者适当的地方销毁view,以释放资源

比如在 Activity 的 onDestroy 方法中

插屏广告

** 参数说明:**

参数1 :Activity上下文

参数2 :广告显示宽度,一般设置为屏幕宽度

参数3 :广告显示高度,设置为0则为高度自适应

参数4:sizeKey,尺寸类型key,定义在InsertAdvertSize 枚举类中,传入实际开通的广告尺寸key

参数5:广告回调OnInteractionAdCallback

在不使用广告或者适当的地方销毁view,以释放资源

Draw广告

** 参数说明:**

参数1 :Activity上下文

参数2 :广告条数,最大3

参数3 :广告回调接口OnDrawAdCallback

/**
 * 承载draw的viewGroup
 */

private FrameLayout frameLayout;

 frameLayout = findViewById(R.id.llContainer);
/**
 * 加载draw
 */

QuadsSDKManager.getInstance().showDrawsAd(this2new OnDrawAdCallback() {
            @Override
            public void onAdError(String tag, String code, String msg
{
                Log.e(tag, "onAdError:code= " + code + " ,error=" + msg);
            }

            @Override
            public void onAdShow(String tag, List<View> data
{
                Log.e(tag, "onAdShow: " + data.size());
                frameLayout.addView(data.get(0));
            }
        });


/**
 * 资源释放
 *
 */

 @Override
 protected void onDestroy(
{
     QuadsSDKManager.getInstance().destroyDrawView();
     super.onDestroy();
 }
互动广告
三.权限说明

SDK需要的相关的权限已经在SDK的Manifest.xml文件进行了配置,用户接入无需额外加入权限,具体如下。

<!--网络访问权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--设备信息权限,精准投放广告,风控系统-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--定位权限,精准投放广告,风控系统-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--网络状态-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--激励视频播放防止黑屏,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!--安装apk权限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--Android8以上前台service的权限,app下载服务-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--通过此权限在Android R系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
四.常见问题

1. Manifest文件合并失败

一般是由于FileProvider合并冲突导致,如果配置了FileProvider,在主工程的Manifest中所有的Provider标签的根节点上加入如下配置

在FileProvider的meta-data节点下加入如下配置

2. Gson解析相关冲突错误

如果您的项目中已经引入了gson,则在我们SDK引入时增加gson排除,如下

implementation('com.quads:show-androidx:1.0.14') {
exclude group: 'com.google.code.gson'
}

3. 编译运行报类似:Caused by: java.lang.ClassCastException: Bootstrap method returned null的异常

一般情况下是由于未配置java8 支持导致,在高版本的gradle上在编译时编译器会明确报出未配置java8信息,并给出了配置示例;但低版本的gradle编译时不会报错提示,会出现在运行时报错,这时候我们只需要在app的gradle中配置java8的支持即可。

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

4. 同时接入广告SDK和资讯SDK时冲突问题

排除资讯SDK中的tx包

//1.0.17版本之前(含1.0.17)
implementation('com.quads:news:1.0.0') {
exclude group: 'com.quads', module: 'tx'
}
//1.0.17版本---1.0.19
implementation('com.quads:news:1.0.0') {
exclude group: 'com.quads', module: 'tx-tbs'
}
//1.0.19版本之后
implementation('com.quads:news:1.0.0') {
exclude group: 'com.qq.e.union', module: 'tbs'
}

5.关于资源混淆

如果您的应用对资源也进行混淆(如andResGuard),请不要混淆穿山甲的任何资源,防止资源找不到崩溃,混淆资源白名单请联系我们获取。

6.关于广告尺寸类型 Key

Banner、信息流广告、插屏广告有多个尺寸,每一个尺寸对应SDK中定义的一个Key值(实际是个枚举值),用户开通的那种尺寸在调用对应广告接口时就必须传递对应的Key值,否则会报 “没有匹配广告位” 或 “暂无广告位”。例如开通的Banner 是600 * 90的尺寸,则对应的Key为:`String key=BannerAdvertSize.BANNER_600_90.getSizeKey();`

四.代码混淆

如果您接入的是1.0.8及以上版本,则不用添加如下混淆规则,1.0.8以下版本需要手动添加如下混淆规则到app下的 proguard-rules.pro 文件

五.错误码
错误码 描述
1000 没有开通广告位,联系管理员开通
1001 广告加载失败,检查网络连接或广告配置是否正确
1002 广告需要的parentView或者广告id为空
1003 激励视频播放错误,检查广告id是否配置正确
1004 手机权限申请失败
1005 Ip访问限制,通常为短时间频繁访问引起
1006 设备存在风险,如无效的SIM卡,使用模拟器等
1007 广告加载超时
1008 风控设备,媒体核查用户行为
2001 初始化错误
3001 网络异常
3003 网络类型错误,当前设备的网络类型不符合开屏广告的加载条件
4001 初始化错误, 包括广告位为空、App ID为空、Context/Activity为空
4002 请检查 Manifest 文件中的 Activity/Service/Permission 的声明是否正确以及声明的权限是否都已授予
4003 未知错误(联系业务对接)
4013 在旧版的 SDK 上使用了模板视频的广告位,需要升级 SDK
5005 广告请求量或者消耗等超过日限额,请明天再请求广告
5006 包名校验错误
5013 广告请求过于频繁
5018 未知错误(联系业务对接)
5019 未知错误(联系业务对接)
11000 设备触发风控,一般是使用模拟器,非正常设备,root设备等导致
11001 短时间频繁请求
11002 广告位被封禁,请联系商务
通用IOS SDK接入文档(V1.0.0.8)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

注:若您项目中已经接入穿山甲(手动部署--BUAdSDK.bundle BUAdSDK.framework BUFoundation.framework, pod部署--Bytedance-UnionAD)和广点通(手动部署--GDTMobSDK文件夹 pod部署--GDTMobSDK),请将他们删除,否则会与我们的包冲突。将他们删除后使用我方包并不会影响您软件已有广告展现, 同时我们资源包内预算价格更高。

SDK部署项目

自动部署

1.安装CocoaPods
CocoaPods是一个Swift和Objective-C项目的依赖管理器。它拥有超过49,000个第三方库,超过3,000,000个app都在使用cocoaPods做依赖管理,CocoaPods可以帮助你优雅的扩展你的项目。 如果您未安装过cocoaPods,可以通过以下命令行进行安装。

//执行代码
sudo gem install cocoapods

2.配置Podfile文件
在您的工程文件所在文件夹下有一个名为Podfile的文件。如果您第一次使用CocoaPods,可以在通过以下命令初始化一个Podfile文件:

//执行代码
pod init

打开Podfile文件,应该是如下内容(具体内容可能会有一些出入):
Podfile文件里面写入如下代码:

# platform :ios, '9.0'
target '引入项目的target‘' do
  # use_frameworks!
end

3.修改Podfile文件,将pod 'DDDAdSdk'添加到Podfile中

# platform :ios, '9.0'
target '引入项目的target' do
  # use_frameworks!
 pod 'DDDAdSdk''~> 1.0.0.8' # 输入你想要的版本号
End

4.使用CocoaPods进行SDK部署
通过CocoaPods安装SDK前,确保CocoaPods索引已经更新。可以通过运行以下命令来更新索引:

//执行代码
pod repo update

运行命令进行安装:

//执行代码
pod install

也可以将上述两条命令合成为如下命令:

//执行代码
pod install --repo-update

命令执行成功后,会生成.xcworkspace文件,可以打开.xcworkspace来启动工程,如下图所示:

5.升级SDK
升级SDK时,首先要更新repo库,执行命令:

//执行代码
pod repo update

之后重新执行如下命令进行安装即可升级至最新版SDK

//执行代码
pod install

注意 :只有在Podfile文件中没有指定SDK版本时,运行上述命令才会自动升级到最新版本。不然需要修改Podfile文件,手动指定SDK版本为最新版本。
6:升指定SDK版本
指定SDK版本前,请先确保repo库为最新版本,参考上一小节内容进行更新。如果需要指定SDK版本,需要在Podfile文件中,pod那一行指定版本号:

//执行代码
pod 'DDDAdSdk''~> 1.0.0.8' #这里改成你想要的版本号

之后运行命令:

//执行代码
pod install

手动部署(建议采用pod方式引入)

1.导入framework和bundle
DDDAdSdk.framework
DDDAdSdk.bundle
BUAdSDK.bundle
BUAdSDK.framework
BUFoundation.framework
DyAdSdk.bundle
DDDAdZYSdk.framework
DDDgameSDK.framework
勾选Copy items if needed


2.导入依赖的其他工程
GDTMobSDK 4.12.3
Ads-CN 3.4.2.3
DDDAdZYSdk 1.0.0.10
DDDgameSDK 1.4.6.3
AFNetworking 4.0.1
SDWebImage 5.8.4

3:添加依赖库
AdSupport.framework
Accelerate.framework
AVFoundation.framework
CoreLocation.framework
CoreMedia.framework
CoreMotion.framework
CoreTelephony.framework
MediaPlayer.framework
MobileCoreServices.framework
QuartzCore.framework
Security.framework
StoreKit.framework
SystemConfiguration.framework
WebKit.framework
libc++.tbd
libresolv.9.tbd
libsqlite3.tbd
libz.tbd
libxml2.tbd
libbz2.tbd

编译选项设置

添加权限

注意要添加的系统库
工程plist文件设置,点击右边的information Property List后边的 "+" 展开
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。

<key>NSAppTransportSecurity</key>
    <dict>
         <key>NSAllowsArbitraryLoads</key>
         <true/>
    </dict>

具体操作如下图:

Build Settings中Other Linker Flags 增加参数-ObjC,SDK同时支持-all_load
具体操作如图:

适配iOS14注意事项

开发者升级 iOS 14 checklist

1.应用编译环境升级至 Xcode 12.0 及以上版本
2.将sdk的 SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行

<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>238da6jt44.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>22mmun2rn5.skadnetwork</string>
    </dict>
  </array>

3.支持苹果 ATT:从 iOS 14 开始,在应用程序调用 App Tracking Transparency 向用户提跟踪授权请求之前,IDFA 将不可用。 如果应用未提出此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低
要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例

<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>

4.要向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:,我们建议您申请权限后在请求广告,以便获得穿山甲准确获得用户的授权。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
...
- (void)requestIDFA {
  [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
    // Tracking authorization completed. Start loading ads here.
    // [self loadAd];
  }];
}
请注意:

1.App Tracking Transparency(ATT)适用于请求用户授权,访问与应用相关的数据以跟踪用户或设备。 访问 https://developer.apple.com/documentation/apptrackingtransparency 了解更多信息。
2.SKAdNetwork(SKAN)是 Apple 的归因解决方案,可帮助广告客户在保持用户隐私的同时衡量广告活动。 使用 Apple 的 SKAdNetwork 后,即使 IDFA 不可用,广告网络也可以正确获得应用安装的归因结果。 访问 https://developer.apple.com/documentation/storekit/skadnetwork 了解更多信息。

初始化

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、初始化代码

[[DDDAdSdkManager shareInstance] configSetSDKWithUserId:@""]; //传入用户id,当前app用户唯一标志
接入代码

开屏广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomic,strong) DDDSplashAdView *splashView;

3、初始化开屏广告

//开屏广告的宽
CGFloat width = [UIScreen mainScreen].bounds.size.width;
//开屏广告的高(这里120.0的高度为底部自定义logo视图的高度,如果不需要自定义底部视图这里的高度直接给屏幕高度)
CGFloat height = [UIScreen mainScreen].bounds.size.height - 120.0;
DDDSplashAdView *splashView = [[DDDSplashAdView alloc]initWithFrame:CGRectMake(0.00.0, width, height) andRootWindow:self.window andTolerateTimeout:5 andHideSkipButton:NO];
splashView.delegate = self;//设置开屏广告的代理
self.splashView = splashView;

4、实现代理方法(DDDSplashAdViewDelegate)

- (void)splashAdDidLoad:(DDDSplashAdView *)splashAd {
    //backView为需要展示的底部视图高度为初始化的120.0(高度可以自定义,但需要与初始化的高度相对应)--如果没有地图视图展示的时候传nil
    UIView *backView = [[UIView alloc]
initWithFrame:CGRectMake(0.0, [UIScreen mainScreen].bounds.size.height - 120.0, [UIScreen mainScreen].bounds.size.width, 120.0)];
    backView.backgroundColor = [UIColor redColor];
    [self.splashView showAdWithBottomView:backView];
}

5、代理方法详解

素材加载成功时候的回调
- (void)splashAdDidLoad:(DDDSplashAdView *)splashAd;
开屏广告关闭时回调
- (void)splashAdDidClose:(DDDSplashAdView *)splashAd;
加载失败时回调
errorCode 对应的错误码
- (void)splashAd:(DDDSplashAdView *)splashAd 
didFailWithError:(NSInteger)errorCode;
将要显示时回调
- (void)splashAdWillVisible:(DDDSplashAdView *)splashAd;
/// 单击广告时调用此方法。
- (void)splashAdDidClick:(DDDSplashAdView *)splashAd;
广告即将关闭时调用
- (void)splashAdWillClose:(DDDSplashAdView *)splashAd ;
关闭另一个控制器时调用
- (void)splashAdDidCloseOtherController:(DDDSplashAdView *)splashAd ;
单击广告跳过按钮时调用此方法
- (void)splashAdDidClickSkip:(DDDSplashAdView *)splashAd;
当广告倒数等于0时调用此方法(此方法后期可能移除)
- (void)splashAdCountdownToZero:(DDDSplashAdView *)splashAd;

激励视频广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomic,strong) DDDNativeExpressRewardedVideoAd *rewardedAd;

3、初始化激励视频广告

self.rewardedAd = [[DDDNativeExpressRewardedVideoAd alloc]  init];

4、设置激励视频广告代理

self.rewardedAd.delegate = self;
//加载激励视频广告
[self.rewardedAd loadAdData];
*实现代理方法(DDDNativeExpressRewardedVideoAdDelegate)
视频广告素材加载成功回调
- (void)nativeExpressRewardedVideoAdDidLoad:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告缓存成功回调(这个阶段可以判断显示激励视频)
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd

5、激励视频的显示

//rootViewController 当前控制器
- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController
//实现过程
if (self.rewardedAd.isAdValid) {
   [self.rewardedAd showAdFromRootViewController:
   self.navigationController]; 
}

6、代理方法详解

视频广告素材加载成功回调
- (void)nativeExpressRewardedVideoAdDidLoad:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告缓存成功回调
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告呈现前台成功时回调
- (void)nativeExpressRewardedVideoAdViewRenderSuccess:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告将要显示时调用
- (void)nativeExpressRewardedVideoAdWillVisible:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告显示时调用
- (void)nativeExpressRewardedVideoAdDidVisible:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告将要关闭时回调
- (void)nativeExpressRewardedVideoAdWillClose:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频广告关闭时回调
- (void)nativeExpressRewardedVideoAdDidClose:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
点击视频广告时回调
- (void)nativeExpressRewardedVideoAdDidClick:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
点击跳过按钮时的回调(当视频有跳过按钮时才会走此回调)
- (void)nativeExpressRewardedVideoAdDidClickSkip:(DDDNativeExpressRewardedVideoAd *)rewardedVideoAd;
视频播放失败时的回调
- (void)nativeExpressRewardedVideoAdDidPlayDidFailWithError:(NSInteger)errorCode;

draw信息流广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomicstrong) DDDNativeExpressAdManager *nativeExpressAdManager;

3、初始化draw信息流广告

CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;
//信息流视频宽高一般为屏幕的宽高
DDDNativeExpressAdManager *nativeExpressAdManager = [[DDDNativeExpressAdManager alloc] initWithAdSize:CGSizeMake(width, height) andUserID:@"接入方用户唯一标志(一般为你们当前app的用户id,这个参数是为了更好的查询激励广告数据,保证每个用户唯一)"];
//设置激draw信息流广告代理
nativeExpressAdManager.delegate = self;
//一次加载的个数(一次最多加载3条)
[nativeExpressAdManager loadAd:3];
self.nativeExpressAdManager = nativeExpressAdManager;

4、实现代理方法(DDDNativeExpressAdViewDelegate)

- (void)nativeExpressDrawAdSuccessToLoad:(DDDNativeExpressAdManager *)nativeExpressAd views:(NSArray<__kindof DDDNativeExpressAdView *> *)views {
    if (views.count) {
        //这里views为返回的广告视图数组(跟你请求的数据一致,注意容错,可能出现数量小于请求数量的可能)
    }
}

5、广告的显示(这里已UITableView为例)

if (views.count) {
        //这里将请求的view插入数据源中
           NSMutableArray *dataSources = [self.dataSource mutableCopy];
           [views enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx,         BOOL * _Nonnull stop) {
            DDDNativeExpressAdView *expressView = (DDDNativeExpressAdView *)obj;
            //设置返回view的代理
            expressView.rootViewController = self;
            //加载数据
            [expressView render];
             //将数据插入数据源中
            NSUInteger index = rand() % (self.dataSource.count-3)+2;
            [dataSources insertObject:expressView atIndex:index];
        }];
        self.dataSource = [dataSources copy];
    }
    [self.tableView reloadData];

6、代理方法详解

当视图成功加载广告时的回调
- (void)nativeExpressDrawAdSuccessToLoad:(DDDNativeExpressAdManager *)nativeExpressAd views:(NSArray<__kindof DDDNativeExpressAdView *> *)views;
//当视图加载失败时的回调
- (void)nativeExpressDrawAdFailToLoadError:(NSInteger)errorCode;
//视图呈现成功的回到
- (void)nativeExpressDrawAdViewRenderSuccess;
//广告显示失败时的回调
- (void)nativeExpressDrawAdViewRenderFailError:(NSInteger)errorCode;
//当广告视图即将显示内容时发送
- (void)nativeExpressDrawAdViewWillShow;
//当一个广告视图被点击时发送
- (void)nativeExpressDrawAdViewDidClick;
//播放完成后的回调  errorCode为0,表明播放完成,其他为未正常播放完成
- (void)nativeExpressDrawAdViewPlayerDidPlayFinishError:(NSInteger)errorCode;
//点击广告视图即将推出新视图时的回调
- (void)nativeExpressDrawAdViewWillPresentScreen;

信息流广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (strongnonatomic) DDDNativeAdsManager *nativeExpressAdManager;

3、初始化信息流广告

//宽度自己设置(这里设置为屏幕宽度)
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat heigh = 0.0;(高度给0,具体高度自适应)
//type类型详解
DDDNativeAdsManagerType_VerticalScreenVedio //竖屏视频模板
DDDNativeAdsManagerType_RunningHorse1//跑马灯信息流1
DDDNativeAdsManagerType_RunningHorse2//跑马灯信息流2
DDDNativeAdsManagerType_HorizontalScreenVedio//横版视频模板
DDDNativeAdsManagerType_UpTextDownImage//上文下图模板
DDDNativeAdsManagerType_UpTextDownImage2//上文下图附加创意模板
DDDNativeAdsManagerType_UpTextDownFloating//上文下浮层模板
DDDNativeAdsManagerType_TextFloating//文字浮层模板
DDDNativeAdsManagerType_LeftImageRightText//左图右文模板
DDDNativeAdsManagerType_LeftTextRightImage//左文右图模板
DDDNativeAdsManagerType_ThreeImage//三图模板
DDDNativeAdsManagerTXType_UpImageDownText//上图下文
DDDNativeAdsManagerTXType_UpTextDownImage//上文下图
DDDNativeAdsManagerTXType_DoubleImageText//双图双文
DDDNativeAdsManagerTXType_Image_1280_720//纯图片(横屏)
DDDNativeAdsManagerTXType_LeftImageRightText//左图右文
DDDNativeAdsManagerTXType_LeftTextRightImage//左文右图
DDDNativeAdsManagerTXType_ThreeImage//三小图
DDDNativeAdsManagerTXType_TextViewUpTextDownImage//文字浮层(上文下图)
DDDNativeAdsManagerTXType_TextViewUpImageDownText//文字浮层(上图下文)
DDDNativeAdsManagerTXType_TextViewImage//单图文
DDDNativeAdsManagerTXType_Image_1080_1920//纯图片(竖屏)
self.nativeExpressAdManager = [[DDDNativeAdsManager alloc]initWithAdSize:CGSizeMake(width, heigh) andAdType:DDDNativeAdsManagerType_VerticalScreenVedio];
//设置代理
self.nativeExpressAdManager.delegate = self;
//获取广告数据(一次最多三个)
[self.nativeExpressAdManager loadData:1];
*实现代理方法(DDDNativeAdsManagerDelegate)
//视图成功加载的回调
- (void)nativeExpressAdSuccessToLoadViews:(NSArray<__kindof DDDNativeExpressAdView *> *)views {
    if (views.count > 0) {
//这里views为返回的广告视图数组(跟你请求的数据一致,注意容错,可能出现数量小于请求数量的可能)
    }
}

4、广告的显示

if (views.count > 0) {
   DDDNativeExpressAdView *expressView = (DDDNativeExpressAdView *)views.firstObject;
   //设置返回view的代理
   expressView.rootViewController = self;
   //加载数据
   [expressView render];
   //将试图加载到要显示的位置(baseView为要显示的父视图,样例只请求加载一个试图,只为显示操作过程,实际项目中结合项目要求自己引用)
   [self.baseView addSubview:expressView];
}

5、代理方法详解

//视图成功加载的回调
- (void)nativeExpressAdSuccessToLoadViews:(NSArray<__kindof DDDNativeExpressAdView *> *)views;
//视图加载失败的回调
- (void)nativeExpressAdFailToLoadError:(NSInteger)errorCode;
//广告视图无法呈现时的回调
- (void)nativeExpressAdViewRenderFailRrror:(NSInteger)errorCode;
//视图即将呈现时的回调
- (void)nativeExpressAdViewWillShow ;
//点击视图的回调
- (void)nativeExpressAdViewDidClick;
//用户点击不喜欢
- (void)nativeExpressAdViewDislikeWithReason:(NSArray<NSString *> *_Nullable)filterwords;
//此方法在关闭另一个控制器时调用
- (void)nativeExpressAdViewDidCloseOtherController;
//原生模板广告渲染成功, 此时的height 根据 size.width 完成了动态更新
- (void)nativeExpressAdViewRenderSuccess;

banner广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomicstrong) DDDNativeExpressBannerView *bannerView;

3、初始化banner广告

CGSize size = CGSizeMake(60090);
CGFloat width = CGRectGetWidth([UIScreen mainScreen].bounds);
CGFloat height = width / size.width*size.height;
//当不需要轮播的时候初始化
DDDNativeExpressBannerView *bannerView = [[DDDNativeExpressBannerView alloc]initWithFrame:CGRectMake(00, width, height) rootViewController:self adType:NativeExpressBannerType_600_90 adSize:CGSizeMake(width, height) IsSupportDeepLink:YES];
//当需要轮播的时候初始化
DDDNativeExpressBannerView *bannerView = [[DDDNativeExpressBannerView alloc]initWithFrame:CGRectMake(00.0, width, height) rootViewController:self 
adType:NativeExpressBannerType_600_90 adSize:CGSizeMake(width, height) IsSupportDeepLink:YES interval:3];
//设置代理
bannerView.delegate = self;
self.bannerView = bannerView;
//添加视图(backView视图为要显示的父视图,具体根据实际项目处理)
[self.backView addSubview:self.bannerView];
//获取广告
[self.bannerView loadAdData];
//type详解(NativeExpressBannerType)
NativeExpressBannerType_600_90 宽高比为600:90
NativeExpressBannerType_640_100 宽高比为640:100
NativeExpressBannerType_600_150 宽高比为600:150
NativeExpressBannerType_690_388 宽高比为690:388
NativeExpressBannerType_600_260 宽高比为600:260
NativeExpressBannerType_600_300 宽高比为600:300
NativeExpressBannerType_600_400 宽高比为600:400
NativeExpressBannerType_600_500 宽高比为600:500
NativeExpressBannerType_64X10All 宽高比为640:100
NativeExpressBannerType_64X10Image 宽高比为640:100纯图
NativeExpressBannerType_64X10TextImage 宽高比为640:100图文

4、代理方法详解

//广告加载成功
- (void)nativeExpressBannerAdViewDidLoad;
//广告加载失败
- (void)nativeExpressBannerAdViewLoadFailWithError:(NSInteger )errorCode;
// 广告展现成功
- (void)nativeExpressBannerAdViewRenderSuccess;
//广告无法呈现
- (void)nativeExpressBannerAdViewRenderFailWithError:(NSInteger)errorCode;
//有新的广告调用此方法
- (void)nativeExpressBannerAdViewWillBecomVisible;
// 点击广告时回调
- (void)nativeExpressBannerAdViewDidClick;
// 此方法在关闭另一个控制器时调用
- (void)nativeExpressBannerAdViewDidCloseOtherController;
// 当广告被关闭的回调
- (void)nativeExpressBannerViewWillClose;

全屏视频广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomicstrong) DDDNativeExpressFullScreenVideoAd *fullscreenAd;

3、初始化全屏视频广告

DDDNativeExpressFullScreenVideoAd *fullscreenAd = [[DDDNativeExpressFullScreenVideoAd alloc] initWithType:DDDFullScreenType_VerticalVedio];
//设置代理
fullscreenAd.delegate = self;
self.fullscreenAd = fullscreenAd;
//加载广告
[self.fullscreenAd loadAdData];
type详解(DDDFullScreenType)
DDDFullScreenType_VerticalVedio 垂直
DDDFullScreenType_HorizontalVedio 水平

4、广告的显示

//是否可以展示
if (self.fullscreenAd.isAdValid) {
     //展示  传入当前控制器
     [self.fullscreenAd showAdRootViewController:self.navigationController];
}

5、实现代理方法(DDDNativeExpressFullScreenVideoAdDelegate)

// 当视频广告素材成功加载时的回调
- (void)nativeExpressFullscreenVideoAdDidLoad {
    //广告素材加载成功
}
//广告缓存成功时的回调 (可以在这里调用显示视频)
- (void)nativeExpressFullscreenVideoAdDidDownLoadVideo {
    //广告素材可以播放了
}

6、代理方法详解

// 当视频广告素材成功加载时的回调
- (void)nativeExpressFullscreenVideoAdDidLoad;
// 当加载视频广告材料失败时回调。
- (void)nativeExpressFullscreenVideoAdDidFailWithError:(NSInteger)errorCode;
// 呈现广告成功时的回调
- (void)nativeExpressFullscreenVideoAdViewRenderSuccess;
// 广告无法呈现时的回调
- (void)nativeExpressFullscreenVideoAdViewRenderFailError:(NSInteger)errorCode;
// 广告缓存成功时的回调
- (void)nativeExpressFullscreenVideoAdDidDownLoadVideo;
// 广告即将显示时回调
- (void)nativeExpressFullscreenVideoAdWillVisible;
// 广告已经显示的回调
- (void)nativeExpressFullscreenVideoAdDidVisible;
// 点击广告时的回调
- (void)nativeExpressFullscreenVideoAdDidClick;
// 单机跳过按钮的回调
- (void)nativeExpressFullscreenVideoAdDidClickSkip;
// 广告即将关闭时的回调
- (void)nativeExpressFullscreenVideoAdWillClose;
// 广告关闭时的回调
- (void)nativeExpressFullscreenVideoAdDidClose;
//广告播放完成或者出现错误后的回调
- (void)nativeExpressFullscreenVideoAdDidPlayFinishDidFailWithError:
(NSInteger)errorCode;
// 此方法在关闭另一个控制器时调用
- (void)nativeExpressFullscreenVideoAdDidCloseOtherController;

插屏广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、声明属性

@property (nonatomicstrong) DDDNativeExpressInterstitialAd *interstitialAd;

3、初始化插屏广告

DDDNativeExpressInterstitialAd *interstitialAd = [[DDDNativeExpressInterstitialAd alloc] initWithType:DDDInterstitialType_1_1  andAdSize:CGSizeMake(300300)];
interstitialAd.delegate = self;
self.interstitialAd = interstitialAd;
//加载广告
[self.interstitialAd loadAdData];
//type详解(DDDInterstitialType)
DDDInterstitialType_1_1//宽高比1:1
DDDInterstitialType_3_2//宽高比3:2
DDDInterstitialType_2_3//宽高比2:3 
DDDInterstitialType_Vertical//横版插屏
DDDInterstitialType_VerticalHorizontal//横/竖版插屏
DDDInterstitialType_FullScreen//全屏插屏-视频

4、插屏广告展示

//验证广告是否可以展示
if (self.interstitialAd.isAdValid) {
    //广告展示  rootViewController是用来推出广告内容的
    [self.interstitialAd showAdFromRootViewController:self.navigationController];
}

5、实现代理

/// 广告材料成功加载时回调
- (void)nativeExpresInterstitialAdDidLoad;

/// 广告材料加载失败时回调
/// @param errorCode 错误码
- (void)nativeExpresInterstitialAdDidFailWithError:(NSInteger)errorCode;

/// 广告成功加载时回调
- (void)nativeExpresInterstitialAdRenderSuccess;

/// 广告无法呈现时回调
/// @param errorCode 错误码
- (void)nativeExpresInterstitialAdRenderFailError:(NSInteger)errorCode;

/// 广告即将显示时回调
- (void)nativeExpresInterstitialAdWillVisible;

/// 点击了广告的回调
- (void)nativeExpresInterstitialAdDidClick;

/// 广告将要关闭时的回调
- (void)nativeExpresInterstitialAdWillClose;

/// 广告关闭时的回调
- (void)nativeExpresInterstitialAdDidClose;

/// 此方法在关闭另一个控制器时调用
- (void)nativeExpresInterstitialAdDidCloseOtherController;

互动广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、设置并展示互动广告

//初始化游戏
[DDDSportGameManager configSetSportGameResult:^(NSInteger resultCode) {
    if (resultCode == 0) {
       //初始化成功后开始展示传入当前控制器
       //可以自定义导航title
      [DDDSportGameManager presentListViewController:self andTitleName:@"互动广告"];
    } else {
         NSLog(@"互动广告初始化失败--%ld",resultCode);         
      }
}];

游戏广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、设置并展示游戏广告

//初始化游戏
[DDDAdGameManager configSetAdGameResult:^(NSInteger resultCode) {
   if (resultCode == 0) {
//初始化成功后开始展示传入当前控制器
      [DDDAdGameManager presentListViewController:self userId:@"当前app用户id" advertType:0];
   } else {
       NSLog(@"初始化失败--%ld",resultCode);
   }
}];
SDK错误码

220000 成功
220001 没有合适的广告返回而导致的请求没有填充,偶尔出现属于正常情况。
240000 http content type错误
240001 http request pb错误
240002 source_type=‘app’, 请求app不能为空
240003 source_type=‘wap’, 请求wap不能为空
240004 广告位不能为空
240005 广告位尺寸不能为空
240006 广告位ID不合法,例如,位数不对或者输入的广告位ID错误。
240007 广告数量错误
240008 图片尺寸错误
240009 媒体ID不合法
240010 媒体类型不合法
240011 广告类型不合法
240013 代码位ID是开屏代码位,但是adType不是开屏
240014 redirect参数不正确
240015 媒体请求里的字段上传的不正确或不完整,需要整改,请关注站内信的整改通知。
240016 代码位ID 与应用ID 不匹配或者应用ID 缺失。初始化时需要填写appid,且在activity中需要填写代码位ID。媒体要确保这两个ID填写正确且匹配。
240017 媒体接入类型不合法 API/SDK
240018 媒体在平台上录入的包名与项目里的包名不一致。
240019 媒体在平台上申请的代码位广告类型和代码中使用的广告类型接口不一致。例如平台上是开屏的广告类型,但是代码中请求的接口是banner或者其他非开屏的广告类型,如果不太清楚不同代码位类型对应的接口,麻烦去查询SDK包里的对接文档。
240020 开发注册新上线广告位超出日请求量限制
240021 apk签名SHA1值与媒体平台录入的SHA1不一致
240022 媒体在平台上申请的代码位“是否原生”属性与代码中使用的接口不匹配。
240023 os字段填的不对
240024 sdk 版本过低不返回广告
240025 渲染异常
240026 使用海外ip请求国内服务器导致,请确认使用的是国内ip请求广告。
240028 ios老设备(涉及设备 iPad 4G/iPad 3G/iPhone 5/iPhone 5C/iPad Mini 1G/iPad 2G/iPhone 4S)被屏蔽,会不返回广告。在2310版本后放开了限制,媒体可以更新到2310或者之后的版本
240029 两种情况:1. SDK版本低 2. 接口使用错误
250001 服务器错误
260001 show event处理错误
260002 click event处理错误
260007 激励视频验证服务器异常或处理失败
270001 数据解析失败。
270002 网络错误
270003 解析数据没有ad
270004 返回数据缺少必要字段
270005 bannerAd加载图片失败
270006 插屏广告图片加载失败
270007 开屏广告图片加载失败
270008 频繁请求
270009 请求实体为空
270010 缓存解析失败
270011 缓存过期
270012 缓存中没有开屏广告
270101 渲染结果数据解析失败
270102 未匹配到主模板:主模板没有下载到本地导致。偶发在首次请求广告时属于正常情况。
270103 未匹配到子模板:偶发在接入初期,没有匹配到模板导致。待sdk将模板下载成功后不会出现。
270104 物料数据异常
270105 模版数据解析异常
270106 渲染异常
270107 模板渲染超时未回调,可能原因有1. 网络原因或者2. 硬件原因,因此导致渲染失败,可以更换手机或者网络环境测试。
306000 未知错误,走了错误回调,未获取到错误码
303001 网络错误
303003 手机无网络
304001 初始化错误, 包括广告位为空、AppKey为空、ViewController为空
304003 广告位错误
304006 广告未曝光
304007 设备不支持
304008 设备方向不支持
304009 开屏跳过按钮定义非法
304010 开屏bottomView设置非法
304011 请求广告超时
304013 系统不支持,原生视频模板广告只支持 iOS 9 及以上系统
304014 广告数据返回前尝试展示广告, 例如激励视频拉到广告后才可以调用展示接口
304015 广告已经曝光过,不允许二次展示,请重新拉取
304016 应用横竖方向与广告位支持方向不匹配
304017 外部传入的VC无效
304018 缓存文件在流程中被意外删除
304019 开屏广告 rootViewController presentVC 被占用
304020 window为空
304021 appId 错误,未正确注册
305001 后台数据错误
305002 视频素材下载错误
305003 视频素材播放错误
305004 没匹配的广告,禁止重试,否则影响流量变现效果
305005 广告请求量或者消耗等超过日限额,请第二天再请求广告
305006 包名校验非法
305009 广告请求量或者消耗等超过小时限额,请一小时后再请求广告
305010 广告样式校验失败,请检查广告位与接口使用是否一致
305012 广告过期,请重新拉取
305013 广告拉取过于频繁,请稍后再试
305014 视频广告视频和图片素材都下载错误
305015 当前版本不出广告
305016 JSON数据解析失败
305017 adCount参数非法
305018 广告位下线
305019 视频时长超过设定时长
305020 视频URL为空
305021 广告已下线
305022 VAST接入错误
305024 接口组合错误
400001 没有初始化
400002 接口参数异常
400003 无匹配的广告
400004 广告adid有误
400005 广告参数有误
400006 广告展示错误
400007 视频展示参数有误
400008 广告下载失败
400009 网络请求错误(无网络,服务器出错等未能正常相应)
400010 请求接口参数有误
400011 未开通游戏广告
400012 设备异常
11000 设备触发风控
11001 短时间频繁请求
11002 广告位被封禁

打包注意事项

目前sdk不支持Bitcode打包时这只为NO,如图所示:

隐私数据
1.收集的数据类型
数据类型 收集情况 备注
联系信息 Contact Info
姓名 Name
电子邮件地址 Email Address
电话号码 Phone Number
实际地址 Physical Address
其他用户联系信息 Other User Contact Info
不收集
健康与健身 Health and Fitness
健康 Health
健身 Fitness
不收集
财务信息 Financial Info
付款信息 Payment Info
信用信息 Credit Info
其他财务信息 Other Financial Info
不收集
位置 Location
精确位置 Precise Location
粗略位置 Coarse Location
可选收集
不收集
通用sdk会获取地理位置信息用于广告投放与反作弊。 应用被用户授予地理位置权限时,通用sdk会获取地理位置信息,用于广告定向与反作弊; 当应用不获取地理位置权限时,通用sdk不会主动获取地理位置权限及地理位置信息。
敏感信息 Sensitive Info
不收集
联系人 Contacts
不收集
用户内容 User Content
电子邮件或短信内容 Emails or Text Messages
照片或视频 Photos or Videos
音频数据 Audio Data
游戏内容 Gameplay Content
客户支持 Customer Support
其他用户内容 Other User Content
不收集
浏览历史记录 Browsing History
不收集
搜索历史记录 Search History
不收集
标识符 Identifiers
用户ID User ID
设备ID Device ID
可选收集 设备ID
当应用被用户授予广告追踪权限时,通用sdk将获取idfa用于广告归因与追踪。
购买项目 Purchases
购物历史 Purchase History
不收集
使用数据 Usage Data
产品交互 Product Interaction
广告数据 Advertising Data
其他使用数据 Other Usage Data
不收集
收集
不收集
通用sdk广告将统计下列广告数据,以用于广告主统计投放结果。展示 、点击 、转化
诊断 Diagnostics
崩溃数据 Crash Data
性能数据 Performance Data
其他诊断数据 Other Diagnostic Data
收集
收集
不收集
崩溃数据
通用sdk将收集通用SDK带来的崩溃信息,以此来优化代码缺陷。
性能数据
通用sdk将收集SDK运行过程中性能数据,以优化通用SDK的性能。
其他数据 Other Data
其他数据类型 Other Data Types
收集 技术上我们还会收集一些设备信息(例如,设备型号、操作系统及版本、时区、网络类型等)
2. 数据使用目的

苹果明示了一系列的数据使用目的,需要开发者根据App中数据的使用情况进行披露。如下表所示,通用sdk依据自身功能,列举了数据的使用目的,以供参考。

基于媒体与通用sdk的合作目的,通用sdk收集数据的主要目的是用于“第三方广告”、“APP功能”(如流量变现的功能);其他使用目的基于媒体自己的使用情况而定。

使用目的 基于接入通用sdk的功能,选择数据的使用目的
第三方广告
Third-Party Advertising
开发者广告或营销内容
Developer’s Advertising or Marketing
如您的App使用数据用于显示应用中的第一方广告(包括与第三方共享以显示广告)或其他营销目的是,请选择 是
分析
Analytics
广告数据会用于分析,请选择 是
产品个性化
Product Personalization
如您的App将数据用于任何产品个性化功能,请选择 是
App 功能
App Functionality
其他用途
Other Purposes
如您的App出于其他目的使用数据,请选择 是
3. 与用户身份的关联性

通过通用sdk收集的数据类型通常连接到诸如设备ID(如果可用)之类的标识符,或者与其他标识符(如配置时由客户发布的ID)相连。 因此,在询问数据是否链接到身份时,应用程序开发人员应选择 是。

4. 关于用户追踪

根据苹果对追踪的定义,当应用被用户授予广告追踪权限时,通用sdk将获取IDFA用于广告归因与追踪。

资讯Android SDK接入文档(V1.0.2)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

注:若您项目中已经接入广点通(GDTSDK),请将他们的aar包删除,否则会与我们的包冲突。将他们删除后使用我方包并不会影响您软件已有广告展现, 同时我们资源包内预算价格更高。

一.添加gradle依赖

** Project的gradle下配置如下:**

** app的gradle配置如下:**

配置java8支持

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
二.开始使用

详细用法请参考Demo

SDK初始化

在使用咨讯之前调用初始化方法即可,一般放在Application的onCreate方法中:

SDK配置

对SDK进行基础配置,包括userId,nickName,avatar等,必须在调用了init初始化方法之后才能调用。

java8配置

项目的gradle中配置java8的支持,在android 节点下配置

获取资讯类别

获取咨讯类别调用

NewsManager.getInstance().getNewsCategory()

方法,返回已经开通的所有咨讯类别,之后就可以根据咨讯类别id获取对应类别下的咨讯数据。

加载显示资讯

对接者可根据自己业务需求将资讯添加到任何一个ViewGroup上显示出来,一般为单页面Activity的场景和Fragment的场景。

如果只加载一个类别的资讯,则取其中一个类别id加载即可,如果要配合Tablayout+ViewPager+Fragment显示多个资讯类别的资讯,则按照资讯类别创建对应的Fragment,然后在Fragment中再进行创建加载资讯view即可。

** 第一步:创建资讯view对象 **

参数1:上下文对象,传Activity

参数2:承载资讯view的父布局,一般为FragmeLayout(这里为根视图布局)

参数3:资讯类别id,获得的资讯类别中获取

** 第二步:开始加载显示资讯 **

调用NewsCaller对象的start()方法来启动资讯数据的渲染显示

** 第三步:销毁当前资讯view资源 **

调用NewsCaller对象的destroy()方法销毁释放资源,一定是在资讯所在的view或者页面销毁的时候调用(一般放在Activity的onDestroy回方法中),如果资讯还在显示的时候调用此方法会引发无法预估错误。

资讯SDK资源释放

销毁所有资源,在整个app生命周期中只调用一次,一般在应用退出或者后续不适用咨询时调用,如果调用了此方法,则下次加载咨询时需要从新调用 init方法进行初始化.

三.代码混淆

如果项目中开启了代码混淆,则在项目的proguard-rules.pro混淆文件中添加如下混淆 规则

四.错误码
错误码 描述
1000 没有开通广告位,联系管理员开通
1001 广告加载失败,检查网络连接与广告配置是否正确
1002 广告需要的parentView或者广告id为空
1003 激励视频播放错误,检查广告id是否配置正确
1004 手机权限申请失败
1005 Ip访问限制,通常为短时间频繁访问引起
1006 设备存在风险,如无效的SIM卡,使用模拟器等
1007 广告加载超时
2001 初始化错误
3001 网络异常
3003 网络类型错误,当前设备的网络类型不符合开屏广告的加载条件
4001 初始化错误, 包括广告位为空、App ID为空、Context/Activity为空
4002 请检查 Manifest 文件中的 Activity/Service/Permission 的声明是否正确以及声明的权限是否都已授予
4003 未知错误(联系业务对接)
4013 在旧版的 SDK 上使用了模板视频的广告位,需要升级 SDK
5005 广告请求量或者消耗等超过日限额,请明天再请求广告
5006 包名校验错误
5013 广告请求过于频繁
5018 未知错误(联系业务对接)
5019 未知错误(联系业务对接)
资讯IOS SDK接入文档(V1.0.0.3)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

注:若您项目中已经接入穿山甲(手动部署--BUAdSDK.bundle BUAdSDK.framework BUFoundation.framework, pod部署--Bytedance-UnionAD)和广点通(手动部署--GDTMobSDK文件夹 pod部署--GDTMobSDK),请将他们删除,否则会与我们的包冲突。将他们删除后使用我方包并不会影响您软件已有广告展现, 同时我们资源包内预算价格更高。

SDK项目部署

自动部署

1.安装CocoaPods
CocoaPods是一个Swift和Objective-C项目的依赖管理器。它拥有超过49,000个第三方库,超过3,000,000个app都在使用cocoaPods做依赖管理,CocoaPods可以帮助你优雅的扩展你的项目。 如果您未安装过cocoaPods,可以通过以下命令行进行安装。

终端执行代码:
sudo gem install cocoapods

2.配置Podfile文件
在您的工程文件所在文件夹下有一个名为Podfile的文件。如果您第一次使用CocoaPods,可以在通过以下命令初始化一个Podfile文件:

//终端执行代码
pod init

打开Podfile文件,应该是如下内容(具体内容可能会有一些出入):
Podfile文件里面写入如下代码:

# platform :ios, '9.0'
target '引入项目的target‘' do
  # use_frameworks!
end

3.修改Podfile文件,将pod 'DDDAdMsgViewSdk'添加到Podfile中,如下所示

# platform :ios, '9.0'
target '引入项目的target' do
  # use_frameworks!
  pod 'DDDAdMsgViewSdk''~> 1.0.0.3' # 输入你想要的版本号
End

4.使用CocoaPods进行SDK部署
通过CocoaPods安装SDK前,确保CocoaPods索引已经更新。可以通过运行以下命令来更新索引:

//终端执行代码
pod repo update

运行命令进行安装:

//终端执行代码
pod install

也可以将上述两条命令合成为如下命令:

//执行代码
pod install --repo-update

命令执行成功后,会生成.xcworkspace文件,可以打开.xcworkspace来启动工程,如下图所示:

5.升级SDK
升级SDK时,首先要更新repo库,执行命令:

//终端执行代码
pod repo update

之后重新执行如下命令进行安装即可升级至最新版SDK

//终端执行代码
pod install

注意 :只有在Podfile文件中没有指定SDK版本时,运行上述命令才会自动升级到最新版本。不然需要修改Podfile文件,手动指定SDK版本为最新版本。
6.升指定SDK版本
指定SDK版本前,请先确保repo库为最新版本,参考上一小节内容进行更新。如果需要指定SDK版本,需要在Podfile文件中,pod那一行指定版本号:

//执行代码
pod 'DDDAdSdk''~> 1.0.0.3' #这里改成你想要的版本号

之后运行命令:

//执行代码
pod install

手动部署(建议采用pod方式引入)

1.导入framework和bundle
DDDAdSdk.framework
DDDAdSdk.bundle
勾选Copy items if needed

2.导入依赖的其他工程
GDTMobSDK 4.11.12
AFNetworking 4.0.1
SDWebImage 5.8.4
JXCategoryView ~>1.5.6
MJRefresh ~>3.5.0
Masonry ~>1.1.0
CYLTableViewPlaceHolder ~>1.0.9
3.添加依赖库
AdSupport.framework
Accelerate.framework
AVFoundation.framework
CoreLocation.framework
CoreMedia.framework
CoreMotion.framework
CoreTelephony.framework
MediaPlayer.framework
MobileCoreServices.framework
QuartzCore.framework
Security.framework
StoreKit.framework
SystemConfiguration.framework
WebKit.framework
libc++.tbd
libresolv.9.tbd
libsqlite3.tbd
libz.tbd
libxml2.tbd
libbz2.tbd

编译选项设置

添加权限

注意要添加的系统库
工程plist文件设置,点击右边的information Property List后边的 "+" 展开。
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。

<key>NSAppTransportSecurity</key>
    <dict>
         <key>NSAllowsArbitraryLoads</key>
         <true/>
    </dict>

具体操作如下图:

Build Settings中Other Linker Flags 增加参数-ObjC,SDK同时支持-all_load
具体操作如图:

适配iOS14注意事项

开发者升级 iOS 14 checklist

1.应用编译环境升级至 Xcode 12.0 及以上版本。
2.支持苹果 ATT:从 iOS 14 开始,在应用程序调用 App Tracking Transparency 向用户提跟踪授权请求之前,IDFA 将不可用。 如果应用未提出此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低。
要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加
NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例

<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>

1.App Tracking Transparency(ATT)适用于请求用户授权,访问与应用相关的数据以跟踪用户或设备。 访问 https://developer.apple.com/documentation/apptrackingtransparency 了解更多信息。
2.SKAdNetwork(SKAN)是 Apple 的归因解决方案,可帮助广告客户在保持用户隐私的同时衡量广告活动。 使用 Apple 的 SKAdNetwork 后,即使 IDFA 不可用,广告网络也可以正确获得应用安装的归因结果。
访问 https://developer.apple.com/documentation/storekit/skadnetwork 了解更多信息。

接入代码
#import <DDDAdMsgViewSdk/DDDAdMsgViewSdk.h>
@property (nonatomic,strong) DDDAdMsgMainView *mainView;
可使用懒加载添加视图,或直接实例化视图,并最终将其添加到view上,使用如下方法实例化对象:用户昵称和用户图像可不传,不传时填写 nil
- (instancetype)initWithFrame:(CGRect)frame andRootViewController:(UIViewController *)rootVC userName:(nullable NSString *)nameStr userHeaderImageStr:(nullable NSString *)userImage
打包注意事项

目前sdk不支持Bitcode 打包时这只为NO,如图所示:

上架App store

请按照下图选择:

Draw信息流Android SDK接入文档(V1.0.5)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

注:若您项目中已经接入穿山甲(open_ad_sdk)和广点通(GDTSDK),请将他们的aar包删除,否则会与我们的包冲突。将他们删除后使用我方包并不会影响您软件已有广告展现, 同时我们资源包内预算价格更高。

Draw信息流接入文档

** userid App内单个用户对应的唯一id

1.外层gradle配置如下maven地址:

2.主工程gradle配置maven引入

3.Application 中初始化如下

4.拉起Draw视频

游戏中心Android SDK接入文档(V1.1.0)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

一.添加gradle依赖

** Project的gradle下配置如下:**

** app的gradle配置如下:**

目前为AndroidX版本,如果出现Support项目兼容问题,请及时联系我们。

配置java8支持

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
二.开始使用

详细用法请参考Demo

SDK初始化

在使用游戏之前调用初始化方法即可,一般放在Application的onCreate方法中:

拉起游戏

参数1 :Activity上下文

参数2 :用户id

三.更新日志

2020年11月24日

1.修复部分OPPO设备获取oaid,version oiad1.0.23

四.错误码
错误码 描述
1000 没有开通广告位,联系管理员开通
1001 广告加载失败,检查网络连接与广告配置是否正确
1002 广告需要的parentView或者广告id为空
1003 激励视频播放错误,检查广告id是否配置正确
1004 手机权限申请失败
1005 Ip访问限制,通常为短时间频繁访问引起
1006 设备存在风险,如无效的SIM卡,使用模拟器等
1007 广告加载超时
2001 初始化错误
3001 网络异常
3003 网络类型错误,当前设备的网络类型不符合开屏广告的加载条件
4001 初始化错误, 包括广告位为空、App ID为空、Context/Activity为空
4002 请检查 Manifest 文件中的 Activity/Service/Permission 的声明是否正确以及声明的权限是否都已授予
4003 未知错误(联系业务对接)
4013 在旧版的 SDK 上使用了模板视频的广告位,需要升级 SDK
5005 广告请求量或者消耗等超过日限额,请明天再请求广告
5006 包名校验错误
5013 广告请求过于频繁
5018 未知错误(联系业务对接)
5019 未知错误(联系业务对接)
游戏中心IOS SDK接入文档(V1.4.6.3)

尊敬的合作商:

此文档仅限合作商APP前期接入使用!注意此版本无屏蔽规则。请特别注意!我司回调皆为实时回调,各位开发者请自行添加判断逻辑!感谢支持,或者如有问题,请及时联系商务对接人。

SDK项目部署

自动部署

1.安装CocoaPods
CocoaPods是一个Swift和Objective-C项目的依赖管理器。它拥有超过49,000个第三方库,超过3,000,000个app都在使用cocoaPods做依赖管理,CocoaPods可以帮助你优雅的扩展你的项目。 如果您未安装过cocoaPods,可以通过以下命令行进行安装。

//执行代码
sudo gem install cocoapods

2.配置Podfile文件
在您的工程文件所在文件夹下有一个名为Podfile的文件。如果您第一次使用CocoaPods,可以在通过以下命令初始化一个Podfile文件:

//执行代码
pod init

打开Podfile文件,应该是如下内容(具体内容可能会有一些出入):
Podfile文件里面写入如下代码:

# platform :ios, '9.0'
target '引入项目的target‘' do
  # use_frameworks!
end

3.修改Podfile文件,将pod 'DDDgameSDK'添加到Podfile中

# platform :ios, '9.0'
target '引入项目的target' do
  # use_frameworks!
 pod 'DDDgameSDK''~> 1.4.6.3' # 输入你想要的版本号
End

4.使用CocoaPods进行SDK部署
通过CocoaPods安装SDK前,确保CocoaPods索引已经更新。可以通过运行以下命令来更新索引:

//执行代码
pod repo update

运行命令进行安装:

//执行代码
pod install

也可以将上述两条命令合成为如下命令:

//执行代码
pod install --repo-update

命令执行成功后,会生成.xcworkspace文件,可以打开.xcworkspace来启动工程,如下图所示:

5.升级SDK
升级SDK时,首先要更新repo库,执行命令:

//执行代码
pod repo update

之后重新执行如下命令进行安装即可升级至最新版SDK

//执行代码
pod install

注意 :只有在Podfile文件中没有指定SDK版本时,运行上述命令才会自动升级到最新版本。不然需要修改Podfile文件,手动指定SDK版本为最新版本。
6:升指定SDK版本
指定SDK版本前,请先确保repo库为最新版本,参考上一小节内容进行更新。如果需要指定SDK版本,需要在Podfile文件中,pod那一行指定版本号:

//执行代码
pod 'DDDgameSDK''~> 1.4.6.3' #这里改成你想要的版本号

之后运行命令:

//执行代码
pod install

手动部署(建议采用pod方式引入)

1.导入framework和bundle
DDDgameSDK.framework
DyAdSdk.bundle
勾选Copy items if needed

编译选项设置

添加权限

注意要添加的系统库
工程plist文件设置,点击右边的information Property List后边的 "+" 展开
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。

<key>NSAppTransportSecurity</key>
    <dict>
         <key>NSAllowsArbitraryLoads</key>
         <true/>
    </dict>
接入代码

游戏广告

1、首先引入sdk

#import <DDDAdSdk/DDDAdSdk.h>

2、设置并展示游戏广告

//初始化游戏
[DDDAdGameManager configSetAdGameResult:^(NSInteger resultCode) {
   if (resultCode == 0) {
//初始化成功后开始展示传入当前控制器
      [DDDAdGameManager presentListViewController:self userId:@"当前app用户id" advertType:0];
   } else {
       NSLog(@"初始化失败--%ld",resultCode);
   }
}];
SDK错误码

400001 没有初始化
400002 接口参数异常
400003 无匹配的广告
400004 广告adid有误
400005 广告参数有误
400006 广告展示错误
400007 展示参数有误
400008 广告下载失败
400009 网络请求错误(无网络,服务器出错等未能正常相应)
400010 请求接口参数有误
400011 未开通游戏广告

打包注意事项

目前sdk不支持Bitcode 打包时这只为NO,如图所示: