如果你已经做了一款超牛X的APP。你也许还有一件是需要操心。APP够好了,怎么盈利呢?你可以对下载你的APP的用户收费。也可以完全的免费,然后在APP里放广告来实现盈利。现在来说,除非一款APP真的是非用不可的,或者很有名,在要不就是很好玩的游戏。否则,用户一般是不会付费的。明智的选择是免费,集成广告。广告的收益是由苹果和开发这共同分成。一般来说开发者占七成,apple占三成。毕竟苹果建立了广告分发的网络。

当然也有很多的开发者选择了在免费版的APP里插播广告的同时,还开发了一个收费但是没有广告的版本的。无广告的一般叫做Lite版,免费但是有广告或者同时功能不是很全。如果用户喜欢你的Lite版,或者他们回去付费购买全功能无广告的版本。

继承广告你可以有很多的选择。各种移动广告商都会开发一堆的SDK给你用,集成进去可以现实广告。这里主要讲apple的iAd的Banner。Banner的放置位置以及相关的处理是可以迁移到其他广告平台的Banner处理上的。关于Banner的位置,一般是放在顶端或者底端。对于没有tab bar的View来说,Banner就可以放在底端。你也可以放在View的别的地方。只是,做好苹果不过审的准备。

下面进入正题。首先你已经参加了那个99刀的开发者计划。之后需要在iTunes Connect的账户中申请加入iAd Network。

点进去,然后在下一个页面中申请(request)iAd Network。

点Request按钮,然后会让你看一堆东西,最后同意一下。要加入iAd也只能同意。同意了之后就会进入到下一个页面,设定联系人信息、银行信息和税收信息。

设定好之后就等着通过吧。

在你的app里继承iAd

下面开始在app中继承iAd。这里主要说的是Banner。

首先,在Xcode5里选择创建一个project,选择Single View Application。

下面的,项目名字什么的随便起就好了,就不贴图了。

项目建好以后首先一点就是需要把需要用到的iAd framework加进项目中(当然不加也行,在Xcode5和iOS7的情况下,直接使用@import iAd。framework会自动添加,无需手动添加。详细参考stackoverflow的答案)。

下面初始化我们的Banner view:

#import "BVRootViewController.h"

@import iAd;

@interface BVRootViewController ()<ADBannerViewDelegate>{
  @property(weak, nonatomic) ADBannerView *bannerView;
}
@implementation BVRootViewController

- (void)viewDidLoad
{
[super viewDidLoad]; ADBannerView *bannerView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 44, 320, 50)];
bannerView.delegate = self;
bannerView.alpha = .0f;
[self.view addSubview:bannerView];
self.bannerView = bannerView;
}

把iad framework加上,把Banner View加上。总体来说,这就可以用了。但是,这样达不到对Banner View的精细控制。所以在Banner View初始化之后要加上代理,指定为self。在代理中你可以知道广告什么时候会出现或者已经出现在界面上。或者,各种原因导致的获取广告失败,时候有更多广告可以出现,用户是否点击了Banner的广告二进入全屏模式的广告展示等。最关键的一点,广告不是你想有,想有就能有的。广告的出现需要时间,不是立刻的。所以,在第一个广告出现之前,这个光秃秃的Banner最好不要出现在用户是实现之内。在种种原因导致的广告无法展示的情况出现的时候,这个Banner最好也隐藏起来。设定alpha=0.0f,Banner View就不可见了。之后,在代理方法中,当广告准备好现实的时候把alpha设定为1,用户可见。当然,要隐藏这个Banner你可以直接设置hidden=YES, 或者把Banner直接移出可视的区域。什么方法都可以,但是这里我选择了设置alpha=0.

ADBannerViewDelegate协议一共有五个方法。使用这些方法就可以管理Banner的各个方面了。下面把这些方法都添加到代码中,并在每个方法体里加上NSLog(@"%s", __PRETTY_FUNCTION__);输出所在方法名。这样研究下每个方法都是做什么用的。

- (void)bannerViewWillLoadAd:(ADBannerView *)banner{
NSLog(@"%s", __PRETTY_FUNCTION__);
}

按照苹果的良好命名习惯,你可以一眼就从方法名称中知道这个方法是做什么的。这个方法是在广告即将被加载时调用。所以,这个方法调用的时候广告还没加载进来。

