本文转自:http://www.cocoachina.com/applenews/devnews/2014/0701/8998.html
版权归原作者所有。
本文由  Da杯柠檬水(微博)  翻译自  AppCoda
原文: Using iAd to Display Banner Ad in Your App
虽然,你可能即将开始开发下一个超级应用程序,你的一切规划和设计都已就绪,但还是有一件事可能你并没有把它考虑进去--如何通过它盈利呢?有两种选择,要么使它成为一个付费应用程序,那些潜在的用户可以付费下载;或者使它成为一个免费的应用程序,添加一些广告,从广告中赚取收入。
如今的趋势表明,用户更有可能下载免费的应用,而不是收费的应用程序。他们只会购买真正值得购买的应用,或者它是超有名气,并获得良好的评价。然而,如果你决定让你的app免费时,就可以在其内整合广告。要做到这一点,你有不同的服务选择来显示广告,其中一个是由苹果提供的iAd网络。毋庸置疑,你甚至已经从教程的标题看出,今天的话题是关于如何使用iAd广告,但是在行动所有之前让先看一些介绍性的东西。
在实际开发开始前确定你的应用是免费还是付费非常重要,因为它会直接影响到你的工作。对于付费应用,就没有必要做任何特别的考虑,但是免费的应用程序需要考虑在应用中的什么地方展示广告,并在相应界面进行设置。说到位置,广告应放置到视图控制器的底部或者顶部。如果你的app不包含tab bar,那么广告应该放在屏幕的底部,否则应该放置在屏幕顶部。请注意,退一步讲,如果您在视图中其他地方显示广告,就违背了Human Interface Guidelines,苹果将会拒绝你的应用。
除了上述所有关于广告位置的规定外,还有一组规则你更应该考虑。首先,不要指望广告是始终可用。各种网络或服务器端的问题可能会给广告带来麻烦,并且你还要考虑当没有广告显示时可能出现难看的空白。当没有广告时显示另一个有意义的视图是个不错的选择。其实,这完全取决于你的应用程序的设计是否应该显示另一个视图,而不是广告横幅显示与否。
另外,banner广告不应该一直被其他视图控制器遮蔽。你必须确保他们会出现在最可见的视图控制器上,用户与应用程序交互时,会花更多的时间在上面,这为您的广告获得用户点击和盈利提供了最大的可能性。
至于收入,当用户点选广告时苹果和开发者都会受益。实际上,开发商的分得了百分之70%的收入,其余30%是提供iAd网络服务的苹果所持有。同样的分成也适用于付费应用程序。
这是很常见的,独立开发者们和公司遵循另一种方法,创建同一应用程序的两个版本。第一个版本,收费,全功能。第二个版本是免费的,但它不包含所有付费版本特性的功能。该免费版本,也被称为精简版,可以有广告,你以后可能从这些广告获得收入;如果用户喜欢的应用程序并且购买付费版本,那你可以获得额外的收入。请记住,你永远不应该在付费应用程序添加广告。即使苹果允许这样的事情发生,我对这件事也表示严重怀疑,你可能会收到很坏的批评和评分,因为用户是不会花钱看广告的。
在本教程的下一节中,我们将一如既往实现一个示例应用程序,并通过这一点,你将学习如何将苹果的广告服务整合到你的项目中。即使你对此不熟悉,但你也会发现,使用广告是一个超级简单的过程。所以,请继续阅读并了解如何这一新的伟大工程!
APP概述
与往常一样,我们的教程将根据创建的一个示例应用程序。在一个我们将开始开发之前,我们先看如何通过几步操作整合iAd广告并显示广告横幅。更具体地说,我们将做到以下几点:
1.我们将在视图的底部添加一个banner广告。这将是该广告将在可用时显示的容器。如果没有可用的广告,我们就将其隐藏,直到我们有内容显示。
2.一般来说, 当点击广告时会弹出一个全屏的模态视图,会覆盖屏幕上所有内容。在这种情况下,任何关于视觉更新的关键或重要任务,都必须暂停或停止,并在该广告关闭后重新启动。为了演示如何管理这个过程,我们将使用一个定时器计数,来计算用户观看默认视图控制器的视图秒数,并使用一个标签来展示信息包含的计时器的值。当广告被点击时,我们将停止计数,我们将在它再次关闭后重启计数。
此外,在本教程中,我们将使用一个额外的框架,即iAd框架。没有它,就不可能展示和处理iAd广告了。
下图说明了本教程中所用的示例应用:
工程创建
让我们首先为示例应用程序创建一个新项目。启动Xcode和在欢迎窗口中选择相应的选项,如下图:
在出现的向导中,根据该节的iOS应用程序类别,选择单一视图应用程序模板(Single View Application):
单击下一步,在Product Name字段中设置的iAdDemo作为项目的名称。此外,请确保设备菜单选项选择的是iPhone。其他设置保持原样,并继续:
在引导的最后一步选择一个目录来保存项目,然后单击创建。
界面配置
现在我们已经建立了一个空项目,让我们在应用程序的界面上开始工作吧。点击Main.storyboard文件展示Interface Builder。下面你看到的是所有你应添加的子视图以及他们的属性,所以我们在这部分工作的最后结果类似于前面所示的程序图。请注意,您可以跳过描述子视图的这部分,如果你只是想集中讨论了banner广告。
UILabel
1. Frame: X=20, Y=60, Width=280, Height=40
2. Text: iAd Integration
3. Font: Avenir Black, 24.0pt
4. Text Alignment: Center
UILabel
1. Frame: X=20, Y=108, Width=280, Height=21
2. Text: by Appcoda
3. Font: Avenir Medium Oblique, 17.0pt
4. Text Alignment: Center
5. Text Color: Red=255, Green=128, Blue=0
UILabel
1. Frame: X=20, Y=360, Width=280, Height=40
2. Text: None
3. Font: Noteworthy Light, 15.0pt
4. Text Alignment: Center
5. Text Color: Light Gray
UILabel
1. Frame: X=0, Y=518, Width=320, Height=50
2. Text: Ad banner will appear here
3. Font: Avenir Medium, 14.0pt
4. Text Alignment: Center
5. Text Color: White
6. Background Color: Red=255, Green=128, Blue=0
ADBannerView
1. Frame: X=0, Y=518, Width=320, Height=50
加入上述所有子视图,并设置其属性后如图所示,你的界面看起来应该像这样:
因此有必要现在就创建并连接两个IBOutlet属性。第一个连接banner广告视图,而第二个将连接到一个不包含文本的标签。对于这个标签,我们将稍后显示的时间计数器的值。打开ViewController.h文件,添加如下两行:
  1. @interface ViewController : UIViewController
  2. @property (weak, nonatomic) IBOutlet ADBannerView *adBanner;
  3. @property (weak, nonatomic) IBOutlet UILabel *lblTimerMessage;
  4. @end
