集成谷歌广告

导入谷歌移动广告 SDK
测试广告ID 开始之前,首先要注意的是,在开发和测试应用时,应确保使用测试广告而不是实际投放的广告。使用实际投放的广告进行测试可能会导致您的帐号被暂停。

AdMob 应用 ID: ca-app-pub-3940256099942544~1458002511
横幅广告测试专用广告单元 ID:ca-app-pub-3940256099942544/2934735716
插页式广告测试专用广告单元 ID:ca-app-pub-3940256099942544/4411468910
激励广告专用测试广告单元 ID: ca-app-pub-3940256099942544/1712485313
原生高级广告测试专用广告单元 ID: ca-app-pub-3940256099942544/3986624511

CocoaPods(首选)

要将该 SDK 导入 iOS 项目,最简便的方法就是使用 CocoaPods。请打开项目的 Podfile 并将下面这行代码添加到应用的目标中:

pod 'Google-Mobile-Ads-SDK'

然后使用命令行运行:

pod install --repo-update

手动下载

  1. 直接下载并解压缩 SDK 框架,然后将以下框架导入您的 Xcode 项目中:
*   GoogleMobileAds.framework
*   GoogleAppMeasurement.framework
*   GoogleUtilities.framework
*   nanopb.framework
  1. 将 -ObjC 链接器标记添加到项目的 Build Settings 下的 Other Linker Flags 中:

更新您的 Info.plist
在您的应用的 Info.plist 文件中,添加一个字符串值为您的 AdMob 应用 ID 的 GADApplicationIdentifier 键。您可以在 AdMob 界面中找到您的应用 ID

您可以通过编程方式进行此项更改:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>

初始化移动广告

加载广告之前,应用应通过调用 GADMobileAds.sharedInstance 上的 startWithCompletionHandler: 方法来初始化 Google 移动广告 SDK,这将初始化相应 SDK,并在初始化完成后或 30 秒超时后回调完成处理程序。此操作仅需执行一次,最好是在应用启动时执行,并且应该尽早调用。

 @import GoogleMobileAds;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application

    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  [[GADMobileAds sharedInstance] startWithCompletionHandler:nil];

  return YES;

}

@end

横幅广告:横幅广告是在应用布局中占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。

在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的帐号被暂停。
对于 iOS 横幅广告,加载测试广告最简便的方法就是使用下面的专用测试广告单元 ID:ca-app-pub-3940256099942544/2934735716

像所有典型视图一样,您可以将 GADBannerView 添加到 storyboard 或 xib 文件中。使用此方法时,请务必添加宽度和高度限制,以匹配您要展示的广告尺寸。例如,当展示 320x50 的横幅广告时,请使用 320 点的宽度限制和 50 点的高度限制

加载广告

在 GADBannerView 创建完毕并配置其属性后,就可以加载广告了。可通过对 GADRequest 对象调用 loadRequest: 来实现:
注册横幅广告事件,请将 GADBannerView 上的 delegate 属性设置为实现 GADBannerViewDelegate 协议的对象。一般情况下,实现横幅广告的类也充当代理类,在这种情况下,可将 delegate 属性设为 self。

- (void)viewDidLoad {
  [super viewDidLoad];

  self.bannerView = [[GADBannerView alloc]
      initWithAdSize:kGADAdSizeBanner];
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  self.bannerView.delegate = self;
  [self.view addSubview:self.bannerView];
  [self.bannerView loadRequest:[GADRequest request]];

}

GADRequest 对象代表单个广告请求,并包含定位信息等内容的属性。
请注意,在本例中,我们没有给出宽度或高度限制,因为提供的广告尺寸会为横幅广告提供固有内容尺寸,用来调整视图大小。
如果您不想使用以常量定义的标准尺寸,则可以使用 GADAdSizeFromCGSize 设置自定义尺寸。

为了加载和展示广告,需要设置 GADBannerView 的以下属性。

  • rootViewController - 此视图控制器用于在用户点击广告后呈现重叠式广告。通常应将其设置为包含 GADBannerView 的视图控制器。
  • adUnitID - 广告单元 ID,GADBannerView 应通过此 ID 加载广告。
    注意:广告单元 ID 是在 AdMob 界面中创建的,代表应用中展示广告的位置。例如,如果您要在两个视图控制器中展示横幅广告,则可以为每个视图控制器创建一个广告单元。

广告事件

