跳到主要内容

Dirichlet Ad SDK iOS 接入文档

SDK 概述

Dirichlet Ad 是一款功能完善的 iOS 广告 SDK,支持多种广告形式:

  • 开屏广告(Splash Ad):应用启动时展示的全屏广告
  • 激励视频广告(Reward Video Ad):用户观看完整视频后获得奖励
  • Banner广告:固定位置的横幅广告
  • 插屏广告(Interstitial Ad):全屏或半屏的插屏广告
  • 信息流广告(Feed Ad):嵌入内容流中的原生广告

主要特性:

  • 丰富的自定义配置选项
  • 完善的隐私合规控制
  • 多样化的广告交互回调

系统要求

  • 最低系统版本:iOS 11.0+
  • 开发工具:Xcode 12.0+
  • 依赖管理:CocoaPods 1.10.0+

SDK 集成

配置 Podfile 文件

修改 Podfile 文件,添加 SDK 依赖:

platform :ios, '11.0'
use_frameworks!

target 'YourProjectName' do
# Dirichlet Ad
pod 'DirichletAdSDK', '~> 4.2.0.1'
end

安装 SDK

如果未安装过 CocoaPods,可以通过以下命令行进行安装:

$ sudo gem install cocoapods

通过 CocoaPods 安装前,确保 CocoaPods 索引已经更新:

$ pod repo update

运行命令进行安装:

$ pod install

Xcode 配置

App Tracking Transparency (ATT)

从 iOS 14 开始,需要在 Info.plist 中添加 ATT 权限描述:

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

iOS 14.5 以上在拉取广告前请求 ATT 权限:

#import <AppTrackingTransparency/AppTrackingTransparency.h>

if (@available(iOS 14.5, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
switch (status) {
case ATTrackingManagerAuthorizationStatusDenied:
NSLog(@"用户拒绝了跟踪权限");
break;
case ATTrackingManagerAuthorizationStatusAuthorized:
NSLog(@"用户授权了跟踪权限");
break;
case ATTrackingManagerAuthorizationStatusRestricted:
NSLog(@"跟踪权限受限");
break;
case ATTrackingManagerAuthorizationStatusNotDetermined:
NSLog(@"用户尚未决定跟踪权限");
break;
default:
break;
}
}];
}

SDK 初始化

基本初始化

#import <DirichletAdSDK/DirichletAdSDK.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建配置对象
DRASDKConfig *config = [[DRASDKConfig alloc] initWithMediaId:@"YOUR_MEDIA_ID"
mediaKey:@"YOUR_MEDIA_KEY"];

// 配置调试模式(可选,默认为 NO,正式发布前应改为 NO)
config.isDebug = NO;

// 设置是否启用摇一摇功能(可选,默认为 YES)
config.shakeEnabled = YES;

// 设置游戏渠道信息(可选)
config.gameChannel = @"TapTap";

// 初始化 SDK
[DirichletAd startWithConfig:config completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"SDK 初始化成功");
// 可以开始请求广告
} else {
NSLog(@"SDK 初始化失败: %@", error.localizedDescription);
}
}];

return YES;
}

完整配置示例

// 创建配置对象
DRASDKConfig *config = [[DRASDKConfig alloc] initWithMediaId:@"YOUR_MEDIA_ID"
mediaKey:@"YOUR_MEDIA_KEY"];

// 设置媒体名称(可选)
config.mediaName = @"YourAppName";

// 设置游戏渠道(可选)
config.gameChannel = @"TapTap";

// 设置调试模式(可选)
config.isDebug = NO;

// 设置是否启用摇一摇功能(可选,默认为 YES)
config.shakeEnabled = YES;

// 设置是否启用视频预缓存(可选,默认为 YES)
config.enableVideoPreCache = YES;

// 设置 TapTap Client ID(可选)
config.tapClientId = @"YOUR_TAP_CLIENT_ID";

// 设置自定义信息提供者(可选)
config.customInfoProvider = [[MyCustomInfoProvider alloc] init];