此时Xcode将发出错误和一些警告。那是因为我们还没有加入iAd的框架。我们并没有在文件中加入相应的库。让我们来解决它,让我们开始加入框架。在项目导航器(Project Navigator)中,单击iAdDemo项目,然后点击General选项卡。
接着,在屏幕的底部,在Linked Frameworks and Libraries部分,单击加号图标添加新的框架。在出现的新窗中,开始输入文字:“iAd Framework”,Xcode会立即显示它。选中它,然后点击Add按钮:
现在,回到ViewController.h头文件,并导入下一个库:
  1. #import
此时,Xcode中将不会再显示任何错误和警告。最后,我们的类必须采取banner广告协议,这样我们就可以访问所有必要的委托方法。修改界面标题行,如下所示:
  1. @interface ViewController : UIViewController
最后的步骤,这两个IBOutlet属性必须被连接到相应的子视图。打开Main.storyboard文件,并把adBanner属性连接到该banner视图, 同时把lblTimerMessage标签连接到无文字标签视图。
iAd的整合
通过将banner广告添加到界面以及把iAd框架到项目中,广告已经能够被传递到应用程序。然而,没有处理是可用的,因此我们的目标是采取一切行为让广告横幅的管理可行的。
iAd框架提供了几个委托方法来管理广告。这些方法让我们知道一个广告即将被显示或它已经显示出;当用户点击一个广告时发生错误以及没有更多的广告可以送达;当用户点击广告以查看它的全屏视图时模态视图丢失等。除了所有这些,你应该时刻记得广告可能不会被传达。因此,直到第一个广告准备好要显示时,横幅广告必须是不可见的。它也应该成为隐藏在iAd网络将停止投放广告的一些原因。当iAd网络因为一些原因停止广告服务时它也应该是隐藏的。
在深入代码之前,我们开始必须执行两件事情:我们先构造横幅广告视图的委托的类,其次将其隐藏。打开ViewController.m文件,并转到viewDidLoad方法并补充下几行:
  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view, typically from a nib.
  5. // Make self the delegate of the ad banner.
  6. self.adBanner.delegate = self;
  7. // Initially hide the ad banner.
  8. self.adBanner.alpha = 0.0;
  9. }
