前言
雖然在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
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。