原生广告

原生格式是一种基于组件的广告格式,可让发布商自由地自定义在应用中如何呈现广告资源,如标题及对操作的调用。通过选择适合自己的字体、颜色和其他详细信息,发布商能够制作出自然而然、毫不唐突的广告演示文稿,为丰富的用户体验锦上添花。

AdMob 共有两种不同方法实现原生广告:Native Ads Express 和 Native Ads Advanced。 Native Ads Express 的设计旨在使原生广告加入变得尽可能简单。对于不熟悉该格式的发布商来说,这种方法是最佳选择。Native Ads Advanced 的设计旨在充分提高发布商制作演示文稿的自由发挥程度,目前仅供有限的一组发布商进行封闭式测试版测试。

Native Ads Express

通过 Native Ads Express,可以将原生广告资源(构成广告的文字和图片)在服务器级别与 CSS 模板相结合,然后以原生表达广告视图展示在应用中。发布商可以通过修改与每个广告单元关联的 CSS 模板来自定义自己的广告演示文稿。

此方法有几个优点。一个优点是不用部署应用的新版本就可更改广告演示文稿;另一个优点是您用来创建 CSS 模板的编辑器可实时验证和预览,您很容易弄清您的演示文稿是否完全符合自己的需要。另外,由于演示自定义工作是在服务器上进行,加载和展示广告需要的移动代码很少。实际上,显示广告所需的 Objective-C/Swift 数量与展示横幅所需的数量基本相同。

Native Ads Express 入门的最佳方法是通读 Native Ads Express 指南。

我们也在 GitHub 存储区提供了 Swift 和 Objective-C 示例代码。

Native Ads Advanced

通过 Native Ads Advanced,应用直接从 Mobile Ads SDK 接收原生广告资源,然后利用平台原生的 UI 元素进行展示。例如,字符串资源可以 、UILabel 形式展示。

此方法的优点是,因为发布商自己展示资源,他们对如何演示广告有大量的控制权。发布商不仅可以决定运行时的字体、颜色和位置,而且可以利用自己早已用于显示内容的平台特定 UI 类来展示原生广告资源。

Native Ads Advanced 目前仅供有限的一组发布商进行封闭式测试版测试,但欢迎您浏览我们的Native Ads Advanced 指南。

我们的 GitHub 存储区也提供了用于 Native Ads Advanced 的 Swift 和 Objective-C 示例代码。

Native Ads Express

本指南向您介绍如何使用 Google Mobile Ads SDK 在 iOS 应用中显示 AdMob Native Express 广告。它涵盖的内容包括如何将 GADNativeExpressAdView添加到布局,如何请求广告等等。

先决条件

本指南假定您已掌握一定的 Google Mobile Ads SDK Ads SDK 知识。如果您尚未掌握,请仔细阅读使用入门指南。

什么是 Native Express Ad?

Native Express 广告与横幅广告相似,都属于矩形广告,您可以将其放入故事板中并根据您的需要调整尺寸。它们的主要区别在于您(发布商),通过为您的广告单元上传一个 CSS 模板,您可以控制广告的呈现细节(例如,图像尺寸、字体、颜色等等)。AdMob 将该模板与广告商资源(如图标、图像和文本)相结合,并在 GADNativeExpressAdView 中显示结果。此方法可最大程度减少 Native Ads Express 需要的移动代码数量,同时可帮助发布商在其应用中显示看起来很自然的广告。

创建 Native Express 广告单元

在 apps.admob.com 上创建 Native Express 广告单元。有关格式概览和为您的广告单元选择模板尺寸的更多信息,请参阅帮助中心的相关文章。如需了解如何创建 CSS(让您的 Native Express 广告具有自然低调的风格)的详细信息,请参阅Native Ads Express CSS 指南。

GADNativeExpressAdView

GADNativeExpressAdView 类负责请求和显示 Native Express 广告。您可以将一个这样的类添加到故事板并向其分配常量,类似于 GADBannerView

选择一个尺寸