正如你看到的,通过把它的Alpha值设为0,我们隐藏了banner视图。随后,当一个委托方法会通知我们,广告已准备好要显示时,我们再将这个值设置为1,另外我们也使用动画让其更具吸引力。更改alpha值,显然不是隐藏或显示广告横幅的唯一途径。还有许多其他的方法来做到这一点,例如设置更改隐藏显示栏的属性的值,或一开始就把banner广告放置在可见屏幕区域之外。用什么方法,你最终的选择完全取决于你,选择最适合你应用的方法。为了简便起见,我只是选择使用alpha值。
该ADBannerViewDelegate协议总共提供5个委托方法。通过它们,我们可以管理广告和应用程序的最终行为。我们会逐个进行简单的分析。需要注意的是在每一个委托方法体里,我特意加了NSLog命令,所以当我们运行应用程序后可以知道调用了哪一种方法。
第一种方法:
  1. -(void)bannerViewWillLoadAd:(ADBannerView *)banner{
  2. NSLog(@"Ad Banner will load ad.");
  3. }
从方法的名称很容易得出结论,当一个新的广告即将被载入时调用。请注意,当这个方法被调用时广告还没有准备好要显示。
第二个委托方法:
  1. -(void)bannerViewDidLoadAd:(ADBannerView *)banner{
  2. NSLog(@"Ad Banner did load ad.");
  3. }
当新广告已加载并准备显示时调用该方法。随后,在这个方法中,我们需要添加能让banner广告再次可见的代码,这样我们就知道有广告可以显示。
第三个委托方法:
  1. -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{
  2. NSLog(@"Ad Banner action is about to begin.");
  3. return YES;
  4. }
当用户点击banner广告时将调用此方法,并且该广告将以全尺寸模式视图显示。当发生这种情况时,需要暂停用户的任何视觉上的进程或关键任务,直到解除模态视图。这种方法有趣之处是它返回的值。当返回值是YES,那么广告将显示在全屏视图。但是,如果返回值是NO,当用户点击该广告时,什么都不会发生。
第四个委托方法:
  1. -(void)bannerViewActionDidFinish:(ADBannerView *)banner{
  2. NSLog(@"Ad Banner action did finish");
  3. }
全屏视图添加解除时调用该方法。这是非常有用的,因为在这里任何暂停或停止任务都应该被再次放到Action里了。
最后,第五个委托方法:
  1. -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
  2. NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]);
  3. }
这个方法也是非常有用和重要的,因为它调用的时候没有广告可被传递到应用程序。当它被调用时,我们的工作就是隐藏banner视图,以便在没有广告展示时,不会给用户一个空白区。
正如你所了解的,所有这些委托方法都使广告处理变得非常容易。现在,正如我们之前所说,我们必须在广告已准备好要显示时展示banner广告,所以要修改bannerViewDidLoadAd:委托方法,如下所示:
  1. -(void)bannerViewDidLoadAd:(ADBannerView *)banner{
  2. NSLog(@"Ad Banner did load ad.");
  3. // Show the ad banner.
  4. [UIView animateWithDuration:0.5 animations:^{
  5. self.adBanner.alpha = 1.0;
  6. }];
  7. }
你看,我们用动画的形式设置我们的banner广告视图的alpha值设置为1。该动画将设置成一个淡入效果。
最后,当没有广告将显示时,我们应该隐藏的广告横幅视图。在bannerView:didFailToReceiveAdWithEr ror:添加与上述相同的代码,这一次设置Alpha值为0:
  1. -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
  2. NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]);
  3. // Hide the ad banner.
  4. [UIView animateWithDuration:0.5 animations:^{
  5. self.adBanner.alpha = 0.0;
  6. }];
  7. }