通过使用 GADBannerViewDelegate,您可以监听各种广告生命周期事件,例如广告何时关闭、用户何时离开应用等。

实现横幅广告事件

GADBannerViewDelegate 中的每个方法都是可选方法,您可以按照自己的需求选择性实现。下例就实现了每个方法,并在控制台中记录了一条消息:

#pragma mark - <GADBannerViewDelegate>
/// 接收到一条广告
- (void)adViewDidReceiveAd:(GADBannerView *)adView {

  NSLog(@"接收到一条广告");

}

///广告请求失败
- (void)adView:(GADBannerView *)adView    didFailToReceiveAdWithError:(GADRequestError *)error {

  NSLog(@"a广告请求失败 Error: %@", [error localizedDescription]);

}

/// 将在响应中显示全屏视图
/// 点击广告的用户
- (void)adViewWillPresentScreen:(GADBannerView *)adView {

  NSLog(@" 将在响应中显示全屏视图");

}

/// 将取消全屏视图
- (void)adViewWillDismissScreen:(GADBannerView *)adView {

  NSLog(@"将取消全屏视图");

}

/// 已取消全屏视图
- (void)adViewDidDismissScreen:(GADBannerView *)adView {

  NSLog(@"已取消全屏视图");

}

/// 用户单击将打开另一个应用程序
- (void)adViewWillLeaveApplication:(GADBannerView *)adView {

  NSLog(@"用户单击将打开另一个应用程序");

}

在接收到广告之后才将横幅广告添加到视图层次结构中

在接收到广告前,您可能暂不希望将 GADBannerView 添加到视图层次结构中。为此,您可以监听 adViewDidReceiveAd: 事件:

- (void)adViewDidReceiveAd:(GADBannerView *)adView {

  // Add adView to view and add constraints as above.

  [self addBannerViewToView:self.bannerView];

}

以动画方式展示横幅广告
在返回横幅广告后,您也可以利用 adViewDidReceiveAd: 事件以动画方式展示该广告,如下例所示:

- (void)adViewDidReceiveAd:(GADBannerView *)adView {
  adView.alpha = 0;
  [UIView animateWithDuration:1.0 animations:^{
    adView.alpha = 1;
  }];
}

如果您要获取所有类型(而不仅仅是由于广告点击而发生)的重叠式广告展示或外部浏览器调用,您的应用最好监听 UIViewController 或 UIApplication 上具有同样功能的方法。下表显示了可与 GADBannerViewDelegate 方法同时调用且具有同样功能的 iOS 方法:

GADBannerViewDelegate 方法    iOS 方法
adViewWillPresentScreen:    UIViewController 的 viewWillDisappear:
adViewWillDismissScreen:    UIViewController 的 viewWillAppear:
adViewDidDismissScreen: UIViewController 的 viewDidAppear:
adViewWillLeaveApplication: UIApplicationDelegate 的 applicationDidEnterBackground:

横幅广告尺寸
下表列出了标准横幅广告尺寸。

尺寸(宽 x 高,以点为单位) 说明 适用范围 AdSize 常量
320x50 横幅广告 手机和平板电脑 kGADAdSizeBanner
320x100 大型横幅广告 手机和平板电脑 kGADAdSizeLargeBanner
300x250 IAB 中矩形 手机和平板电脑 kGADAdSizeMediumRectangle
468x60 IAB 全尺寸横幅广告 平板电脑 kGADAdSizeFullBanner
728x90 IAB 页首横幅广告 平板电脑 kGADAdSizeLeaderboard
提供的宽度 x 自适应高度 自适应横幅广告 手机和平板电脑
屏幕宽度 x 32/50/90 智能横幅广告 手机和平板电脑 kGADAdSizeSmartBannerPortrait kGADAdSizeSmartBannerLandscape

详细了解自适应横幅广告(旨在取代智能横幅广告)。 |

自定义广告尺寸

要自定义横幅广告尺寸,请使用 GADAdSizeFromCGSize 设置所需的尺寸,如下所示:

GADAdSize size = GADAdSizeFromCGSize(CGSizeMake(300, 50));

GitHub 上的示例


插页式广告:插页式广告是全屏广告,它会覆盖整个应用界面,直到用户将其关闭。在应用执行流程的自然停顿点,例如游戏的不同关卡之间,或一项任务完成后,最适合投放这类广告。

对于 iOS 插页式广告,加载测试广告最简便的方法就是使用下面的测试专用广告单元 ID:ca-app-pub-3940256099942544/4411468910