- (void)bannerViewDidLoadAd:(ADBannerView *)banner{
NSLog(@"%s", __PRETTY_FUNCTION__);
}

这个方法在广告加载之后调用。这个时候广告已经可以显示了。之后就在这个方法中添加代码,让Banner显示出来。

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{
NSLog(@"%s", __PRETTY_FUNCTION__);
return YES;
}

这个方法在用户点击Banner的时候调用。用户点击Banner之后,会出现一个modal view现实全屏广告。当这个全屏广告出现的时候任何用户相关的活动都需要暂停。这里返回的是YES,如果返回的是NO的话,用户点击了Banner之后不会出现全屏的广告。

- (void)bannerViewActionDidFinish:(ADBannerView *)banner{
NSLog(@"%s", __PRETTY_FUNCTION__);
}

这个方法在全屏的广告退出的时候调用。在这里,全屏广告出现时暂停的全部动作又可以开始运行。

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
NSLog(@"%s", __PRETTY_FUNCTION__);
}

这个方法很重要。在没有广告分发到app的时候调用这个方法。这个方法被调用的时候,隐藏Banner这样就不会出现一个光秃秃的Banner了。

如上所术,protocol中的方法让处理广告相关的东西变得简单。现在,把全部前面提到的具体有用的代码都添加到各个方法中。

- (void)bannerViewDidLoadAd:(ADBannerView *)banner{
NSLog(@"%s", __PRETTY_FUNCTION__); [UIView animateWithDuration:.25f animations:^{
self.bannerView.alpha = 1.f;
}];
}

这里使用一个小动画,让Banner慢慢的出现在用户的视野中。然后:

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
NSLog(@"%s", __PRETTY_FUNCTION__); [UIView animateWithDuration:.25f animations:^{
self.bannerView.alpha = .0f;
}];
}

最重要的东西就动处理完了。到这里app的小广告已经可以用了。

so far so good。但是还不够好。我们需要给Banner View加个计时器。在全屏广告出来的时候暂停,退出的时候恢复计时。

为了实现这个功能首先需要三个属性:

@property (strong, nonatomic) NSTimer *timer;
@property (assign, nonatomic) NSInteger secondsElapsed;
@property (assign, nonatomic) BOOL pauseTimeCouting;

在viewDidLoaded里面添加必要的初始化代码:

- (void)viewDidLoad{

    // 初始化代码
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
self.timer = timer;
self.secondsElapsed = 0;
}

这时候Xcode会给出一个警告。咱们在NSTimer设定的selector还没有给出实现:

- (void)timerAction:(id)sender{
NSLog(@"%s", __PRETTY_FUNCTION__);
}

在这个方法里,在Timer每隔一秒调用的时候执行。在这里判断是否需要计时,如果需要的时候则读秒增加一。否则,暂停计时。

- (void)timerAction:(id)sender{
NSLog(@"%s", __PRETTY_FUNCTION__); if (!self.pauseTimeCouting) {
self.secondsElapsed++;
}
else{
NSLog(@"不计时");
}
}

在前面讨论代理方法的时候说到,方法- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave 在广告进入全屏的时候会被调用到。当然是在返回YES的时候。这个时候需要暂停计时。只要设定pauseTimeCouting为YES,就可以达到目的:

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{
NSLog(@"%s", __PRETTY_FUNCTION__); self.pauseTimeCouting = YES; return YES;
}

当然啦,计时是在什么时候开始呢?在全屏广告退出的时候:

- (void)bannerViewActionDidFinish:(ADBannerView *)banner{
NSLog(@"%s", __PRETTY_FUNCTION__);
self.pauseTimeCouting = NO;
}

这里全部讲完。

在app里继承广告盈利是很多开发者的选择。你不一定能从广告上赚很多,但是如果你的app有很多人下载的话,你至少可以有一个客观的收入。在本篇教程中你也看到,集成广告只要不多的几行代码。如果还有不清楚的可以参看苹果的官方代码。希望这篇教程对你有帮助。