// 设置是否允许访问 IDFA(可选,默认为 YES)
config.allowIDFAAccess = YES;

// 初始化 SDK
[DirichletAd startWithConfig:config completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"SDK 初始化成功");
} else {
NSLog(@"SDK 初始化失败: %@", error.localizedDescription);
}
}];

配置参数说明

@interface DRASDKConfig : NSObject

// ===== 必需参数 =====
/// 媒体 ID(必填)
@property (nonatomic, copy, readonly) NSString *mediaId;

/// 媒体密钥(必填)
@property (nonatomic, copy, readonly) NSString *mediaKey;

// ===== 可选参数 =====
/// 媒体名称
@property (nonatomic, copy, nullable) NSString *mediaName;

/// 游戏渠道信息
@property (nonatomic, copy, nullable) NSString *gameChannel;

/// 是否开启调试模式(默认 NO)
@property (nonatomic, assign) BOOL isDebug;

/// 是否启用摇一摇功能(默认 YES)
@property (nonatomic, assign, getter=isShakeEnabled) BOOL shakeEnabled;

/// 是否启用视频预缓存(默认 YES)
@property (nonatomic, assign, getter=isEnableVideoPreCache) BOOL enableVideoPreCache;

/// TapTap 客户端 ID
@property (nonatomic, copy, nullable) NSString *tapClientId;

/// 自定义信息提供者
@property (nonatomic, strong, nullable) id<DRACustomInfoProviding> customInfoProvider;

/// CTA 拦截器
@property (nonatomic, weak, nullable) id<DRACTAInterceptor> ctaInterceptor;

/// 是否允许访问 IDFA(默认 YES)
@property (nonatomic, assign) BOOL allowIDFAAccess;

@end

广告类型

开屏广告

开屏广告为用户在进入 App 时展示的全屏广告。

信息

竖屏开屏广告要求 width = 屏幕宽,height 需要 >= 75% 屏幕高,否则会影响计费。

横屏开屏广告要求 width = 屏幕宽,height 需要 = 屏幕高,否则会影响计费。

获取广告

#import <DirichletAdSDK/DirichletAdSDK.h>

@interface SplashViewController () <DRASplashAdDelegate>
@property (nonatomic, strong) DRASplashAd *splashAd;
@end

@implementation SplashViewController

- (void)loadSplashAd {
// 创建加载请求
DRASplashAdLoadRequest *request = [[[DRASplashAdLoadRequest builder]
withSpaceId:@"YOUR_SPLASH_AD_SPACE_ID"]
withLogoImage:[UIImage imageNamed:@"app_logo"]] // 可选:配置自定义 Logo
build];

// 加载开屏广告
[DRASplashAd loadWithRequest:request completion:^(DRASplashAd * _Nullable ad, NSError * _Nullable error) {
if (error) {
NSLog(@"开屏广告加载失败: %@", error.localizedDescription);
// 跳转到主页面
[self goToMainActivity];
return;
}

if (ad && ad.isReady) {
self.splashAd = ad;
self.splashAd.delegate = self;
// 展示广告
[self.splashAd showFromViewController:self];
}
}];
}

- (void)goToMainActivity {
// 跳转到主页面逻辑
}

#pragma mark - DRASplashAdDelegate

- (void)dirichletAdDidLoad:(id<DRAAd>)ad {
NSLog(@"开屏广告加载完成");
}

- (void)dirichletAdDidShow:(id<DRAAd>)ad {
NSLog(@"开屏广告开始展示");
}

- (void)dirichletSplashAdDidValidShow:(DRASplashAd *)splashAd {
NSLog(@"开屏广告有效展示");
}

- (void)dirichletSplashAdDidSkip:(DRASplashAd *)splashAd {
NSLog(@"开屏广告被跳过");
[self goToMainActivity];
}

- (void)dirichletSplashAdDidTimeOver:(DRASplashAd *)splashAd {
NSLog(@"开屏广告倒计时结束");
[self goToMainActivity];
}

