本页目录

配置与隐私

适用于 IFLYADLib 6.5.1。接入概览。完整方法签名以所安装版本的公开头为准。

SDK 无需单独的全局初始化实例。先完成宿主隐私告知和相应同意流程,再创建广告对象并发起请求。个性化状态按用户的实际选择设置:

#import <IFLYAdCore/IFLYAdCore.h>

// 宿主完成隐私流程后调用;enabled 来自实际用户选择。
- (void)configureAdsWithPersonalizedEnabled:(BOOL)enabled {
    [IFLYAdConfig setPersonalizedEnabled:enabled];
    [IFLYAdConfig setLogEnabled:NO];
}

setPersonalizedEnabled: 仅记录媒体选择,不控制数据处理或广告请求,不替代宿主授权流程或 ATT。排查问题时可临时开启日志;正式发布包仅输出错误与诊断日志,不能恢复详细请求/响应内容。

ATT 和 IDFA

iOS 14 及以上如需使用 IDFA,请在 Info.plist 中配置说明,并在请求广告前取得 ATT 授权:

<key>NSUserTrackingUsageDescription</key>
<string>用于获取广告标识符 IDFA,以便请求和展示相关广告。</string>

只有 ATT 状态为 authorized 时才读取或传入 IDFA。授权前传入的值会被丢弃;用户授权后请重新读取并设置。无授权时不要传入固定值或全零 IDFA。宿主仍须在 App Store Connect 隐私标签中如实申报 SDK 实际使用的数据;ATT 授权与应用自身的隐私同意是两件事。

网络与资源

素材、监测和落地页可能使用 HTTP。示例的 Info.plist 为联调允许 HTTP;生产 App 应按实际域名和业务需求配置 ATS 例外,并优先使用 HTTPS。出现素材或落地页加载失败时检查 ATS 和网络错误,不要直接把示例的全局放开设置复制到生产环境。

请求配置

所有广告类型都支持 IFLYAdRequestConfig。先向平台申请与 App、广告形式对应的广告位 ID,再创建实例;不要把示例广告位用于生产投放。

- (IFLYAdRequestConfig *)requestConfig {
    IFLYAdRequestConfig *config = [[IFLYAdRequestConfig alloc] init];
    config.requestTimeout = @5;
    config.appName = NSBundle.mainBundle.infoDictionary[@"CFBundleDisplayName"];
    config.appVersion = NSBundle.mainBundle.infoDictionary[@"CFBundleShortVersionString"];
    return config;
}

常用字段:requestId、requestTimeout、appName、appVersion、userAgent、idfa、caidList、settleType、bidFloor、pmpDeals 和 deepLinkDisabled。未显式设置 requestId 时 SDK 会生成请求 ID。广告对象可调用 loadAd,或调用:

[ad loadAdWithRequestConfig:[self requestConfig]];

settleType(0 固定价格、1 RTB)、bidFloor(CNY 元/千次展示)、pmpDeals 和 interactStatus(1 开启、2 关闭)按平台约定设置,不应直接套用示例工程的交易配置。一次请求选择 loadAd、loadAdWithRequestConfig: 或服务端竞价入口中的一种,不要对同一实例同时发起多条加载链路。

广告点击、DeepLink、落地页和失败回退由 SDK 统一处理。历史字段 jumpDirectly 仅为兼容保留,不应再用来控制业务跳转分支。

展示窗口

展示操作在主线程执行,传入控制器须已加入有效 window,且对应页面处于可展示状态。多 Scene 宿主使用发起展示页面所属的 window/Scene,不跨 Scene 展示。开屏使用 customWindow 时,该窗口须可见、尺寸有效,并与 rootVC 所属 window 关联同一 Scene;无需把它设为 key window。输入不满足条件时,处理失败并继续宿主流程,或修正后在广告仍有效时重试。