Native Express 广告不强制发布商在固定尺寸之间进行选择,而是提供多个模板尺寸(在创建广告单元时进行选择),每个模板尺寸的高度和宽度值都具有一定的范围。

模板尺寸 最小宽度 最大宽度 最小高度 最大高度
280 1200 80 612
280 1200 132 1200
280 1200 250 1200

需要显示"中"模板尺寸的发布商可以使用的宽度在 280 和 1200 dp 之间,可以使用的高度在 132 和 1200 dp 之间。这意味着对于中模板尺寸而言,300 x 200、450 x 150 和 613 x 572 都是有效的。但请记住,并非所有尺寸都能形成良好的呈现效果。尽管请求尺寸为 1200 x 80 的"小"模板在技术上可行,但可能不是最佳选择。另外,请务必考虑您要在上面显示广告的设备的屏幕尺寸。在平板电脑上呈现广告时,通常应保留较大的尺寸。

不要求应用使用相同的尺寸进行每个请求。根据运行广告的特定设备,可以使用一个纵向尺寸和另一个横向尺寸,或不同的尺寸请求相同的广告单元。如果应用使用不在广告单元模板范围内的广告尺寸进行请求,则可能会返回错误。

在通过编程方式为 GADNativeExpressAdView 创建 GADAdSize 时,发布商还可以使用 GADAdSizeFullWidthPortraitWithHeight 和 GADAdSizeFullWidthLandscapeWithHeight 方法。在此情况下,广告将占用设备屏幕的整个宽度。

此时,流式尺寸不应与 Native Ads Express 一起使用。

{: .note}

加载广告

在 GADNativeExpressAdView 类中,可通过loadRequest 方法加载广告。在调用该方法之前,请确保已在加载广告前分配了 adUnitID 和 rootViewContoller

如果您在故事板中有一个 UIViewController 和一个 GADNativeExpressView,下面展示了如何设置属性和加载广告:

OBJECTIVE-C

SWIFT

#import "ViewController.h"

@import GoogleMobileAds ;

@interface ViewController ()

@property ( nonatomic , weak ) IBOutlet GADNativeExpressAdView * nativeExpressAdView ;

@end

@implementation ViewController

- ( void ) viewDidLoad {
  [ super viewDidLoad ];

self . nativeExpressAdView . adUnitID = @ "ca-app-pub-3940256099942544/2562852117" ;
  self . nativeExpressAdView . rootViewController = self ;

GADRequest * request = [ GADRequest request ];
  [ self . nativeExpressAdView loadRequest : request ];
}

@end

深入阅读

如需了解使用 Native Express 广告的最佳方式的详细信息,请查看以下资源:

  • 若要探索横幅广告的目标功能,请查看目标指南。
  • 如需了解有关广告事件和广告代理的信息,请查看广告事件指南。

您还可以通过从 GitHub 下载示例项目 来查看 Native Express 广告实例。

Native Ads Advanced

此功能目前仅在有限的测试版本中提供。如果您有兴趣参与,请联系您的客户经理讨论可能性。在测试版结束后将向所有发布商提供此功能。

本指南向您展示如何使用 Google Mobile Ads SDK 在 iOS 应用中实现 AdMob Native Ads Advanced,并阐述在此过程中需要考虑的一些重要事项。

先决条件

此指南假定您已掌握一定的 Google Mobile Ads SDK 知识。如果您尚未掌握,请仔细阅读使用入门指南。

什么是 Native Ads Advanced?

Native Ads Advanced 是通过平台原生的 UI 组件将广告资源展示给用户的一种格式。这些广告在显示时所使用的类与您在故事板中采用的类相同,且可进行格式化设置,以契合应用的视觉设计。加载广告时,应用将收到一个包含其资源的广告对象,然后该应用(而不是 SDK)负责显示这些资源。

系统定义的原生广告格式分为两种:应用安装和内容。应用安装广告由 GADNativeAppInstallAd表示,内容广告由 GADNativeContentAd 表示。这些类的实例包含原生广告的资源。

注:系统要求显示广告中包含的一些资料。此外,广告必须与内容明显不同。