- (void)dirichletAdDidClose:(id<DRAAd>)ad {
NSLog(@"开屏广告关闭");
self.splashAd = nil;
[self goToMainActivity];
}

- (void)dirichletAd:(id<DRAAd>)ad didFailWithError:(NSError *)error {
NSLog(@"开屏广告错误: %@", error.localizedDescription);
}

@end

激励视频广告

激励视频是一种全屏播放的视频广告,用户可以在观看完整的视频后获取奖励。

信息
  • 全屏横屏(宽高比 16:9)
  • 全屏竖屏(宽高比 9:16)

获取广告

#import <DirichletAdSDK/DirichletAdSDK.h>

@interface RewardedAdViewController () <DRARewardedAdDelegate>
@property (nonatomic, strong) DRARewardedAd *rewardedAd;
@end

@implementation RewardedAdViewController

- (void)loadRewardedAd {
// 创建加载请求
DRARewardedAdLoadRequest *request = [[[DRARewardedAdLoadRequest builder]
withSpaceId:@"YOUR_REWARD_AD_SPACE_ID"]
withRewardName:@"金币"] // 可选:奖励名称
withRewardAmount:100] // 可选:奖励数量
build];

// 加载激励视频广告
[DRARewardedAd loadWithRequest:request completion:^(DRARewardedAd * _Nullable ad, NSError * _Nullable error) {
if (error) {
NSLog(@"激励视频广告加载失败: %@", error.localizedDescription);
return;
}

if (ad) {
self.rewardedAd = ad;
self.rewardedAd.delegate = self;
NSLog(@"激励视频广告加载成功");
}
}];
}

- (void)showRewardedAd {
if (self.rewardedAd && self.rewardedAd.isReady) {
[self.rewardedAd showFromViewController:self];
} else {
NSLog(@"激励视频广告未就绪");
}
}

#pragma mark - DRARewardedAdDelegate

- (void)dirichletAdDidLoad:(id<DRAAd>)ad {
NSLog(@"激励视频广告加载完成");
}

- (void)dirichletAdDidShow:(id<DRAAd>)ad {
NSLog(@"激励视频广告开始展示");
}

- (void)dirichletAdDidClick:(id<DRAAd>)ad {
NSLog(@"用户点击激励视频广告");
}

- (void)rewardedAd:(DRARewardedAd *)ad
didVerifyReward:(BOOL)verified
rewardAmount:(NSInteger)amount
rewardName:(NSString *)name {
if (verified) {
NSLog(@"用户获得奖励: %@ x %ld", name, (long)amount);
// 发放奖励给用户
} else {
NSLog(@"奖励验证失败");
}
}

- (void)dirichletAdDidClose:(id<DRAAd>)ad {
NSLog(@"激励视频广告关闭");
self.rewardedAd = nil;
}

- (void)dirichletAd:(id<DRAAd>)ad didFailWithError:(NSError *)error {
NSLog(@"激励视频广告错误: %@", error.localizedDescription);
}

@end

插屏广告

插屏广告支持「全屏视频广告」、「全屏图文广告」和「半屏图文广告」等形式。

提示

插屏广告分横竖屏形式,强烈建议在后台配置后正确使用横屏或竖屏广告,若用错配置的 orientation,可能会出现 UI 兼容异常问题。

获取广告

#import <DirichletAdSDK/DirichletAdSDK.h>

@interface InterstitialViewController () <DRAInterstitialAdDelegate>
@property (nonatomic, strong) DRAInterstitialAd *interstitialAd;
@end

@implementation InterstitialViewController

- (void)loadInterstitialAd {
// 创建加载请求
DRAInterstitialAdLoadRequest *request = [[[DRAInterstitialAdLoadRequest builder]
withSpaceId:@"YOUR_INTERSTITIAL_AD_SPACE_ID"]
build];

// 加载插屏广告
[DRAInterstitialAd loadWithRequest:request completion:^(DRAInterstitialAd * _Nullable ad, NSError * _Nullable error) {
if (error) {
NSLog(@"插屏广告加载失败: %@", error.localizedDescription);
return;
}

if (ad) {
self.interstitialAd = ad;
self.interstitialAd.delegate = self;
NSLog(@"插屏广告加载成功");
}
}];
}

