【iOS开发】在 App 中加入 AdMob 广告 - 入门介绍与编程技巧
前言
虽然在App中加入广告来盈利是比较低级的商业化方式,但对于个人开发者或者小团队开发者来说,做出一个简单易用的免费小工具(举个栗子),在里面加入一些广告,如果用的人多,也是可以带来一些可观的收入的。用户没有掏钱,得到了方便,开发者也得到了回报:)
我个人出于对金钱的考虑和对Google的信任,选择了AdMob这个平台来在App中投放广告(https://apps.admob.com 访问需要搭梯子,梯子为SS的用户最好全局代理,自动代理的话访问起来会很卡)。
就目前来看,我果还是不太擅长移动App广告这一块,所以不推荐大家用iAd(好像现在还是不支持中国大陆?听说前一阵子Apple解散了有一百来人的iAd部门?)国内的一些其他平台也是有所听说,但是没有尝试,如果大家知道有什么其他的好的可以在移动App上投放广告的平台,也欢迎评论,一起交流~
流程
1.首先,你要有一个Google账号,登录AdMob
2.进去之后,点网站右上角的设置按钮,把各种资料该填的都填了,什么电话、邮箱、地址之类的。
注意,地址要填真实地址,在Google给你汇款之前,他要给你邮寄一封实体信件,上面有一个PIN码,你要把这个PIN码输入到AdMob网站上的相应位置,Google才会开始你给你汇款。我现在已经验证过身份了,没办法截图,好在这个网站也不复杂,就那么几个页面。要做好收不到这个信件的准备(包括我在内的国内N多开发者都收不到这个信件,不知道是不是邮政的问题),如果1个月没有收到这个信件,可以再次申请让Google邮寄信件,总共有3次机会,3个月以后,还没收到信件,可以上传身份证照片(我就是这样),然后Google会以极速(我当时是几个小时)通过这个请求。不过毕竟等了三个月,如果你第一次就准确无误地填了地址,运气又很好的话,可以1个月内就让Google准备给你付款。付款规则是每个月进行一次统计,如果到了100美金,就汇款,否则计入下个月,直到攒够100美金,汇款时间是下个月的21号。比如你1月赚了30刀,2月就不会收到钱,2月赚了110刀,3月的21号Google会把你赚到的总共140刀都汇款给你。
3.接下来的过程就不赘述了,无非是去AdMob里面添加个应用,拿到一个类似 app-key 的识别码(AdMob里面叫ca-app-pub,每个广告对应一个识别码,一个App可以加入多个横幅式广告或插页式广告,一个App可以对应多个识别码),把 GoogleMobileAds.framework 下载下来,看一下人家的示例代码,就集成到App了。这是地址
横幅式广告与插页式广告
开发者在App中加入广告时,要极力避免让用户感到非常厌烦。如果你的App帮用户解决了问题,那用户看看广告也无所谓,人家解决了手头的问题才是正事,但是满屏的广告不停地弹,那也未免吃相不好,用户可能一怒之下把App删掉。
横幅式广告的好处在于,虽然占用了用户一部分屏幕空间,但是只要你不点击它,它不会影响用户的其他操作,只要你的广告条没有遮挡任何内容,那么这个横幅除了碍眼之外,对用户使用App基本没有影响。
而插页式广告则是以弹窗的形式出现,用户需要去左上角或者右上角点击一下关闭按钮才行,应该说是比横幅式广告要更讨厌一些(反正我是这么觉得的),应该说这是略为严重的打扰了用户对App的使用的。但是好处在于,插页式广告是以全屏弹出的形式出现的,它不影响你设计的App界面的纯净度,让你有100%的空间来展示你需要布局在UI中的东西,比如你做了一个UI极简的应用,整个App都是纯黑+纯白的,这时候加一个颜色复杂的横幅广告,就很影响观感。
还有一种情况是你希望你的用户付费来去除广告,可以是在App中加一个付费去广告的内购,也可以鼓励用户付费升级应用到高级版,这种情况下可以尝试横幅式广告和插页式广告都添加。一部分用户对你的App有需求,又不想频频被广告打扰,就可以选择付费。不过这种情况下,我们可以认为添加广告的目的之一就是为了去打扰用户,迫使用户付费,所以应该适可为止,不要过于频繁地弹出广告,这真的挺烦人的。
展示广告的代码技巧
1.在 UITableView 底部展示横幅广告
var admob = GADBannerView()
// 设置GADBannerView的frame、设置广告ID、加载广告请求
self.tableView.contentInset = UIEdgeInsetsMake( 0, 0, admob.frame.height, 0)
注释部分的代码可以参考这里,这段代码的意思是让 UITableView 的可滚动内容区域在底部收缩,收缩长度为banner广告条的高度。这样在用户一直向上拖拽 UITableView 直到尽头的时候,可以让它的可拖拽区域比之前大一些,就不至于让广告遮挡了 UITableView 的最后几行。
如果你的 UITableView 是存在于 UITableViewController 中的,那么 UITableView 的 frame 是不可调节的,所以通过上面的代码,我们可以方便地避免广告遮挡原有的内容。而即便你的 UITableView 是存在于 UIViewController 中的,即这个 UITableView 是你自己添加进来的,你可以任意调节 frame,我依然建议你用上面这种方法,而不是直接把 UITableView 的 frame 调小,来给广告空出位置。因为你的广告并不一定能显示的出来,可能是用户把你的广告屏蔽了,也可能是网络状况不好,这时候反正你的广告也显示不出来,应该给用户更多的屏幕空间来显示 UITableView 的内容。
2.利用定时器轮询插页式广告加载状态
这里不太恰当的使用了“轮询”这个词,大家意会就好。
假如你要弹出一次插页式广告,那么Google给出的示例代码是下面这个样子
媒体资源、初始化该资源并随广告加载它
这里的展示逻辑是:不要打扰用户玩游戏的过程,在用户玩游戏的过程中默默地加载广告,等用户一次游戏结束了,如果这时候广告加载好了,就把广告弹出来。
然而实际情况是,我们的应用可能不是游戏,并没有一个这么明显的类似完成了一局游戏这样的一个段落结束的地方。这时候你可能希望每30秒弹出一次插页式广告,然而这个广告可能是第40秒才加载好的,这就导致了:虽然你设置的是30秒显示一次广告,但是30s的时候广告没加载好,就没显示出来,60s的时候显示了40s时加载的广告。而更理想的情况是:30s时没能加载好广告,我们就开始轮询,直到广告加载好了,也就是40s时,把广告显示出来,然后设定第70s时展示下一次广告。
下面给出一段示例代码,这里的广告展示逻辑是:每60秒展示一次广告,如果到了这个时刻,广告没加载好,就设置定时器每3秒查看一次广告资源是否就绪,直到广告加载好了,展示广告,然后设置60秒后出现下一次广告。
import UIKit
class ExampleViewController: UIViewController {
// AdMob 插页广告
var adInterstitial = GADInterstitial(adUnitID: "ca-app-pub-xxxx/xxxx")
// 定时器
var timer = NSTimer()
override func viewDidLoad() {
super.viewDidLoad()
// 初始化 AdMob 插页广告
let gadRequest1 = GADRequest()
self.adInterstitial.loadRequest(gadRequest1)
self.addTimerToShowAd(3) // 3秒一次轮询直到第一次展示广告
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func addTimerToShowAd( showAdTimeInterval:NSTimeInterval){
self.timer = NSTimer.scheduledTimerWithTimeInterval( showAdTimeInterval, target: self,
selector: "showAd", userInfo: nil, repeats: true)
[NSRunLoop.currentRunLoop().addTimer(self.timer, forMode: NSRunLoopCommonModes)]
}
@objc private func showAd() {
if self.adInterstitial.isReady {
// 广告成功加载,显示广告,重置定时器
self.adInterstitial.presentFromRootViewController(self)
self.timer.invalidate()
self.addTimerToShowAd(60)
}else {
// 广告没有成功加载,开始3秒一次的快速轮询
self.timer.invalidate()
self.addTimerToShowAd(3)
}
}
}
上面的代码中的关于定时器方面的内容,就不在这篇文章中写了,如果看着费劲的话,欢迎在下面评论,我也可以再写一篇关于定时器的文章。关于 private 和 @objc 关键字部分可以参考我之前的一篇文章。
原文链接:http://www.jianshu.com/p/c55b8592d2a1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
【iOS开发】在 App 中加入 AdMob 广告 - 入门介绍与编程技巧的更多相关文章
- 分享 Ionic 开发 Hybrid App 中遇到的问题以及后期发布 iOS/Android 的方方面面
此篇文章主要整理了最近在使用 Ionic 开发 Hybrid App 过程中遇到的一些疑难点以及后期发布生成 iOS 和 Android 版本过程中的种种问题. 文章目录 Ionic 简介和项目需求介 ...
- <iOS开发>之App上架流程(2017)
本文主要介绍了App上架流程,以及上架过程中会遇到的一些问题. 一.App上架前的准备. 上架前,需要开发人员有苹果开发者账号,具体请阅读苹果开发者账号注册申请流程.本文是在已经拥有开发者账号的前提下 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- IOS开发-提升app性能的25条建议和技巧
前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...
- iOS从健康app中获取步数信息
统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...
- iOS开发之动画中的时间(概况)
一.引言 在iOS开发中使用动画时,可以通过设置动画的duration.speed.begintime.offset属性,来设置动画的时长.速度.起始时间及起始偏移. 用一个简单的例子来说明各个参数的 ...
- android应用中插入admob广告
Step One 登陆admob,注册用户 直接登陆http://www.admob.com/,用google的账号登陆 Step Two 登陆admob后,在站点和应用程序选项中 选择并添加and ...
- iOS开发RunLoop学习:一:RunLoop简单介绍
一:RunLoop的简单介绍 #import "ViewController.h" @interface ViewController () @end @implementatio ...
- (转)iOS 开发,工程中混合使用 ARC 和非ARC
[前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...
随机推荐
- Mac下,使用sshpass让iterm2支持多ssh登录信息保存
windows里有个Xshell非常的方便好使,因为它能保存你所有的ssh登录帐号信息.MAC下并没有xshell,有些也提供这样的功能,但效果都不好.iterm2是很好的终端,但却不能很好的支持多p ...
- 带你玩转JavaWeb开发之六-mysql基本语法详解及实例(3)
[语法] update 表名 set 列名=列值,列名=列值 -[条件]; [注意事项] * 修改的列的值需要与列的类型一致. * 修改的列的值的长度不能超过列的类型的最大长度. * 字符串类型和日期 ...
- Sourceinsight最佳配色方案及颜色字体调整方法
在Ubuntu下面用Gedit有一款比较好看的配色,应该是Darkblue.按照那个样子在SI里面做了一个差不多的,按个人喜好,背景色换成黑色,如下所示: 配色的方案文件可以从此处链接免费下载: 配色 ...
- C++中为什么要将析构函数定义成虚函数
构造函数不可以是虚函数的,这个很显然,毕竟虚函数都对应一个虚函数表,虚函数表是存在对象内存空间的,如果构造函数是虚的,就需要一个虚函数表来调用,但是类还没实例化没有内存空间就没有虚函数表,这根本就是个 ...
- 手势响应 ,避免点击多个cell同时响应同一手势多次,只响应第一个cell
http://www.cnblogs.com/wfwenchao/articles/3700205.html UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相 ...
- Quartz2D 编程指南(一)概览、图形上下文、路径、颜色与颜色空间
概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 0.说明 本篇博客主要是对官方文档 ...
- Linux流量监控工具 - iftop
iftop工具简述 今天看到一流量监控工具,觉得不错,就在自家服务器上装了一下,记录一下,留以后之需: 在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用nets ...
- Python模块应用 (linecache)
linecache linecache是专门支持读取大文件,而且支持行式读取的函数库. linecache 预先把文件读入缓存起来,后面如果你访问该文件的话就不再从硬盘读取.对于大文件的读取效率还不错 ...
- 添加到SQLAgentReaderRole角色后报拒绝SELECT权限
最近有点大意,同事需要查看作业的权限,"理所当然"就将对应登录名添加到SQLAgentReaderRole角色. msdb的SQLAgentReaderRole数据库角色的成员继承 ...
- css加载优化
<head> <script> // https://github.com/filamentgroup/loadCSS !function(e){"use stric ...