加载广告

原生高级广告通过 GADAdLoader 对象加载,这些对象根据 GADAdLoaderDelegate 协议将消息发送至自己的代理。

初始化 GADAdLoader

以下代码演示如何针对应用安装广告初始化 GADAdLoader

OBJECTIVE-C

SWIFT

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 ;

利用 adTypes 数组参数,您的应用可以传入相应的常量来指定其需要请求的原生格式。该数组应包含以下一个或两个常量:

  • kGADAdLoaderAdTypeNativeAppInstall
  • kGADAdLoaderAdTypeNativeContent

请求广告

初始化 GADAdLoader 之后,请调用它的 loadRequest: 方法以请求广告:

OBJECTIVE-C

SWIFT

[ self . adLoader loadRequest :[ GADRequest request ]];

GADAdLoader 中的 loadRequest 方法接受与横幅广告和插页式广告相同的 GADRequest 对象。您可以使用请求对象添加目标信息,就像您对其他广告类型采取的操作一样。

一个 GADAdLoader 可以发出多个请求,但前提是每次只能完成一个请求。重用 GADAdLoader 时,请务必先等待上一个请求完成,然后再调用 loadRequest 开始下一个请求。如果您需要并行请求多个广告,则始终可以使用多个 GADAdLoader 对象。

{: .special }

GADAdLoaderDelegate 协议

对于您请求的每种广告格式,广告加载器代理均需要实现一个对应的协议:

GADNativeAppInstallAdLoaderDelegate

此协议包含一条加载应用安装广告时发送到代理的消息:

OBJECTIVE-C

SWIFT

- ( void ) adLoader :( GADAdLoader *) adLoader
    didReceiveNativeAppInstallAd :( GADNativeAppInstallAd *) nativeAppInstallAd ;

GADNativeContentAdLoaderDelegate

此协议定义已加载内容广告后发送的消息:

OBJECTIVE-C

SWIFT

- ( void ) adLoader :( GADAdLoader *) adLoader
    didReceiveNativeContentAd :( GADNativeContentAd *) nativeContentAd ;

处理失败的请求

上面的协议扩展了 GADAdLoaderDelegate 协议,其定义广告加载失败时发送的消息:

OBJECTIVE-C

SWIFT

- ( void ) adLoader :( GADAdLoader *) adLoader
    didFailToReceiveAdWithError :( GADRequestError *) error ;

您可以使用 GADRequestError 对象确定错误的原因。

广告选项

在上述创建 GADAdLoader 的过程中,最后提供的一个参数是一个可选的对象数组:

OBJECTIVE-C

SWIFT

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/6499/example/native"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
                options:@[ ... ad loader options objects ... ]];

GADNativeAdImageAdLoaderOptions 包含与原生高级广告中的图像相关的属性。通过在初始化期间创建 GADNativeAdImageAdLoaderOptions 对象、设置其属性并将其传入,应用可以控制 GADAdLoader 处理 Native Ads Advanced 图像资源的方式。

GADNativeAdImageAdLoaderOptions 具有以下属性:

disableImageLoading - 通过 GADNativeAdImage(其包含 image 和 imageURL 属性)的实例返回广告的图像资源。如果 disableImageLoading 设置为 false(默认值),则 SDK 将自动提取图像资源,并为您填充 image 和 imageURL 属性。但是,如果设置为 true,则 SDK 将仅填充 imageURL,从而允许您自行决定下载实际的图像。

preferredImageOrientation - 有些广告素材拥有多个可用的图像,以匹配不同的设备屏幕方向。通过将此属性设为一个屏幕方向常量,应用可以请求适用于特定屏幕方向的图像:

  • GADNativeAdImageAdLoaderOptionsOrientationAny
  • GADNativeAdImageAdLoaderOptionsOrientationLandscape
  • GADNativeAdImageAdLoaderOptionsOrientationPortrait