- (void)showInterstitialAd {
if (self.interstitialAd && self.interstitialAd.isReady) {
[self.interstitialAd showFromViewController:self];
} else {
NSLog(@"插屏广告未就绪");
}
}

#pragma mark - DRAInterstitialAdDelegate

- (void)dirichletAdDidLoad:(id<DRAAd>)ad {
NSLog(@"插屏广告加载完成");
}

- (void)dirichletAdDidShow:(id<DRAAd>)ad {
NSLog(@"插屏广告开始展示");
}

- (void)dirichletAdDidClick:(id<DRAAd>)ad {
NSLog(@"用户点击插屏广告");
}

- (void)dirichletAdDidClose:(id<DRAAd>)ad {
NSLog(@"插屏广告关闭");
self.interstitialAd = nil;
}

- (void)dirichletAd:(id<DRAAd>)ad didFailWithError:(NSError *)error {
NSLog(@"插屏广告错误: %@", error.localizedDescription);
}

@end

模版渲染 Banner:开发者不用自行对广告样式进行编辑和渲染,可直接调用相关接口进行广告展示。

获取广告

#import <DirichletAdSDK/DirichletAdSDK.h>

@interface BannerViewController () <DRABannerAdViewDelegate>
@property (nonatomic, strong) DRABannerAdView *bannerView;
@end

@implementation BannerViewController

- (void)loadBannerAd {
// 创建 Banner 视图
self.bannerView = [[DRABannerAdView alloc] init];
self.bannerView.delegate = self;
self.bannerView.frame = CGRectMake(0, 0, 320, 50);
[self.view addSubview:self.bannerView];

// 创建加载请求
DRABannerAdLoadRequest *request = [[[DRABannerAdLoadRequest builder]
withSpaceId:@"YOUR_BANNER_AD_SPACE_ID"]
build];

// 加载广告
[self.bannerView loadWithRequest:request];
}

#pragma mark - DRABannerAdViewDelegate

- (void)bannerAdViewDidLoad:(DRABannerAdView *)bannerAdView {
NSLog(@"Banner 广告加载完成");
}

- (void)bannerAdViewDidShow:(DRABannerAdView *)bannerAdView {
NSLog(@"Banner 广告展示");
}

- (void)bannerAdViewDidClick:(DRABannerAdView *)bannerAdView {
NSLog(@"Banner 广告被点击");
}

- (void)bannerAdView:(DRABannerAdView *)bannerAdView didFailWithError:(NSError *)error {
NSLog(@"Banner 广告加载失败: %@", error.localizedDescription);
}

@end

信息流广告

信息流广告是融入内容流的原生广告,支持模板渲染和自定义渲染两种方式。

模板渲染信息流广告

#import <DirichletAdSDK/DirichletAdSDK.h>

- (void)loadFeedAd {
// 创建加载请求
DRAFeedAdLoadRequest *request = [[[DRAFeedAdLoadRequest builder]
withSpaceId:@"YOUR_FEED_AD_SPACE_ID"]
build];

// 加载广告
[DRAFeedAd loadWithRequest:request completion:^(NSArray<DRAFeedAd *> * _Nullable ads, NSError * _Nullable error) {
if (error) {
NSLog(@"信息流广告加载失败: %@", error.localizedDescription);
return;
}

if (ads.count > 0) {
DRAFeedAd *feedAd = ads.firstObject;
feedAd.delegate = self;

// 获取广告视图
UIView *adView = feedAd.adView;

// 将广告视图添加到容器中
[self.contentView addSubview:adView];

// 设置自动布局约束
adView.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
[adView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor],
[adView.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor],
[adView.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor]
]];
}
}];
}

