2025-07-24

主要场景

• 开屏广告
• 插屏广告
• 激励视频
• 信息流
• banner

运行环境

• ⽀持系统 iOS12.0 及以上;
• SDK 编译环境 Xcode14.2;
• ⽀持架构:arm64;

引入framework包

⼿动导入 - ⽬前仅支持⼿动导入
将demo中获取的framework文件 AdSDKLib 拖入项⽬中即可

2.Xcode配置

添加权限

• 工程plist文件设置,点击右边的information Property List后边的 "+" 展开添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。

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

• SDK 不会主动获取应⽤位置权限,当应⽤本身有获取位置权限逻辑时,需要在应⽤的info.plist 添加相应配置信息,避免 App Store 审核被拒。

Privacy - Location When In Use Usage Description
Privacy - Location Always and When In Use Usage Description
Privacy - Location Always Usage Description
Privacy - Location Usage Description

• 从 iOS 14.5 开始,若开发者设置 App Tracking Transparency 向用户申请跟踪授权,在用户授权之前IDFA 将不可用。

<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>
权限 功能 用途和目的 申请时机
NSLocationAlwaysUsageDescription 【可选】总是允许访问定位 根据位置情况实现流量分组功能 需要定位功能时
NSLocationAlwaysAndWhenInUseUsageDescription 【可选】总是允许/使用期间访问定位 根据位置情况实现流量分组功能 准备从"使用期间"升级到"始终"定位权限时,必须配置此字段;iOS 13及以后系统默认需要,防止请求失败
NSLocationWhenInUseUsageDescription 【可选】使用期间访问定位 根据位置情况实现流量分组功能 用户已同意"使用期间"定位后,进一步申请"始终定位"权限时用
NSUserTrackingUsageDescription 【可选】获取设备标识,以识别设备信息 根据设备信息情况实现流量分组功能 在访问 IDFA(广告标识符)之前必须申请

• 在Target->Build Settings -> Other Linker Flags中添加-ObjC -all_load, 字⺟o和c⼤写。
[图片上传失败...(image-69e7ea-1753346146244)]

添加依赖库

工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,点击“+”,依次添加下列依赖库。
• Accelerate.framework
• AdSupport.framework
• AppTrackingTransparency.framework
• AudioToolbox.framework
• AVFoundation.framework
• CFNetwork.framework
• CoreGraphics.framework
• CoreFoundation.framework
• CoreImage.framework
• CoreLocation.framework
• CoreMedia.framework
• CoreMotion.framework
• CoreTelephony.framework
• Foundation.framework
• ImageIO.framework
• MediaPlayer.framework
• MobileCoreServices.framework
• QuartzCore.framework
• Security.framework
• StoreKit.framework
• SystemConfiguration.framework
• UIKit.framework
• WebKit.framework
• libbz2.tbd
• libc++.tbd
• libiconv.tbd
• libresolv.9.tbd
• libsqlite3.tbd
• libxml2.tbd
• libz.tbd
• libc++abi.tbd

3.SDK初始化及全局配置

引入framework包

⼿动导入 - ⽬前仅⽀持⼿动导入
将demo中获取的framework⽂件AdSDKLib(包括微信SDK WechatOpenSDK-XCFramework) 拖入项⽬中即可(或者参考微信开放平台https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html)具体配置请参考微信开放平台。

AppDelegate

@property (strong, nonatomic) UIWindow *window;

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIWindow *keyWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window = keyWindow;
   //SDK初始化 isGetLocation:是否获取定位信息
    [JiHuoNiaoSDKManagerHZ startWithAppid:@"xxx" AppKey:@"xxx" isGetLocation:YES];
    return YES;
}

隐私数据说明

SDK支持的隐私数据相关配置目前主要集中在JiHuoNiaoSDKConfiguration类来集中管理。

