[关闭]
@binbins 2017-05-26T17:36:56.000000Z 字数 6950 阅读 157

广告文档

引入依赖框架

  1. # 快速开发框架
  2. pod 'FFastlib', '~> 0.1.5'
  3. # 接入ADMob
  4. pod 'Firebase/Core'
  5. pod 'Firebase/AdMob'
  6. # 接入InMobi
  7. pod 'InMobiSDK', '~> 6.2.0'

AdManager 接入(需要先接入在线参数)

info.plist iOS9适配,增加

  1. <key>LSApplicationQueriesSchemes</key>
  2. <array>
  3. <string>baidumobads</string>
  4. </array>

info.plist设置NSAllowsArbitraryLoads

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key>
  4. <true/>
  5. </dict>

增加依赖框架

  1. QuartzCore.framework
  2. Security.framework
  3. WebKit.framework
  4. libz.tbd
  5. AVFoundation.framework
  6. AVKit.framework
  7. CoreMedia.framework
  8. SystemConfiguration.framework
  9. CoreTelephony.framework
  10. CoreLocation.framework
  11. MessageUI.framework
  12. CoreMotion.framework
  13. libc++.tbd
  14. StoreKit.framework
  15. AdSupport.framework
  16. SafariServices.framework

增加相应的广告库
* 将sdk_adgithub文件夹sdk_ad引入项目
* 将manager_adgithub文件夹manager_ad引入项目

Splash接入

在主UIViewController中初始化广告

  1. // 初始化
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. [[AdSplashManager shareManager] initSplash];
  5. }
  6. // 校验初始化
  7. - (void)viewDidAppear:(BOOL)animated {
  8. [super viewDidAppear:animated];
  9. [[AdSplashManager shareManager] checkInit];
  10. }

在AppDelegate中加载Splash广告

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. [[AdSplashManager shareManager] loadSplashAppDelegate];
  3. return YES;
  4. }

在App每次进入到前台,加载splash

  1. - (void)applicationWillEnterForeground:(UIApplication *)application {
  2. [[AdSplashManager shareManager] loadSplashWillEnterForeground];
  3. }

在主UIViewController中,加载Splash广告

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. [[AdSplashManager shareManager] loadSplashCtrl:self];
  4. }

原生广告接入

AppDelegate.m文件

  1. // 引入头文件
  2. #import "AdManager.h"
  3. // App切换到后台
  4. - (void)applicationDidEnterBackground:(UIApplication *)application {
  5. [[AdManager shareManager] applicationDidEnterBackground];
  6. }
  7. // App切换到前台
  8. - (void)applicationWillEnterForeground:(UIApplication *)application {
  9. [[AdManager shareManager] applicationWillEnterForeground];
  10. }

初始化

在主UIViewController中增加

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. [[AdManager shareManager] initWithCtrl:self];
  4. }

在所有UIViewController中增加,校验广告是否初始化成功,未成功将会再次初始化

  1. - (void)viewWillDisappear:(BOOL)animated {
  2. [super viewWillDisappear:animated];
  3. [[AdManager shareManager] checkInit:self];
  4. }

获取广告,展示广告

  1. // 广告
  2. AdBean *adBean = [[AdManager shareManager] getAdBean];
  3. // 广告View
  4. AdCommonView *view = [adBean getAdView];
  5. // 将广告View放到self.view
  6. [self.view addSubview:view];
  7. // 将广告数据更新到广告UI
  8. [adBean loadAdInfoUI];
  9. // 广告展示,上发展示请求,注意,一定要广告处于可视范围内,才能触发此方法
  10. [[AdManager shareManager] showAd:adBean];
  11. // 广告点击,上发广告点击,触发广告点击操作
  12. [[AdManager shareManager] clickAd:adBean];

备注

  1. 广告尺寸:宽度:设备宽度;高度:250。在AdBean中,createAdView定义
  2. 广点通,360广告由AdCommonView处理
  3. 百度广告,由AdBean处理

AdManager扩展方法使用

  1. // 判断广告是否为空
  2. - (BOOL)adIsEmpty;
  3. // array中插入广告bean,广告间隔由AdHeader.h Ad_Split控制
  4. + (NSArray *)mergeAd: (NSArray *)array;
  5. // // array中插入广告bean,广告间隔由传入的split参数控制
  6. + (NSArray *)mergeAd: (NSArray *)array split:(NSInteger)split;
  7. // array中广告bean个数
  8. + (int)adOffset:(NSArray *)array;
  9. // 返回默认的广告间隔split
  10. + (int)adSplit;
  11. // array中指定的下标对象是否为广告
  12. + (BOOL)isAd:(NSArray *)array index:(int)index;
  13. // array中广告bean个数
  14. + (int)adCountInArray:(NSArray *)array;

AdInterRecommendManager 接入

初始化
// 初始化方法
[[AdInterRecommendManager shareManager] initInterRecommend];
// 初始化检验方法
[[AdInterRecommendManager shareManager] checkInit];

  1. // 在程序入口,调用init方法
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. [[AdInterRecommendManager shareManager] initInterRecommend];
  5. }
  6. // 在页面切换,消失等调用checkInit方法
  7. - (void)viewWillDisappear:(BOOL)animated {
  8. [super viewWillDisappear:animated];
  9. [[AdInterRecommendManager shareManager] checkInit];
  10. }

三种style

  1. AD_STYLE_IMG 图片方式
  2. AD_STYLE_DETAIL 弹框,详细信息方式
  3. AD_STYLE_BANNER 弹框,banner简洁形式

hiddenClose 表示是否隐藏关闭按钮