如果使用  preferredImageOrientation 为横向或纵向图像屏幕方向指定首选项,SDK 会先将匹配屏幕方向的图像放入图像资源数组中,随后放置不匹配的图像。由于有些广告仅提供一个可用的屏幕方向,因此发布商应确保其应用可处理横向和纵向图像。

如果未调用此方法,则将使用 GADNativeAdImageAdLoaderOptionsOrientationAny 的默认值。

shouldRequestMultipleImages - 有些图像资源包含一系列的图像,而不是一个图像。通过将此值设置为 true,应用将指明它已准备好为任何拥有一个以上图像的资源显示所有图像。通过将此值设置为 false(默认值),应用将指示 SDK 为任何包含一系列图像的资源仅提供第一个图像。

如果在初始化 GADAdLoader 时没有传入 GADAdLoaderOptions 对象,则将使用每个选项的默认值。

何时请求广告

显示原生高级广告的应用可以在实际显示这些广告之前不受限制地请求它们。在许多情况下,这是推荐做法。例如,如果某应用显示各种混合广告的项目列表,则该应用可以加载整个列表的广告,因为知道有些广告仅在用户滚动视图后才会显示,而有些广告根本不会显示。

尽管预提取广告是一项十分有用的技巧,但发布商不会一直保留不显示的旧广告,认识到这一点非常重要。所有超过一小时未显示的原生广告对象均将被弃用,并使用新请求中的新广告替代。

{: .special }

显示广告

加载广告时,您的应用将通过一条 GADAdLoaderDelegate 协议消息接收广告对象。然后,应用负责显示广告(即使不必立即显示该广告)。为了更轻松地显示系统定义的广告格式,SDK 提供了一些有用的资源。

广告视图类

对于每种由系统定义的格式,均存在一个对应的"广告视图"类:适用于应用安装广告的 GADNativeAppInstallAdView 和适用于内容广告的 GADNativeContentAdView。这些广告视图类是发布商需用来显示对应格式的广告的 UIViews。例如,一个 GADNativeAppInstallAdView 可以显示 GADNativeAppInstallAd 的一个实例。每一个用于显示该广告资源的 UIViews 均应是 GADNativeAppInstallAdView 对象的子项

例如,如果您正在 UITableView 中显示应用安装广告,则其中一个单元格的视图层次可能类似于:

此外,广告视图类还提供了 IBOutlets,用于注册每个资源使用的视图,同时提供了一个用于注册 GADNativeAd 对象本身的方法。通过这种方式注册视图后,SDK 可自动处理以下类似任务:

  • 录制点击
  • 录制展示次数(当第一个像素在屏幕上可见时)
  • 显示 AdChoices 重叠式广告

AdChoices 叠加层

AdChoices 叠加层由 SDK 添加到每个广告视图。请在原生广告视图的右上角留出相应空间,以便自动插入 AdChoices 徽标。另外,AdChoices 叠加层必须醒目可见,因此请选择相应的背景色和图像。如需了解有关叠加层的外观和功能的详细信息,请参阅原生回填实现指南。

代码示例

我们看下如何使用从 xib 文件动态加载的视图显示原生高级广告。在使用配置为请求多种格式的 GADAdLoaders 时,该方法非常有用。

在 xib 文件中对 UIViews 进行布局

第一步是对将显示原生广告资源的 UIViews 进行布局。您可以在 Interface Builder 中执行此操作,就像您创建任何其他 xib 文件一样。应用安装广告的布局方式可能类似于:

(google找不到这个图片)

请注意右上角中的 Custom Class 值。它被设为 GADNativeAppInstallAdView,即用于显示 GADNativeAppInstallAd 的广告视图类。对于系统定义的格式,您使用的广告视图类必须与您想要布局显示的广告格式匹配。

将 outlet 链接到视图

在放置好视图并将正确的广告视图类分配到布局后,您需要将广告视图的资源 outlet 链接到您已创建的 UIViews

(google找不到这个图片)

在 outlet 面板中,GADNativeAppInstallAdView 中的 outlet 已链接到在 Interface Builder 中布局的 UIViews。这让 SDK 可以知道哪个 UIView 显示哪个资源。