与广告最重要的相关工作已经完成。在本教程的下一节中,我们将看到如何使用其他委托方法,但是我们的应用程序已经可以使用了。所以,你可以对它进行一次尝试,等待第一个广告被显示。
添加计数器
广告横幅现在已经能很好的工作了,最重要的环节--正确地显示和隐藏的横幅广告已经实现。然而,本教程并不只是讨论所有重要的委托方法,所以在这一节中我们要做一个有趣的项目。我们将使用一个定时器(一个NSTimer对象),将计算用户看到视图控制器场景的秒数,并利用iAd的框架提供的委托方法,在广告以全屏模式展示时,我们将暂停计数。当广告视图解除后,计数器将重新工作。
让我们开始通过声明三个属性,以实现我们需要的目的。第一个属性是定时器对象,第二个将用于计算秒数的整数值,最后第三个属性是一个boolean标志,将指示计数是否应该暂停。在ViewController.m文件,转到私有类部分,并添加如下所示的属性:
  1. @interface ViewController ()
  2. @property (nonatomic, strong) NSTimer *timer;
  3. @property (nonatomic) int secondsElapsed;
  4. @property (nonatomic) BOOL pauseTimeCounting;
  5. @end
现在,在viewDidLoad方法中,让我们做一些初始化:
  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. ...
  5. ...
  6. // Start the timer.
  7. self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showTimerMessage) userInfo:nil repeats:YES];
  8. // Set the initial value for the elapsed seconds.
  9. self.secondsElapsed = 0;
  10. }
正如你在创建定时器对象过程中看到的那样,选择器参数被设置为showTimerMessage方法。这是一个尚不存在的私有方法,由定时器每隔一秒调用(设置为1.0的间隔参数)。当然,我们希望我们的计时器反复工作,所以我们重复设置参数值为YES。
现在Xcode显示警告,因为它无法找到上述声明的方法。让我们首先声明这个方法来解决它,然后我们将定义它。回到私有类部分,并添加下一行:
  1. @interface ViewController ()
  2. ...
  3. ...
  4. -(void)showTimerMessage;
  5. @end
现在在它的定义中,你会看到下面的代码片段,代码执行流程依赖于pauseTimeCounting标志。如果它的值是false,那么我们将继续计数和更新lblTimerMessage中的文本。显然,当它的值为true,我们就不计数了。注意,任何文本更新之前有必要增加secondsElapsed属性的值。实现是非常简单的,所以你看:
  1. -(void)showTimerMessage{
  2. if (!self.pauseTimeCounting) {
  3. self.secondsElapsed++;
  4. self.lblTimerMessage.text = [NSString stringWithFormat:@"You've been viewing this view for %d seconds", self.secondsElapsed];
  5. }
  6. else{
  7. self.lblTimerMessage.text = @"Paused to show ad...";
  8. }
  9. }
让我们来看看如何使用其他两个iAd的委托方法。我们看到的第一个是bannerViewActionShouldBe gin:willLeaveApplication:。正如我已经说过,这种方法在用户已点击了广告之后被调用,以全屏视图显示该广告。当然,有必要将方法的返回值设置为YES,否则将没有广告显示。当调用此方法时我们所要的就非常简单了: 告诉我们的应用程序应该暂停时间计数。想要做到这一点,我们可简单地改变pauseTimeCounting标志的值。让我们先来看看方法:
  1. -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{
  2. NSLog(@"Ad Banner action is about to begin.");
  3. self.pauseTimeCounting = YES;
  4. return YES;
  5. }
除了暂停计数过程, 当一个带有广告的全图像视图被关闭时,我们还必须允许它可以继续下去。为了这个目的,我们将使用bannerViewActionDidFinis h:委托方法。在这里面,我们将简单地再次更改标志的值。如下:
  1. -(void)bannerViewActionDidFinish:(ADBannerView *)banner{
  2. NSLog(@"Ad Banner action did finish");
  3. self.pauseTimeCounting = NO;
  4. }
这是我们最后的环节!现在,当广告横幅被点击时计数将暂停;当banner解除时,它会再次计数。
编译并运行应用程序
此时,你可以自由地编译和运行应用程序。你会发现,广告横幅将会在屏幕底部出现一段时间,计数器的值会显示在消息标签上。点击广告横幅,就会看到一个全屏模式广告。当您返回到视图控制器的场景,并显示正在观看广告时,你看到的计数器并不是活跃的。如果突然没有广告被服务,不用担心,这是正常的。广告投放可能随时会停止。
作为一个额外的练习,你可以尝试在视图的顶部显示的广告横幅。
总结
广告集成到应用程序中是一个相当常见的策略,而且是一个很好的方式,让你的免费应用程序也能带来一些收入。说实话,也许你不会通过广告赚一大笔,但如果你的应用程序获得大的下载量是,那么你就可能有一个显著的收益。正如你在本教程中所看到的,有关于广告横幅简单的规则,以及所需的代码仅几行而已。所以,如果你还在想着是否应该在你的应用程序中添加广告以及如何添加,那么这是一个不错的机会。当然,官方文档也是如此建议并鼓励使用他们的。我希望这个教程对大家能有一些帮助,并希望你一如既往地随时与我们分享任何想法或意见。
你可以从这里 下载完整的Xcode项目,以供参考。