高级功能

自定义信息提供者

通过实现 DRACustomInfoProviding 协议可以提供位置和用户画像信息:

@interface MyCustomInfoProvider : NSObject <DRACustomInfoProviding>
@end

@implementation MyCustomInfoProvider

- (BOOL)canUseLocation {
// 控制是否允许使用位置信息
return YES;
}

- (CLLocationDegrees)latitude {
// 返回当前纬度
return 39.9042;
}

- (CLLocationDegrees)longitude {
// 返回当前经度
return 116.4074;
}

- (NSDictionary<NSString *, NSString *> *)userProfile {
// 返回用户画像信息
return @{
@"age": @"25",
@"gender": @"1"
};
}

@end

// 使用自定义信息提供者
config.customInfoProvider = [[MyCustomInfoProvider alloc] init];

CTA 拦截器

通过实现 DRACTAInterceptor 协议可以自定义广告跳转行为:

@interface MyCTAInterceptor : NSObject <DRACTAInterceptor>
@end

@implementation MyCTAInterceptor

- (BOOL)interceptCTAActionWithContext:(DRACTAContext *)context {
// 自定义处理逻辑
if (context.actionType == DRACTAActionTypeOpenURL) {
NSURL *url = context.url;
// 使用自定义的 WebView 打开
return YES; // 返回 YES 拦截默认行为
}
return NO; // 返回 NO 执行默认行为
}

@end

// 使用 CTA 拦截器
config.ctaInterceptor = [[MyCTAInterceptor alloc] init];

清理缓存

// 清理所有缓存
[DirichletAd clearAllCache];

测试与调试

开启调试模式

在开发阶段,建议开启 SDK 的调试模式以获取详细日志:

DRASDKConfig *config = [[DRASDKConfig alloc] initWithMediaId:@"YOUR_MEDIA_ID" 
mediaKey:@"YOUR_MEDIA_KEY"];
// 配置调试模式(正式发布时务必关闭)
config.isDebug = NO;

// 初始化 SDK
[DirichletAd startWithConfig:config completion:^(BOOL success, NSError * _Nullable error) {
// ...
}];

注意

  • 调试模式会输出大量日志,帮助排查问题
  • 正式发布时必须关闭调试模式(设置为 NO)
  • 调试模式可能影响性能,不要在生产环境使用

问题排查清单

如果遇到广告无法展示的问题,请按以下清单排查:

  • SDK 是否正确初始化(在 AppDelegate 的 didFinishLaunchingWithOptions 中)
  • mediaId、mediaKey 等参数是否正确
  • 是否在主线程调用 SDK 方法
  • 广告容器是否正确添加到布局
  • ViewController 是否已销毁(广告展示时)
  • 是否开启了调试模式查看日志
  • 广告位 ID(spaceId)是否正确
  • 是否在合适的时机调用清理方法
  • ATT 权限是否已请求

常见问题

SDK 初始化失败怎么办?

请检查以下几点:

  1. 确保 mediaIdmediaKey 正确
  2. 检查网络连接状态
  3. 查看控制台日志输出,定位具体错误原因

广告加载失败怎么办?

可能的原因:

  1. 广告位配置错误
  2. 网络连接问题
  3. 广告位无可用广告
  4. 请求频率过高

如何处理广告生命周期事件?

每种广告类型都有对应的代理协议:

  • DRARewardedAdDelegate: 激励视频广告代理
  • DRAInterstitialAdDelegate: 插屏广告代理
  • DRASplashAdDelegate: 开屏广告代理
  • DRABannerAdViewDelegate: Banner 广告代理
  • DRAFeedAdDelegate: 信息流广告代理

支持哪些 iOS 版本?

最低支持 iOS 11.0,建议使用 iOS 12.0 及以上版本以获得最佳性能。

如何避免内存泄漏?

  1. 及时调用广告对象的清理方法
  2. 不要在静态变量中持有广告对象
  3. ViewController 销毁时清理所有广告引用
  4. 使用 weak delegate 引用