[JiHuoNiaoSDKConfiguration configuration].jihuoniaoCustomIdfa = @"111";
[JiHuoNiaoSDKConfiguration configuration].jihuoniaoIsPersonalAds = YES;
[JiHuoNiaoSDKConfiguration configuration].jihuoniaoIsPprogrammaticAds = YES;
[JiHuoNiaoSDKConfiguration configuration].jihuoniaoSDKAgeGroup = JiHuoNiaoAdSDKAgeGroupAdult;
[JiHuoNiaoSDKConfiguration setjihuoniaoSDKLBSLon:@"9.1111" lat:@"8.1111"];
方法 说明
@property (nonatomic, copy) NSString * jihuoniaoCustomIdfa 自定义idfa (字符串)
@property (nonatomic, assign) BOOL jihuoniaoIsPersonalAds; 个性化广告推荐 (默认NO)
NO-不限制,YES-限制
@property (nonatomic, assign) BOOL jihuoniaoIsPprogrammaticAds 程序化广告推荐(默认NO)
NO-不限制,YES-限制
@property (nonatomic, assign) JiHuoNiaoAdSDKAgeGroup jihuoniaoSDKAgeGroup; 未成年人设置成人/年龄15~18岁/年龄小于15岁
JiHuoNiaoAdSDKAgeGroupAdult(默认)成年人
JiHuoNiaoAdSDKAgeGroupTeenager年龄15~18岁
JiHuoNiaoAdSDKAgeGroupMinor年龄小于15岁
+ (void)setjihuoniaoSDKLBSLon:(NSString *)lon lat:(NSString *)lat 外部媒体通过该接口传递经纬度 设置SDK是否可以使用某些隐私数据,或者自己传递这些隐私数据。如果未设置此属性,SDK将执行默认的隐私数据使用逻辑

ATT授权 & SKAdNetwork

向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:方法。我们建议您申请权限后再请求广告,以便准确的获得用户授权状态。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
- (void)requestIDFATracking {
    if (@available(iOS 14, *)) {
        // iOS14及以上版本需要先请求权限
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
            // 获取到权限后,依然使用老方法获取idfa
            if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
                NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
                    NSLog(@"%@",idfa);
            } else {
                NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
            }
        }];
    } else {
        // iOS14以下版本依然使用老方法
        // 判断在设置-隐私里用户是否打开了广告跟踪
        if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
            NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
            NSLog(@"%@",idfa);
        } else {
            NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
        }
    }
}

开屏广告

@property (nonatomic,strong)JiHuoNiaoSplashAdHZ *jiHuoNiaoSplashAd;
//拉取⼴告
self.jiHuoNiaoSplashAd =  [[JiHuoNiaoSplashAdHZ alloc] initWithJihuoniaoHZADSiteID:jiHuoNiao_splash_ID];
self.jiHuoNiaoSplashAd.delegate = self;
//如果需设置底部logoView
[self.jiHuoNiaoSplashAd setJiHuoNiaoHZLogoBottom:[self bottomView]];
//加载并显示
[self.jiHuoNiaoSplashAd jiHuoNiaoHZLoadAd];
//加载
[self.jiHuoNiaoSplashAd jiHuoNiaoHZOnlyLoad];
//显示
[self.jiHuoNiaoSplashAd jiHuoNiaoHZOnlyShow];
//竞价价格
self.jiHuoNiaoSplashAd.jiHuoNiaoHZGetEcpm
//竞价成功或者失败回传
JiHuoNiaoServerBiddingResultModel * resultModel = [[JiHuoNiaoServerBiddingResultModel alloc]init];
[self.jiHuoNiaoSplashAd jiHuoNiaoHZEcpmWinSucessOrFailed:resultModel];
//开屏⼴告
- (void)JiHuoNiaoSplashViewHZRenderSuccess;
//开屏⼴告点击
- (void)JiHuoNiaoSplashViewHZDidClick;
//开屏⼴告关闭
- (void)JiHuoNiaoSplashViewHZDidClose;
//开屏网络请求成功
- (void)JiHuoNiaoSplashViewHZLoadSuccess;
//开屏网络请求错误
- (void)JiHuoNiaoSplashViewHZFailWithCode:(NSInteger)code TipStr:(NSString *)tipStr ErrorMessage:(NSString *)errorMessage;

插屏广告