[AdInterRecommendManager launchInterRecommendView:self adStryle:AD_STYLE_IMG hiddenClose:NO];
[AdInterRecommendManager launchInterRecommendView:self adStryle:AD_STYLE_DETAIL hiddenClose:NO];
[AdInterRecommendManager launchInterRecommendView:self adStryle:AD_STYLE_BANNER hiddenClose:NO];

style 参数,与隐藏关闭按钮,由在线参数控制

  1. // 参数 pos_interrecommend_style 展示样式
  2. // 参数 pos_interrecommend_hidden_close_btn 是否隐藏关闭按钮
  3. [AdInterRecommendManager launchInterRecommendView:self];

AdInterstitialManager 插屏广告接入

在线参数控制
pos_ad_sort_interstitial 排序
pos_ad_interstitial 广告位
pos_ad_interstitial_enable 是否开启插屏广告
pos_ad_interstitial_duration 插屏广告间隔时间

  1. // UIViewController中初始化
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. [[AdInterstitialManager shareManager] initInterstitial];
  5. }
  6. // 在所有UIViewController中,检验是否初始化成功
  7. - (void)viewWillDisappear:(BOOL)animated {
  8. [super viewWillDisappear:animated];
  9. [[AdInterstitialManager shareManager] checkInit];
  10. }
  11. // 在所有UIViewController中调用展示方法,满足条件将会自动展示
  12. - (void)viewDidAppear:(BOOL)animated {
  13. [super viewDidAppear:animated];
  14. [[AdInterstitialManager shareManager] showAd:self];
  15. }

有使用到umeng统计

在相应app中增加计算事件

  1. ad_native_key 原生广告
  2. ad_splash_key splash广告
  3. ad_interstitial_key 插屏广告
  4. ad_inter_recommend_key 交叉推广

原生信息流广告接入例子

AdManager.h

  1. // 信息流广告间隔在线配置
  2. + (int)adSplitWithDefault:(int)defaultSplit max:(int)max

注意事项
1. 在内容流中增加广告后,发起网络请求的skip处理
2. 相应cell点击的广告判断
3. cell展示时,上报广告曝光

网络请求成功, 内容插入广告

  1. - (void)requestSuccess:(NSDictionary *)dict {
  2. [super requestSuccess:dict];
  3. NSDictionary *resdict = [JSONParse optNSDictionary:dict valueForKey:@"res"];
  4. NSArray *news = [JSONParse optNSArray:resdict valueForKey:@"news"];
  5. // array 内容数据
  6. NSMutableArray *array = [[NSMutableArray alloc] init];
  7. for (NSDictionary *temp in news) {
  8. NewsBean *bean = [[NewsBean alloc] initWithDict:temp];
  9. [array addObject:bean];
  10. }
  11. // 在内容流中插入广告,如果广告间隔,参数超过合法值,则取一个默认值
  12. int split = [AdManager adSplitWithDefault:20 max:NEWS_LIMIT];
  13. if (![[AdManager shareManager] adIsEmpty]) {
  14. array = [AdManager mergeAd:array split:split];
  15. }
  16. [self.items addObjectsFromArray:array];
  17. [self.tableView reloadData];
  18. }

发起网络请求,处理skip

  1. - (NSMutableDictionary *)createParams {
  2. NSMutableDictionary *params = [super createParams];
  3. NSInteger skip = [self.items count] - [AdManager adCountInArray];
  4. [params setValue:[NSString stringWithFormat:@"%ld", (long)skip] forKey:PARAM_SKIP];
  5. [params setValue:[NSString stringWithFormat:@"%d", NEWS_LIMIT] forKey:PARAM_LIMIT];
  6. return params;
  7. }

cell显示时,上报曝光

  1. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
  2. if ([cell isKindOfClass:[AdTableViewCell class]]) {
  3. AdTableViewCell *adCell = (AdTableViewCell *)cell;
  4. [[AdManager shareManager] showAd:adCell.cellAdBean];
  5. }
  6. }

AdTableViewCell.h文件

  1. #import <UIKit/UIKit.h>
  2. @interface AdTableViewCell : UITableViewCell
  3. @property (retain, nonatomic) AdBean *cellAdBean;
  4. - (void)updateContent:(AdBean *)adBean row:(NSInteger)row;
  5. @end

AdTableViewCell.m文件

  1. #import "AdTableViewCell.h"
  2. @interface AdTableViewCell ()
  3. {
  4. NSInteger _row;
  5. }
  6. @end
  7. @implementation AdTableViewCell
  8. - (void)awakeFromNib {
  9. [super awakeFromNib];
  10. // Initialization code
  11. }
  12. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  13. [super setSelected:selected animated:animated];
  14. // Configure the view for the selected state
  15. }
  16. - (void)updateContent:(AdBean *)adBean row:(NSInteger)row {
  17. if (!adBean) {
  18. return;
  19. }
  20. if (![[AdManager shareManager] adIsEmpty] && _row == row) {
  21. return;
  22. }
  23. // 清除之前的广告UI
  24. for (UIView *temp in [self subviews]) {
  25. if ([temp isKindOfClass:[AdCommonView class]]) {
  26. PLog(@"remove ad common view");
  27. [temp removeFromSuperview];
  28. }
  29. }
  30. // 广告
  31. AdBean *adObj = [[AdManager shareManager] getAdBean];
  32. self.cellAdBean = adObj;
  33. if (![SafeObject objIsNull:adObj]) {
  34. // 广告View
  35. AdCommonView *view = [adObj getAdViewWithCtrl:[self baseViewController]];
  36. view.touchAdBlock = ^(){
  37. [[AdManager shareManager] clickAd:adObj];
  38. };
  39. // 将广告View放到self.view
  40. [self addSubview:view];
  41. // 将广告数据更新到广告UI
  42. [adObj loadAdInfoUI];
  43. }
  44. _row = row;
  45. }
  46. @end

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注