<前言>
雖然在App中加入廣告來(lái)盈利是比較低級(jí)的商業(yè)化方式,但對(duì)于個(gè)人開(kāi)發(fā)者或者小團(tuán)隊(duì)開(kāi)發(fā)者來(lái)說(shuō),做出一個(gè)簡(jiǎn)單易用的免費(fèi)小工具(舉個(gè)栗子),在里面加入一些廣告,如果用的人多,也是可以帶來(lái)一些可觀的收入的。用戶沒(méi)有掏錢,得到了方便,開(kāi)發(fā)者也得到了回報(bào):)
我個(gè)人出于對(duì)金錢的考慮和對(duì)Google的信任,選擇了AdMob這個(gè)平臺(tái)來(lái)在App中投放廣告(https://apps.admob.com訪問(wèn)需要搭梯子,梯子為SS的用戶最好全局代理,自動(dòng)代理的話訪問(wèn)起來(lái)會(huì)很卡)。
就目前來(lái)看,我果還是不太擅長(zhǎng)移動(dòng)App廣告這一塊,所以不推薦大家用iAd(好像現(xiàn)在還是不支持中國(guó)大陸?聽(tīng)說(shuō)前一陣子Apple解散了有一百來(lái)人的iAd部門?)國(guó)內(nèi)的一些其他平臺(tái)也是有所聽(tīng)說(shuō),但是沒(méi)有嘗試,如果大家知道有什么其他的好的可以在移動(dòng)App上投放廣告的平臺(tái),也歡迎評(píng)論,一起交流~
<流程>
1.首先,你要有一個(gè)Google賬號(hào),登錄AdMob
2.進(jìn)去之后,點(diǎn)網(wǎng)站右上角的設(shè)置按鈕,把各種資料該填的都填了,什么電話、郵箱、地址之類的。
AdMob網(wǎng)站截圖
注意,地址要填真實(shí)地址,在Google給你匯款之前,他要給你郵寄一封實(shí)體信件,上面有一個(gè)PIN碼,你要把這個(gè)PIN碼輸入到AdMob網(wǎng)站上的相應(yīng)位置,Google才會(huì)開(kāi)始你給你匯款。我現(xiàn)在已經(jīng)驗(yàn)證過(guò)身份了,沒(méi)辦法截圖,好在這個(gè)網(wǎng)站也不復(fù)雜,就那么幾個(gè)頁(yè)面。要做好收不到這個(gè)信件的準(zhǔn)備(包括我在內(nèi)的國(guó)內(nèi)N多開(kāi)發(fā)者都收不到這個(gè)信件,不知道是不是郵政的問(wèn)題),如果1個(gè)月沒(méi)有收到這個(gè)信件,可以再次申請(qǐng)讓Google郵寄信件,總共有3次機(jī)會(huì),3個(gè)月以后,還沒(méi)收到信件,可以上傳身份證照片(我就是這樣),然后Google會(huì)以極速(我當(dāng)時(shí)是幾個(gè)小時(shí))通過(guò)這個(gè)請(qǐng)求。不過(guò)畢竟等了三個(gè)月,如果你第一次就準(zhǔn)確無(wú)誤地填了地址,運(yùn)氣又很好的話,可以1個(gè)月內(nèi)就讓Google準(zhǔn)備給你付款。付款規(guī)則是每個(gè)月進(jìn)行一次統(tǒng)計(jì),如果到了100美金,就匯款,否則計(jì)入下個(gè)月,直到攢夠100美金,匯款時(shí)間是下個(gè)月的21號(hào)。比如你1月賺了30刀,2月就不會(huì)收到錢,2月賺了110刀,3月的21號(hào)Google會(huì)把你賺到的總共140刀都匯款給你。
3.接下來(lái)的過(guò)程就不贅述了,無(wú)非是去AdMob里面添加個(gè)應(yīng)用,拿到一個(gè)類似 app-key 的識(shí)別碼(AdMob里面叫ca-app-pub,每個(gè)廣告對(duì)應(yīng)一個(gè)識(shí)別碼,一個(gè)App可以加入多個(gè)橫幅式廣告或插頁(yè)式廣告,一個(gè)App可以對(duì)應(yīng)多個(gè)識(shí)別碼),把 GoogleMobileAds.framework 下載下來(lái),看一下人家的示例代碼,就集成到App了。
<橫幅式廣告與插頁(yè)式廣告>
開(kāi)發(fā)者在App中加入廣告時(shí),要極力避免讓用戶感到非常厭煩。如果你的App幫用戶解決了問(wèn)題,那用戶看看廣告也無(wú)所謂,人家解決了手頭的問(wèn)題才是正事,但是滿屏的廣告不停地彈,那也未免吃相不好,用戶可能一怒之下把App刪掉。
左邊為橫幅式廣告 右邊為插頁(yè)式廣告
橫幅式廣告的好處在于,雖然占用了用戶一部分屏幕空間,但是只要你不點(diǎn)擊它,它不會(huì)影響用戶的其他操作,只要你的廣告條沒(méi)有遮擋任何內(nèi)容,那么這個(gè)橫幅除了礙眼之外,對(duì)用戶使用App基本沒(méi)有影響。
而插頁(yè)式廣告則是以彈窗的形式出現(xiàn),用戶需要去左上角或者右上角點(diǎn)擊一下關(guān)閉按鈕才行,應(yīng)該說(shuō)是比橫幅式廣告要更討厭一些(反正我是這么覺(jué)得的),應(yīng)該說(shuō)這是略為嚴(yán)重的打擾了用戶對(duì)App的使用的。但是好處在于,插頁(yè)式廣告是以全屏彈出的形式出現(xiàn)的,它不影響你設(shè)計(jì)的App界面的純凈度,讓你有100%的空間來(lái)展示你需要布局在UI中的東西,比如你做了一個(gè)UI極簡(jiǎn)的應(yīng)用,整個(gè)App都是純黑+純白的,這時(shí)候加一個(gè)顏色復(fù)雜的橫幅廣告,就很影響觀感。
還有一種情況是你希望你的用戶付費(fèi)來(lái)去除廣告,可以是在App中加一個(gè)付費(fèi)去廣告的內(nèi)購(gòu),也可以鼓勵(lì)用戶付費(fèi)升級(jí)應(yīng)用到高級(jí)版,這種情況下可以嘗試橫幅式廣告和插頁(yè)式廣告都添加。一部分用戶對(duì)你的App有需求,又不想頻頻被廣告打擾,就可以選擇付費(fèi)。不過(guò)這種情況下,我們可以認(rèn)為添加廣告的目的之一就是為了去打擾用戶,迫使用戶付費(fèi),所以應(yīng)該適可為止,不要過(guò)于頻繁地彈出廣告,這真的挺煩人的。
<展示廣告的代碼技巧>
1.在 UITableView 底部展示橫幅廣告
var admob = GADBannerView()
// 設(shè)置GADBannerView的frame、設(shè)置廣告ID、加載廣告請(qǐng)求
self.tableView.contentInset = UIEdgeInsetsMake( 0, 0, admob.frame.height, 0)
這段代碼的意思是讓 UITableView 的可滾動(dòng)內(nèi)容區(qū)域在底部收縮,收縮長(zhǎng)度為banner廣告條的高度。這樣在用戶一直向上拖拽 UITableView 直到盡頭的時(shí)候,可以讓它的可拖拽區(qū)域比之前大一些,就不至于讓廣告遮擋了 UITableView 的最后幾行。
如果你的 UITableView 是存在于 UITableViewController 中的,那么 UITableView 的 frame 是不可調(diào)節(jié)的,所以通過(guò)上面的代碼,我們可以方便地避免廣告遮擋原有的內(nèi)容。而即便你的 UITableView 是存在于 UIViewController 中的,即這個(gè) UITableView 是你自己添加進(jìn)來(lái)的,你可以任意調(diào)節(jié) frame,我依然建議你用上面這種方法,而不是直接把 UITableView 的 frame 調(diào)小,來(lái)給廣告空出位置。因?yàn)槟愕膹V告并不一定能顯示的出來(lái),可能是用戶把你的廣告屏蔽了,也可能是網(wǎng)絡(luò)狀況不好,這時(shí)候反正你的廣告也顯示不出來(lái),應(yīng)該給用戶更多的屏幕空間來(lái)顯示 UITableView 的內(nèi)容。
2.利用定時(shí)器輪詢插頁(yè)式廣告加載狀態(tài)
這里不太恰當(dāng)?shù)氖褂昧恕拜喸儭边@個(gè)詞,大家意會(huì)就好。
假如你要彈出一次插頁(yè)式廣告,那么Google給出的示例代碼是下面這個(gè)樣子
如何創(chuàng)建 GADInterstitial 媒體資源、初始化該資源并隨廣告加載它
展示插頁(yè)式廣告
這里的展示邏輯是:不要打擾用戶玩游戲的過(guò)程,在用戶玩游戲的過(guò)程中默默地加載廣告,等用戶一次游戲結(jié)束了,如果這時(shí)候廣告加載好了,就把廣告彈出來(lái)。
然而實(shí)際情況是,我們的應(yīng)用可能不是游戲,并沒(méi)有一個(gè)這么明顯的類似完成了一局游戲這樣的一個(gè)段落結(jié)束的地方。這時(shí)候你可能希望每30秒彈出一次插頁(yè)式廣告,然而這個(gè)廣告可能是第40秒才加載好的,這就導(dǎo)致了:雖然你設(shè)置的是30秒顯示一次廣告,但是30s的時(shí)候廣告沒(méi)加載好,就沒(méi)顯示出來(lái),60s的時(shí)候顯示了40s時(shí)加載的廣告。而更理想的情況是:30s時(shí)沒(méi)能加載好廣告,我們就開(kāi)始輪詢,直到廣告加載好了,也就是40s時(shí),把廣告顯示出來(lái),然后設(shè)定第70s時(shí)展示下一次廣告。
下面給出一段示例代碼,這里的廣告展示邏輯是:每60秒展示一次廣告,如果到了這個(gè)時(shí)刻,廣告沒(méi)加載好,就設(shè)置定時(shí)器每3秒查看一次廣告資源是否就緒,直到廣告加載好了,展示廣告,然后設(shè)置60秒后出現(xiàn)下一次廣告。
import UIKit
class ExampleViewController: UIViewController {
// AdMob 插頁(yè)廣告
var adInterstitial = GADInterstitial(adUnitID: "ca-app-pub-xxxx/xxxx")
// 定時(shí)器
var timer = NSTimer()
override func viewDidLoad() {
super.viewDidLoad()
// 初始化 AdMob 插頁(yè)廣告
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 {
// 廣告成功加載,顯示廣告,重置定時(shí)器
self.adInterstitial.presentFromRootViewController(self)
self.timer.invalidate()
self.addTimerToShowAd(60)
}else {
// 廣告沒(méi)有成功加載,開(kāi)始3秒一次的快速輪詢
self.timer.invalidate()
self.addTimerToShowAd(3)
}
}
}
上面的代碼中的關(guān)于定時(shí)器方面的內(nèi)容,就不多做介紹。