self.jiHuoNiaoInterstitialAd = [[JiHuoNiaoInterstitialAdHZ alloc] initWithJihuoniaoHZADSiteID:jiHuoNiao_interstitial_ID];
self.jiHuoNiaoInterstitialAd.delegate = self;
//加载并显示
[self.jiHuoNiaoInterstitialAd jiHuoNiaoHZLoadAd];
//加载
[self.jiHuoNiaoInterstitialAd jiHuoNiaoHZOnlyLoad];
//显示
[self.jiHuoNiaoInterstitialAd jiHuoNiaoHZOnlyShow];
//竞价价格
self.jiHuoNiaoInterstitialAd.jiHuoNiaoHZGetEcpm
//竞价成功或者失败回传
JiHuoNiaoServerBiddingResultModel * resultModel = [[JiHuoNiaoServerBiddingResultModel alloc]init];
[self.jiHuoNiaoInterstitialAd jiHuoNiaoHZEcpmWinSucessOrFailed:resultModel];
// 插屏⼴告网络请求成功
- (void)JiHuoNiaoInterstitialAdHZLoadSuccess
插屏⼴告曝光
- (void)JiHuoNiaoInterstitialAdHZRenderSuccess;
插屏⼴告点击
- (void)JiHuoNiaoInterstitialAdHZDidClick;
插屏⼴告关闭
- (void)JiHuoNiaoInterstitialAdHZDidClose;
//插⼴告错误
- (void)JiHuoNiaoInterstitialAdHZFailWithCode:(NSInteger)code TipStr:(NSString *)tipStr ErrorMessage:(NSString *)errorMessage;


激励视频广告

//媒体用户可选id
@property(nonatomic,strong) NSString * jiHuoNiao_user_id;
//媒体用户扩展信息可选json
@property(nonatomic,strong) NSString * jiHuoNiao_user_extra;

self.jiHuoNiaoRewardAd = [[JiHuoNiaoRewardAdHZ alloc]initWithJihuoniaoHZADSiteID:jiHuoNiao_reward_ID];
self.jiHuoNiaoRewardAd.delegate = self;
//加载并显示
[self.jiHuoNiaoRewardAd  jiHuoNiaoHZLoadShowRewardAd:self];
//加载
[self.JiHuoNiaoRewardAd jiHuoNiaoHZLoadRewardAd];
//显示
[self.JiHuoNiaoRewardAd jiHuoNiaoHZShowRewardAd:self];
//竞价价格
self.JiHuoNiaoRewardAd.jiHuoNiaoHZGetEcpm
//竞价成功或者失败回传
JiHuoNiaoServerBiddingResultModel * resultModel = [[JiHuoNiaoServerBiddingResultModel alloc]init];
[self.JiHuoNiaoRewardAd jiHuoNiaoHZEcpmWinSucessOrFailed:resultModel];
//激励视频⼴告网络加载成功
- (void)JiHuoNiaoRewardedVideoAdHZDidLoad;
//激励视频⼴告曝光
- (void)JiHuoNiaoRewardedVideoAdHZViewRenderSuccess;
//激励视频⼴告点击
- (void)JiHuoNiaoRewardedVideoAdHZDidClick;
//激励视频⼴告关闭
- (void)JiHuoNiaoRewardedVideoAdHZDidClose;
//激励视频⼴告错误
- (void)JiHuoNiaoRewardedVideoAdHZFailWithCode:(NSInteger)code TipStr:(NSString *)tipStr ErrorMessage:(NSString *)errorMessage;
//激励视频⼴告奖励
- (void)JiHuoNiaoRewardedVideoAdHZHasReward;

信息流广告