更新日志

v4.2.0.1 (2026-01-01)

  • 稳定性提升,性能优化
  • 修复已知问题

v4.1.2.5 (2025-12-05)

  • 稳定性提升
  • 修复已知问题

v4.1.2.0 (2025-12-01)

  • 稳定性优化
  • 修复已知问题

v4.1.0.14 (2025-11-11)

  • 优化 SDK 体积与启动性能
  • 修复已知问题,提升整体稳定性

v4.1.0.13 (2025-11-07)

  • 新增 allowIDFAAccess 配置项,默认为 YES
  • 优化广告加载性能
  • 修复已知问题

v4.1.0.11 (2025-10-29)

  • 首个正式发布版本
  • 支持激励视频、插屏、开屏、Banner、信息流广告
  • 支持自定义 CTA 拦截器
  • 支持自定义信息提供者

激励视频奖励发放说明

奖励发放条件

一般视频总时长为 10~60s,30s 以上的视频播放到 30s 时会显示"跳过"按钮。低于30s的激励视频观看达到 90% 即会回调奖励验证接口,高于 30s 激励视频观看到第 27s 的时候即会回调奖励验证接口。

奖励发放主要流程

  • **客户端回调的优势:**对接简单、高效,通过接口回调结果在客户端完成奖励是否发放即可。
  • **服务端回调的优势:**开发者可在服务端进行二次校验,保证广告有效性后做出奖励发放,反作弊能力强。

奖励验证服务端回调 (S2S 验证)

提示

S2S 验证需要开发者提供奖励发放的回调 URL,Security Key 由 Dirichlet Ad 服务端生成并提供给开发者,现阶段通过 KA 单点对接提供

  • 服务器回调模式不是必须的,只是增加了一次第三方服务器的验证判断。具体的奖励发放由客户端完成。
  • 服务端回调逻辑:Dirichlet Ad 根据"奖励发放条件",先通过 "Dirichlet Ad 服务端"访问"开发者媒体服务端"向开发者确认是否进行奖励发放,再依据"开发者服务端"返回的 true/false,在客户端给出是/否发放奖励的回调。
  • Dirichlet Ad 服务端只是透传验证请求,不会在中间过程添加校验逻辑。为了保障开发者利益和用户体验,开发者可以在验证环节增加自己的校验逻辑。

SDK 奖励发放回调接口

接口说明

/// 激励视频奖励验证回调
/// @param ad 激励视频广告对象
/// @param verified 是否验证通过
/// @param amount 奖励数量
/// @param name 奖励名称
- (void)rewardedAd:(DRARewardedAd *)ad
didVerifyReward:(BOOL)verified
rewardAmount:(NSInteger)amount
rewardName:(NSString *)name;

透传参数

SDK 传给 Dirichlet Ad 服务端:

字段名称字段定义字段类型备注
user_id用户idstring调用SDK透传,应用对用户的唯一标识
extra其他信息string调用SDK传入并透传,如无需要则为空

奖励验证方式

1. 同步验证

  1. 满足"奖励发放条件"
  2. 调用"奖励验证回调接口",并等待返回
  3. 调用 didVerifyReward 回调
    • verified = 回调接口返回的 isValid
    • 如果接口异常,verified = NO
  4. 开发者可根据 verified 决定是否发放奖励

2. 异步验证

  1. 满足"奖励发放条件"
  2. 调用"奖励验证回调接口",不等待返回
  3. 调用 didVerifyReward 回调
    • verified = YES(满足"奖励发放条件")
  4. 开发者可通过服务端查询结果,决定是否发放奖励

奖励验证回调接口

接口请求方式

  • 接口请求方式: GET
  • 服务端会以 GET 方式请求第三方服务的回调链接,并拼接以下参数回传:
pid=%s&user_id=%s&trans_id=%s&extra=%s&sign=%s

请求参数定义