显示广告

在完成布局且已链接 outlet 后,最后一步是将代码添加到在加载广告后立即显示广告的应用。通过下面的方法可以在上面定义的视图中显示应用安装广告:

OBJECTIVE-C

SWIFT

#pragma mark GADNativeAppInstallAdLoaderDelegate implementation

- ( void ) adLoader :( GADAdLoader *) adLoader
    didReceiveNativeAppInstallAd :( GADNativeAppInstallAd *) nativeAppInstallAd {
  // Create a new AdView instance from the xib file.
  GADNativeAppInstallAdView * appInstallAdView =
      [[[ NSBundle mainBundle ] loadNibNamed :@ "NativeAppInstallAdView"
                                     owner : nil
                                   options : nil ] firstObject ];

// Associate the app install ad view with the app install ad object.
  // This is required to make the ad clickable.
  appInstallAdView . nativeAppInstallAd = nativeAppInstallAd ;

// Populate the app install ad view with the app install ad assets.
  (( UILabel *) appInstallAdView . headlineView ). text = nativeAppInstallAd . headline ;
  [(( UIButton *) appInstallAdView . callToActionView )
      setTitle : nativeAppInstallAd . callToAction
      forState : UIControlStateNormal ];
  (( UIImageView *) appInstallAdView . iconView ). image = nativeAppInstallAd . icon . image ;
  (( UILabel *) appInstallAdView . bodyView ). text = nativeAppInstallAd . body ;
  (( UILabel *) appInstallAdView . storeView ). text = nativeAppInstallAd . store ;
  (( UILabel *) appInstallAdView . priceView ). text = nativeAppInstallAd . price ;
  (( UIImageView *) appInstallAdView . imageView ). image =
      (( GADNativeAdImage *)[ nativeAppInstallAd . images firstObject ]). image ;
  (( UIImageView *) appInstallAdView . starRatingView ). image =
      [ self imageForStars : nativeAppInstallAd . starRating ];

// In order for the SDK to process touch events properly, user interaction
  // should be disabled on UIButtons.
  appInstallAdView . callToActionView . userInteractionEnabled = NO ;

// Add appInstallAdView to the view controller's view.
  [ self . myNativeAdPlaceholder addSubview : appInstallAdView ];
}

如您所见,上面的代码示例禁用了针对 UIButton(显示操作调用)的用户交互。 如果您使用 UIButtons 显示原生广告资源,那么,您还必须禁用它们的用户交互,以便 Google Mobile Ads SDK 可以正确接收和处理 UI 事件。

由于需要采取这个额外的步骤,因此,通常情况下,最好完全避免使用 UIButtons,改用 UILabel 和 UIImageView。

{: .special }

测试您的代码

为了帮助发布商测试他们的实现,我们已提供下列 AdMob 广告单元 ID:

ca-app-pub-3940256099942544/3986624511

您对该广告单元发出的所有请求均会视为"测试"请求,且不会计入生产统计数据。

注:此时,发布商不应使用含 Native Ads Advanced 请求的 testDevices 属性。使用上面的广告单元 ID 且不通过 testDevices 属性注册设备,这是目前的最佳测试做法。