//拉取⼴告
//设置宽度。高度是0或者小于45按宽度自适应
CGFloat width = [UIScreen mainScreen].bounds.size.width-52;
self.jiHuoNiaoFeedAd = [[JiHuoNiaoFeedAdHZ alloc] initWithJihuoniaoHZADSiteID:jiHuoNiao_feed_ID Size:CGSizeMake(width, 0)];
self.jiHuoNiaoFeedAd.delegate = self;
//拉取广告,count为拉取范围1-3,最大值为3条
[self.jiHuoNiaoFeedAd jihuoniaoHZLoadAdWithCount:3];
//信息流代理回调
//信息流⼴告加载成功 返回数据源
-(void)JiHuoNiaoFeedAdHZLoad:(NSArray<JiHuoNiaoServerEcpmRequestModel *> *)adList{
    for (JiHuoNiaoServerEcpmRequestModel * model in adList) {
        JiHuoNiaoServerBiddingResultModel * resultModel = [[JiHuoNiaoServerBiddingResultModel alloc]init];
       //竞价价格
        model.ecpm
         //竞价成功或者失败回传
        [self.jiHuoNiaoFeedAd jiHuoNiaoHZEcpmWinSucessOrFailed:resultModel withJihuoniaoAdSiteId:model.jihuoniao_ad_site_id];
    }
  
}
//信息流⼴告加载成功 返回View
- (void)JiHuoNiaoFeedAdHZDidLoadView:(NSArray *)feedDataArray
//信息流⼴告渲染成功
- (void)JiHuoNiaoFeedAdHZViewRenderSuccess;
//信息流⼴告曝光成功
- (void)JiHuoNiaoFeedAdHZViewExposure;
//信息流⼴告点击
- (void)JiHuoNiaoFeedAdHZDidClick;
//信息流⼴告关闭
- (void)JiHuoNiaoFeedAdHZDidClose:(id)feedAd;
//信息流视频⼴告错误
- (void)JiHuoNiaoFeedAdHZFailWithCode:(NSInteger)code TipStr:(NSString *)tipStr ErrorMessage:(NSString *)errorMessage;

banner广告

//拉取⼴告 
 self.JiHuoNiaoBannerADHZ =   [[JiHuoNiaoBannerADHZ alloc]initWithJihuoniaoHZADSiteID: item.slotID];
 self.JiHuoNiaoBannerADHZ.delegate = self;
//加载
[self.JiHuoNiaoBannerADHZ jiHuoNiaoHZOnlyLoad];
//banner代理回调
//banner⼴告加载成功
- (void)JiHuoNiaoBannerADHZLoadSuccess{
    //需要贴到视图上面
    [self.view addSubview:self.JiHuoNiaoBannerADHZ];
    //显示
    [self.JiHuoNiaoBannerADHZ jiHuoNiaoHZOnlyShow];
    
    JiHuoNiaoServerBiddingResultModel * resultModel = [[JiHuoNiaoServerBiddingResultModel alloc]init];
    resultModel.jihuoniaoWin =  0;
//竞价价格
    resultModel.jihuoniaoWinEcpm =  self.JiHuoNiaoBannerADHZ.jiHuoNiaoHZGetEcpmModel.ecpm;
    resultModel.jihuoniaoAdnName =  @"激活鸟";
    resultModel.jihuoniaoAdTitle =  @"banner";
    resultModel.jihuoniaoAdRequestId =  @"1";
     //竞价成功或者失败回传
    [self.JiHuoNiaoBannerADHZ jiHuoNiaoHZEcpmWinSucessOrFailed:resultModel];
}
//Banner⼴告曝光
- (void)JiHuoNiaoBannerADHZViewRenderSuccess;
//Banner⼴告点击
- (void)JiHuoNiaoBannerADHZDidClick;
//banner⼴告错误
- (void)JiHuoNiaoBannerADHZFailWithCode:(NSInteger)code TipStr:(NSString *)tipStr ErrorMessage:(NSString *)errorMessage;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果应用中需要使用 本地网络 需要在 Info.plist 中配置两个选项,详细描述为什么需要使用该权限,以及需要...
    青春已给下一代阅读 11,062评论 1 7
  • 1. 隐私权限适配 1.1 相册权限 相册新增选择权限类型PHAuthorizationStatusLimited...
    进击的小君君阅读 5,373评论 1 6
  • [更新日志][1] [1]: https://blog.growingio.com/posts/iOS_chan...
    bmm_yj阅读 717评论 0 0
  • 1.基础 2.响应式 3.布局,约束 4.网络,蓝牙 5.Model,Json,XML,HTML,Yaml,Mar...
    hanyongwei阅读 20评论 0 0
  • 拖拽搭建AI应用!Dify保姆级教程,小白秒变AI工程师 2025年AI开发范式革命:无需写代码、不租GPU,拖拽...
    霍格沃兹测试开发学社阅读 20评论 0 0