字段名称字段定义字段类型备注
pid广告位 IDstring
user_id用户 IDstring调用 SDK 透传,应用对用户的唯一标识
trans_id交易 IDstring完成观看的唯一交易 ID,唯一标识该次激励广告
extra其他信息string调用 SDK 传入并透传,如无需要则为空
sign签名string签名

签名生成方式

  • 获得 SecurityKey,在申请配置激励广告位页面,设置服务端验证回调接口时获取
  • 将 trans_id 和 SecurityKey 用 ':' 符号连接
  • 使用 sha256 生成签名,用小写 16 进制
sign = sha256(trans_id:SecurityKey)

返回值约定

  • 返回值格式: json
  • 返回示例:
{"isValid":true}

返回值定义

字段名称字段定义字段类型备注
isValid校验结果bool判定结果,是否发放奖励

SDK 错误码说明

错误码格式

SDK 错误码采用6位数字格式:1XXYYY

  • 1: 固定前缀,表示广告相关错误
  • XX: 错误类别(2位)
  • YYY: 具体错误编号(3位)

常见错误码

通用错误 (100XXX)

错误码说明解决方案
100000成功-
100001未知错误联系技术支持,提供session_id
100002参数无效检查传入参数是否正确
100003内部错误重试或联系技术支持
100004SDK未初始化确保先调用[DirichletMediation startWithConfig:completion:]
100005资源已释放重新创建广告对象

初始化错误 (101XXX)

错误码说明解决方案
101001初始化失败检查配置参数是否正确
101002媒体ID无效确认媒体ID正确
101003媒体密钥无效确认媒体密钥正确
101004SDK配置无效传入有效的配置对象
101005配置为空传入有效的DRMSDKConfig

网络相关错误 (102XXX)

错误码说明解决方案
102001网络异常检查网络连接,确保设备可以访问互联网
102002网络超时检查网络质量,可以稍后重试
102003无网络连接提示用户开启网络
102004DNS解析失败检查网络配置
102005SSL证书错误检查系统时间和证书
102006服务器错误稍后重试

广告加载错误 (103XXX)

错误码说明解决方案
103001加载失败重试或检查网络
103002无广告填充正常情况,稍后重试即可
103003广告位ID无效确认广告位ID正确
103004请求过于频繁降低广告请求频率,建议至少间隔30秒
103005广告已过期重新加载广告
103006缓存失败检查存储空间

广告展示错误 (104XXX)

错误码说明解决方案
104001展示失败检查广告状态是否有效
104002ViewController为空传入有效的ViewController
104003容器视图为空传入有效的容器
104004容器不可见确保容器已添加到视图层级且可见
104005应用横竖方向与广告位不匹配检查ViewController的方向设置是否与广告位配置匹配
104006广告未就绪等待广告加载完成后再展示
104007广告已展示重新加载新广告

广告交互错误 (105XXX)

错误码说明解决方案
105001点击失败重试点击操作
105002落地页错误检查落地页配置
105003下载失败检查网络和存储空间
105004安装失败检查安装权限
105005深度链接失败检查目标应用是否已安装

资源相关错误 (106XXX)

错误码说明解决方案
106001资源加载失败检查网络连接
106002图片加载失败重试或使用降级方案
106003视频加载失败检查网络带宽和存储空间
106004存储空间不足提示用户清理存储空间
106005内存不足释放内存资源或降级处理

竞价相关错误 (108XXX)

错误码说明解决方案
108001竞价失败检查竞价参数
108002出价过低提高出价或优化竞价策略
108003竞价超时优化竞价逻辑或增加超时时间
108004竞价参数无效检查参数格式

Session ID 说明

当发生错误时,SDK会在错误消息中包含 session_id 用于问题排查:

  • 返回方式:session_id 作为 error.localizedDescription 的一部分返回,错误码通过 error.code 参数单独返回
  • 用途:联系技术支持时提供错误消息中的 session_id 可以快速定位问题
  • 隐私:Session ID 不包含用户敏感信息,仅用于技术排查