创建插页式广告对象

插页式广告是通过 GADInterstitial 对象加以请求和展示的。要使用此对象,第一步是将其实例化并设置其广告单元 ID。下例就演示了如何在 UIViewControllerviewDidLoad 方法中创建一个 GADInterstitial

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [self createAndLoadInterstitial];
}

- (GADInterstitial *)createAndLoadInterstitial {
  GADInterstitial *interstitial =
      [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  interstitial.delegate = self;
  [interstitial loadRequest:[GADRequest request]];
  return interstitial;
}
- (IBAction)doSomething:(id)sender {
  if (self.interstitial.isReady) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}
- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
  self.interstitial = [self createAndLoadInterstitial];
}

GADInterstitial 是一次性对象,只会加载和展示一个插页式广告。要展示多个插页式广告,应用需要为每个广告分别创建一个 GADInterstitial。

广告事件
通过使用 GADInterstitialDelegate,您可以监听各种广告生命周期事件,例如广告何时关闭、用户何时离开应用等。
注册接收插页式广告事件
要注册接收插页式广告事件,请将 GADInterstitial 中的 delegate 属性设置为一个实现了 GADInterstitialDelegate 协议的对象。一般而言,实现了插页式广告的类也用作代理类,在这种情况下,可将 delegate 属性设为 self,如下所示:

#import "GADInterstitial.h"
#import "GADInterstitialDelegate.h"

@interface ViewController () <GADInterstitialDelegate>

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
  self.interstitial.delegate = self;
}

实现插页式广告事件
GADInterstitialDelegate 中的每个方法都标为可选方法,因此您只需实现自己需要的方法即可。下例就实现了每个方法,并在控制台中记录了一条消息:

///广告请求成功
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
  NSLog(@"interstitialDidReceiveAd");
}

/// 广告请求失败
- (void)interstitial:(GADInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}

/// 将显示一个插页广告。
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillPresentScreen");
}

/// 插页广告将被动画移出屏幕
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillDismissScreen");
}

/// 插页广告已被动画移出屏幕。
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialDidDismissScreen");
}

///户单击将打开另一个应用程序
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
  NSLog(@"interstitialWillLeaveApplication");
}

一些最佳做法

  • 考虑插页式广告这种广告类型是否适合您的应用。
    在具有自然过渡点的应用中,插页式广告的效果最好。此类过渡点通常存在于应用内的任务结束时,例如分享完图片或完成一个游戏关卡时。因为用户希望借此机会在操作过程中休息一下,所以,此时展示插页式广告不会影响用户体验。请务必考虑在应用流程的哪些时间点展示插页式广告,以及用户可能会以什么方式响应。

  • 务必在展示插页式广告时暂停操作。
    插页式广告类型多样,包括文字广告、图片广告和视频广告等。确保应用在展示插页式广告时,也会暂停使用某些资源,以便供广告使用,这一点十分重要。例如,当您请求展示插页式广告时,请务必暂停应用产生的所有音频输出。您可以在 interstitialDidDismissScreen 事件处理脚本中恢复声音播放,当用户结束与广告的互动时,就会调用这个处理脚本。此外,还应考虑在广告展示时暂停所有会占用大量资源的计算任务,例如游戏循环。这样可以确保用户不会遇到图像无响应、响应慢或视频卡顿的现象。

  • 留出充足的加载时间。
    确保在恰当的时间展示插页式广告十分重要,同样,确保用户无需等待广告加载也十分重要。在您打算调用 presentFromRootViewController 前,不妨调用 loadRequest 事先加载广告,这样可确保应用在广告展示时间到来时,已准备好加载完毕的插页式广告。

  • 不要向用户展示太多广告。
    虽然提高插页式广告在应用中的展示频次似乎是实现增收的好方法,但这么做会影响用户体验,还会降低点击率。应确保用户不会频繁受到广告打扰,使他们可以充分享受到使用应用的乐趣。

  • 请勿使用 interstitialDidReceiveAd 事件展示插页式广告。
    `这可能会导致用户体验不佳。应预先加载广告,以备需要展示时使用。然后检查 GADInterstitial 中的 isReady 方法,看看该广告是否已做好展示准备。
    ** GitHub 上的示例**


(新API)激励广告:激励视频广告是一种全屏视频广告,用户可选择使用全屏模式观看,以换取应用内奖励。`