在APP中集成iAd Banner展示广告盈利的更多相关文章

  1. 怎么在我们的App中集成条码扫描功能?

    现在很多App都有条码扫描功能,有的手机比如某米在照相机中集成了条码扫描功能,但是还有一部分手机没有这样的集成,比如韩国某星,需要自己下载一个条码扫描App.今天我们就来看看怎么在自己的App中集成一 ...

  2. Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程

    之前写过俩相关的教程,最近发现插件官方更新了不少内容,所以也更新一篇Firebase Admob Unity3d插件的教程,希望能帮到大家. Firebase Admob Unity3d插件是一个Un ...

  3. 在Android App中集成Google登录

    技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...

  4. 【iOS开发】在 App 中加入 AdMob 广告 - 入门介绍与编程技巧

    前言 虽然在App中加入广告来盈利是比较低级的商业化方式,但对于个人开发者或者小团队开发者来说,做出一个简单易用的免费小工具(举个栗子),在里面加入一些广告,如果用的人多,也是可以带来一些可观的收入的 ...

  5. 集成iAd广告

    在iPhone程序中集成广告,管他能不能赚钱,不放上一个iAd就心有不甘. 参考了下面这篇文章: http://bees4honey.com/blog/tutorial/how-to-add-iad- ...

  6. 创意设计展示:折叠效果在移动 App 中的应用

    在今天在移动 App 界面设计中,你可以看到不同创意类型的视觉效果.特别是在 Dribbble 上面,有有很多应用程序的 UI 概念设计,让你惊叹.当然,他们大多只是作为一个概念设计,可能永远也不会成 ...

  7. swift app中展示折线图, 饼状图, 柱状图等数据图表

    github 下载Charts-master SDK,该SDK有多种可自定义的图表样式 lineChart 正弦余弦线图 LineChart (cubic lines) LineChart (grad ...

  8. SharePoint2013 中集成AD RMS 与Office Web App 2013集成

    SharePoint2010时Office Web App2010是一个让人又爱又恨的产品,尽管能够在WEB上查看与编辑文档,甚至能够多能协同编辑,但总会遇到两个看似普通的需求却需要给业务人员大费口舌 ...

  9. Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...

随机推荐

  1. htm标签的语意

    标签名 英文全拼 标签语意 div division 分割 span span 范围 ol ordered list 排序列表 ul unordered list 不排序列表 li list item ...

  2. linux 利用nethogs查看某进程的网卡流量

    一.nethogs介绍 分享一个linux 下检测系统进程占用带宽情况的检查.来自github上的开源工具. 它不依赖内核中的模块.当我们的服务器网络异常时,可以通过运行nethogs程序来检测是那个 ...

  3. 【微信小程序常识】如何绑定微信小程序体验者

    转自:https://blog.csdn.net/futruejet/article/details/53223826 一.操作步骤 (1)打开微信小程序公众平台->点击右边菜单[用户身份]-& ...

  4. Python2处理字符集问题

    这篇文章主要介绍了Python2.x中文乱码问题解决方法,本文解释问题原因.给出了处理办法并讲解了编码解码的一些知识,需要的朋友可以参考下 Python中乱码问题是一个很头痛的问题. 在Python3 ...

  5. Unity脚本开发基础 C#

    1. MonoBehaviour 类 常用事件响应函数: 2. 访问游戏对象 (1) 通过名称来查找 (2) 通过标签来查找 上述函数比较费时,应避免在 Update 函数调用. 3. 访问组件 对于 ...

  6. LeetCode之动态规划

    62. Unique Paths QuestionEditorial Solution Total Accepted: 86710 Total Submissions: 239084 Difficul ...

  7. 在linux下安装并操作tomcat

    1.安装tomcat1).下载tomcat从官网http://tomcat.apache.org/下载tomcat,保存在/home目录下.root@ubuntu:/home/ubuntu/Downl ...

  8. linux 安装天气插件

    1. 用命令 sudo apt install gnome-shell-extension-weather 安装插件 但是在那之前你安装了 GNOME Shell Extensions 如果没有安装 ...

  9. JavaScript中的一些小技巧

    js 数字操作:1.1 取整:取整有很多方法如: parseInt(a,10); Math.floor(a); a>>0; ~~a; a|0; 前面2种是经常用到的,后面3种算是比较偏的, ...

  10. 小程序本地资源无法通过 css 获取

    background-image:可以使用网络图片,或者 base64,或者使用<image/>标签