如何使用iAd在应用程序中展示Banne…相关推荐

  1. 如何使用iAd在应用程序中展示Banner广告

    本文由 Da杯柠檬水(微博) 翻译自 AppCoda 原文:Using iAd to Display Banner Ad in Your App 虽然,你可能即将开始开发下一个超级应用程序,你的一切规 ...

  2. vue中使用 markdown 编辑器编写图文消息,并在小程序中展示。

    需求是做个类似微信公众号那样的图文编辑推广,文章最后要在小程序里面浏览. 开始找到个富文本编辑器'vue-quill-editor' 可以使用,最后出来的内容是html格式,虽然小程序里面可以转译过来 ...

  3. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  4. 小程序多个echars_微信小程序中使用echarts以及踩坑总结

    人在家中坐,锅从天上来. 半个月前本来在家写着一个项目,还没来得及提测,领导突然一个电话,需要立刻去支援另一个项目,一打听,一个烂尾半年的项目,纵使内心不愿意,还是要去啊.因为鲁迅说过,生活就像强*, ...

  5. 一个Python绘图示例程序中的几个语法糖果

    简 介: 在Python中还存在一些有趣的 Syntatic Sugar (语法糖果),在编程的时候可以进一步简化编程的效率. 关键词: 语法糖果 #mermaid-svg-yTrhj3mq9LtD6 ...

  6. 在.NET客户端程序中使用多线程

    在.NET客户端程序中使用多线程通常认为在编写程序中用到多线程是一个高级的编程任务,容易发生错误.在本月的栏目中,我将在一个Windows窗体应用程序中使用多线程,它具有实际的意义,同时尽量使事情简单 ...

  7. 在ASP.NET Core应用程序中使用分布式缓存

    本文要点 ASP.NET Core内置了分布式缓存接口. 分布式缓存的主要好处有性能.数据共享和稳定性. Couchbase服务器是一个内存优先的数据库,非常适合作为分布式缓存. NuGet程序包使得 ...

  8. Canvas绘图在微信小程序中的应用:生成个性化海报

    Canvas绘图在微信小程序中的应用:生成个性化海报 如极客时间的一些实现案例: 基础语法 Canvas本质是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素,默认大小为30 ...

  9. 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

最新文章

  1. Linux之文件权限命令
  2. 图片质量低怎么办?这个网站很不错!
  3. 教你如何rEFIt-让你开机免按option!
  4. Apache Lucene基础教程
  5. 使用JUnit规则测试预期的异常
  6. 软件oem要注意什么_化妆品OEM客户要着重注意这3个基本点,不然就吃大亏了
  7. java自定义注解类
  8. Linux-系统编程-知识点概述
  9. 基于SSM的猫头鹰物流网站
  10. 高中 信息科技 计算机网络 课件,初中信息技术课件第一课--认识计算机网络.ppt...
  11. c语言 音符符号大全,音符符号大全
  12. 性能测试培训总结-spotlight on mysql
  13. 解决office的PPT和WPS的PPT不兼容的问题
  14. 【机房重构】一步一步往上爬——数据库设计
  15. 管道仪表流程图中常用的字母及其含义
  16. Markdown修改字体颜色、输入数字公式、输出空格
  17. 这个建筑风水布局值一亿
  18. 在二十四节气中,冬至是个大节气,从冬至以后就开始数九啦一九二九不出手,
  19. linux删除文件前几行,linux删除文件的前n行
  20. 某建筑市场监管平台-AES加密逆向

热门文章

  1. 微带线 带状线 过孔的时延对比
  2. 学校校车运营各项安全管理制度_学校校车安全管理的规章制度
  3. 如何在PPT文件中插入文件, 并且发给其他人文件不失效
  4. 计算机科学 vs 计算机技术
  5. 英文原文:6 Life Habits That Programming Could Teach You Today
  6. GIT常见问题及命令指南
  7. C. Odd/Even Increments
  8. JavaScript的输出语句
  9. Gluster的配置及离线安装
  10. 植树节的微信软文如何写?素材加文案帮你分分钟搞定!