前提条件 Google 移动广告 SDK 7.42.2 或更高版本。
对于 iOS 激励广告,加载测试广告最简便的方法就是使用下面的专用测试广告单元 ID: ca-app-pub-3940256099942544/1712485313
创建激励广告对象
激励广告由 GADRewardedAd 对象请求和展示。要使用此对象,第一步是将其实例化并设置其广告单元 ID。例如,以下示例演示了如何在 UIViewController 的 viewDidLoad: 方法中创建 GADRewardedAd:
使用 GADRewardedAdDelegate 预加载下一个激励广告
GADRewardedAd 是一次性对象。这意味着,在展示激励广告后,就不能再用该对象加载另一个广告了。要请求另一个激励广告,您需要创建新的 GADRewardedAd 对象。

最佳做法是在 GADRewardedAdDelegate 上的 rewardedAdDidDismiss: 方法中加载另一个激励广告,以便在上一个激励广告关闭后,立即开始加载下一个激励广告:

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  self.rewardedAd = [self createAndLoadRewardedAd];
}

- (GADRewardedAd *)createAndLoadRewardedAd {
  GADRewardedAd *rewardedAd = [[GADRewardedAd alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
  GADRequest *request = [GADRequest request];
  [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      // Handle ad failed to load case.
    } else {
      // Ad successfully loaded.
    }
  }];
  return rewardedAd;
}

- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
  self.rewardedAd = [self createAndLoadRewardedAd];
}

警告:强烈建议您不要在广告加载失败时尝试使用广告请求完成块加载新广告。如果您必须使用广告请求完成块加载广告,请务必限制广告加载重试次数,以免在网络连接受限等情况下广告请求连续失败。

展示广告
在向用户展示激励广告之前,必须为用户提供明确的选项,让用户可以自行选择是否通过观看激励广告内容来换取奖励。激励广告必须始终是一项可由用户自行选择的体验。

要展示激励广告,请检查 GADRewardedAd 上的 isReady 属性以验证广告是否已完成加载,然后调用presentFromRootViewController:delegate:。以下示例演示了如何在 UIViewController 的一个操作方法中执行此操作:

@import GoogleMobileAds;

@import UIKit;