AdMob(app内嵌广告)原生广告相关推荐

  1. 记录:app内嵌H5页面分享到微信后,在安卓手机打开白屏,苹果手机正常渲染的问题始末

    **背景:**app内嵌的一个个人名片页面需要分享到微信,测试环境下,分享到微信后,安卓和苹果手机都能正常渲染,生产环境苹果手机没问题,安卓手机打开分享的链接,页面一直空白. **原因分析:**单独加 ...

  2. 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)

    使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 传送门 转载于:https://www.cnblogs.com/momozjm/p/9389912.html

  3. app内嵌h5页面在ios手机端滑动卡顿的解决方法

    app内嵌h5页面在ios手机端滑动卡顿的解决方法 参考文章: (1)app内嵌h5页面在ios手机端滑动卡顿的解决方法 (2)https://www.cnblogs.com/1rookie/p/11 ...

  4. android 如何保存网页图片格式,求助,如何在安卓app内嵌的H5页面里长按保存图片?...

    最近要做个在H5页面里长按保存图片的功能,已经找了个第三方插件html2canvas解决了在浏览器和在ios app的长按保存,但是这个插件在android app里失效了,所以得单独处理androi ...

  5. 关于app内嵌h5页面调用百度地图定位问题,为什么定位不准呢?

    关于app内嵌h5页面调用百度地图定位问题,为什么定位不准呢?以下为代码. 百度地图:里面有3种定位方式(a:浏览器定位,b:IP定位,c:定位SDK辅助定位),我选择第3种,是需要app那块添加些什 ...

  6. 云闪付APP内嵌H5监听左上角X关闭事件

    最近在做云闪付蓝牙对接,遇到的一个问题. 需求 用户进入云闪付APP内嵌 H5页面调用接口连上蓝牙后,可能不想支付使用,或其他原因,随手关闭左上角X关闭浏览器,这时需要监听这个动作,断开蓝牙连接,不然 ...

  7. 移动端app内嵌网页开发框架

    框架技术栈 之前开发过一个项目,app内嵌网页应用使用Antd mobile + React + mobx + webpack的技术栈来开发.记录一下对于移动端开发中特殊的一些点: 自适应布局 我们在 ...

  8. APP内嵌网页使用微信或支付宝的H5支付

    如何绕过微信或支付宝的H5支付的拦截验证?下面我们从本质上来说明该如何解决这个问题. 微信和支付宝的H5支付下单成功后都会返回一个跳转支付的url连接,通过这个连接可以拉起微信或支付宝进行支付操作. ...

  9. APP内嵌H5开发常见问题及解决方案

    前言 作为一个开发了多个 H5 项目的前端工程师,在开发过程中难免会遇到一些兼容性等爬过坑的问题.现在我将这些问题一一汇总一下,并在后面给出坑产生的原理,和现阶段常规的填坑方案.由此来做一个阶段性的总 ...

最新文章

  1. iOS: 零误差或极小误差的定时执行或延迟执行?
  2. 使用Azure portal Create Virtual Machine
  3. 020_Vue非父子组件之间数据交互
  4. 航空航天大事件c语言程序设计,2017年沈阳航空航天大学航空航天工程学部823C语言程序设计考研强化模拟题...
  5. ROS服务通信机制原理及示例代码
  6. html树形多选下拉列表,EasyUI 多行树形下拉框(Multiple ComboTree)_Vue EasyUI Demo
  7. web服务器负载架构
  8. (vue基础试炼_07)Vue实例生命周期函数
  9. java操作地理位置信息
  10. 阿里云windows server 2012安装.net framework3.5失败解决方案
  11. Java基础语法一 数据类型运算符
  12. Drools 规则引擎的使用
  13. 利用matlab实现h 控制,利用matlab实现H-infinity鲁棒控制
  14. 数据标注软件labelme详解
  15. hive难点以及例子SXT
  16. java graphics2d 画圆_java Graphics2D 画图
  17. JS拖拽效果,代码精干,通俗易懂!
  18. Primefaces使用小结
  19. H.266/VVC-VTM代码学习18-自适应QP设置(Adaptive QP)
  20. 语音识别英语_英语语音识别_英语 语音识别 - 云+社区 - 腾讯云

热门文章

  1. 1046-最小时间差
  2. c语言入门自学ppt文库,《C语言入门基础》PPT课件.ppt
  3. idea显示方法参数 Show parameter name hints
  4. 解决“无法定位程序输入点于动态链接库XX.DLL上”的方法
  5. 爬虫第1课,手把手教你,批量爬取高清壁纸
  6. 小议智商、情商和财商
  7. 边缘计算网关EasyNVR及云服务EasyCVR、EasyDSS等联合打造TSINGSEE青犀视频云边端协同一体化
  8. 代码画年兽,虎年祝大家虎虎生威
  9. mysql 创建全文索引_mysql创建索引
  10. Linux查看pid进程