@interface ViewController () <GADRewardedAdDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (IBAction)doSomething:(id)sender {
  ...
  if (self.rewardedAd.isReady) {
    [self.rewardedAd presentFromRootViewController:self delegate:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

接收广告事件通知
发生激励广告事件时,会调用 presentFromRootViewController:delegate: 方法中提供的 GADRewardedAdDelegate。GADRewardedAdDelegate 中的每种方法均对应激励广告生命周期内的一个事件。rewardedAd:userDidEarnReward: 方法需要实现,但该类的所有其他方法都是可选方法,因此您只需实现所需的方法即可。以下示例实现了每个方法,并将消息记录到控制台:

/// 用户获得了奖励
- (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward {
  // TODO: Reward the user.
  NSLog(@"rewardedAd:userDidEarnReward:");
}

/// 显示奖励广告
- (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd {
  NSLog(@"rewardedAdDidPresent:");
}

/// 奖励广告显示失败
- (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error {
  NSLog(@"rewardedAd:didFailToPresentWithError");
}

/// 奖励广告消失
- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
  NSLog(@"rewardedAdDidDismiss:");
}

加载多个激励广告

要加载多个激励广告,请针对您要加载的每个广告,按照创建激励广告对象加载广告部分中所述的步骤操作。下面的代码段展示了如何为两个不同的广告展示位置加载两个激励广告。

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRewardedAd *gameOverRewardedAd = [self
    createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
  GADRewardedAd *extraCoinsRewardedAd = [self
    createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
}

- (GADRewardedAd *)createAndLoadRewardedAdForAdUnit:(NSString *) adUnitId {
  GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId];
  GADRequest *request = [GADRequest request];
  [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      // Handle ad failed to load case.
    } else {
      // Ad successfully loaded.
    }
  }];
  return rewardedAd;
}

常见问题解答
我可以获取 GADRewardedAd 的详细奖励信息吗?
可以,如果您需要在 userDidEarnReward 回调触发之前获得奖励金额,可以查看 GADRewardedAdreward 属性,在广告加载后验证奖励金额。


原生广告:原生广告是一种基于组件的广告格式,可让您自由地指定素材资源在应用中的呈现方式。通过自行选择字体、颜色和其他详细信息,您可以呈现出自然而不突兀的广告展示效果,进而提供更丰富的用户体验。

原生广告是通过平台原本就有的界面组件向用户呈现的广告素材资源。这种广告采用您已经在 Storyboard 中使用的那些类进行展示,能以和应用视觉设计相称的形式呈现,让用户有浑然一体的使用体验。加载原生广告时,您的应用会收到一个包含其素材资源的广告对象,然后由应用(而不是 SDK)负责展示它们。这与其他广告格式不同,采用其他广告格式时您无法自行调整广告的外观。
总的来说,要想成功植入原生广告,需要完成两部分工作:一是通过 SDK 加载广告,二是在您的应用中展示广告内容。本页将介绍如何使用 SDK 加载广告。
前提条件
导入 Google 移动广告 SDK

对于在 iOS 上投放的所有原生高级广告,加载测试广告最简便的方法就是使用下面的测试专用广告单元 ID: ca-app-pub-3940256099942544/3986624511

加载广告
系统定义的原生广告格式有两种:应用安装广告和内容广告。

这两种广告均由一个类表示:GADUnifiedNativeAd。此类的实例包含原生广告的素材资源。请注意,根据 GADUnifiedNativeAd 所表示的广告类型,某些字段中不会填充任何值(即为 nil)。

原生广告通过 GADAdLoader 对象加载,这些对象根据 GADAdLoaderDelegate 协议向它们的代理发送消息。

初始化广告加载程序
您必须先初始化广告加载程序,然后才能加载广告。以下代码演示了如何初始化 GADAdLoader,初始化 GADAdLoader 后,需调用其 loadRequest: 方法来请求广告:

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;
[self.adLoader loadRequest:[GADRequest request]];

您需要指定一个广告单元 ID(可使用测试 ID)、要在 adTypes 数组中传递的常量(用于指明要请求哪些原生广告格式),此外还需要在 options 参数中指定要设置的任何选项。有关 options 参数的可取值列表,请参阅“设置原生广告选项”页面

adTypes 数组应包含此常量: kGADAdLoaderAdTypeUnifiedNative
GADAdLoader 中的 loadRequest: 方法接受与横幅广告和插页式广告相同的 GADRequest 对象。您可以使用请求对象来添加定位信息,这与其他广告类型一样。

实现广告加载程序代理
广告加载程序代理需要实现专门用于您的广告类型的协议。对于unified原生广告:
GADUnifiedNativeAdLoaderDelegate 此协议包括一条在统一原生广告加载后发送给代理的消息:

///接收到原生广告
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADUnifiedNativeAd *)nativeAd;

何时请求广告
展示原生广告的应用完全可以在实际展示广告之前先行请求这些广告。在许多情况下,推荐采取这种做法。例如,如果某款应用展示一个商品清单,其中会夹杂一些原生广告,那么该应用就可以加载整个清单中的原生广告,因为它知道一些广告仅在用户滚动浏览视图后才会展示,还有一些可能根本不会展示。

尽管预先提取广告是很好的做法,但切勿一直保留旧广告而不展示它们。对任何原生广告对象来说,如果在保留一小时后仍没有获得展示,就应该予以舍弃,并替换为来自新请求的新广告。

注意:重复使用 GADAdLoader 时,请确保先等待每个请求完成,然后再重新调用 loadRequest:。

确定加载完成时间

在应用调用 loadRequest: 后,可通过调用以下方法获取请求的结果:

如果一个请求中只涉及单个广告,则系统会对上述方法之一进行一次调用。

如果一个请求中涉及多个广告,则系统会对上述方法进行至少一次回调,但回调次数不会超过请求的广告数量上限。
一次性加载多个原生广告

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;

  self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
          rootViewController:self
                     adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

///收到原生广告资源
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified native ad has loaded, and can be displayed.
}
///原生广告结束加载
- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}
///原生广告加载失败
- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(GADRequestError *)error{
}
@end

接收有关原生广告事件的通知

nativeAd.delegate = self;

//播放了原生广告
- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
  
}

//点击原生广告
- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
 
}

//原生广告将呈现全屏视图
- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
  }

//原生广告将取消全屏显示
- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
}

//原生广告确实取消了全屏观看
- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
}

////打开一个新应用程序。
- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {

}

文章整理来自于谷歌官方文档,如有侵权请联系

欢迎下载使用 视频剪辑神器,苹果应用商店下载地址:视频剪辑神器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345