本文轉自: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.一般來說, 當點擊廣告時會彈出一個全屏的模態視圖,會覆蓋屏幕上所有內容。在這種情況下,任何關于視覺更新的關鍵或重要任務,都必須暫?;蛲V?#xff0c;并在該廣告關閉后重新啟動。為了演示如何管理這個過程,我們將使用一個定時器計數,來計算用戶觀看默認視圖控制器的視圖秒數,并使用一個標簽來展示信息包含的計時器的值。當廣告被點擊時,我們將停止計數,我們將在它再次關閉后重啟計數。 此外,在本教程中,我們將使用一個額外的框架,即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文件,添加如下兩行:
@interface?ViewController?:?UIViewController?? ? @property?(weak,?nonatomic)?IBOutlet?ADBannerView?*adBanner;? ? @property?(weak,?nonatomic)?IBOutlet?UILabel?*lblTimerMessage;? ? @end? 此時Xcode將發出錯誤和一些警告。那是因為我們還沒有加入iAd的框架。我們并沒有在文件中加入相應的庫。讓我們來解決它,讓我們開始加入框架。在項目導航器(Project Navigator)中,單擊iAdDemo項目,然后點擊General選項卡。 接著,在屏幕的底部,在Linked Frameworks and Libraries部分,單擊加號圖標添加新的框架。在出現的新窗中,開始輸入文字:“iAd Framework”,Xcode會立即顯示它。選中它,然后點擊Add按鈕: 現在,回到ViewController.h頭文件,并導入下一個庫:
#import?? 此時,Xcode中將不會再顯示任何錯誤和警告。最后,我們的類必須采取banner廣告協議,這樣我們就可以訪問所有必要的委托方法。修改界面標題行,如下所示:
@interface?ViewController?:?UIViewController?? 最后的步驟,這兩個IBOutlet屬性必須被連接到相應的子視圖。打開Main.storyboard文件,并把adBanner屬性連接到該banner視圖, 同時把lblTimerMessage標簽連接到無文字標簽視圖。
iAd的整合 通過將banner廣告添加到界面以及把iAd框架到項目中,廣告已經能夠被傳遞到應用程序。然而,沒有處理是可用的,因此我們的目標是采取一切行為讓廣告橫幅的管理可行的。 iAd框架提供了幾個委托方法來管理廣告。這些方法讓我們知道一個廣告即將被顯示或它已經顯示出;當用戶點擊一個廣告時發生錯誤以及沒有更多的廣告可以送達;當用戶點擊廣告以查看它的全屏視圖時模態視圖丟失等。除了所有這些,你應該時刻記得廣告可能不會被傳達。因此,直到第一個廣告準備好要顯示時,橫幅廣告必須是不可見的。它也應該成為隱藏在iAd網絡將停止投放廣告的一些原因。當iAd網絡因為一些原因停止廣告服務時它也應該是隱藏的。 在深入代碼之前,我們開始必須執行兩件事情:我們先構造橫幅廣告視圖的委托的類,其次將其隱藏。打開ViewController.m文件,并轉到viewDidLoad方法并補充下幾行:
-?(void)viewDidLoad? {? ????[super?viewDidLoad];? ????//?Do?any?additional?setup?after?loading?the?view,?typically?from?a?nib.? ? ????//?Make?self?the?delegate?of?the?ad?banner.? ????self.adBanner.delegate?=?self;? ? ????//?Initially?hide?the?ad?banner.? ????self.adBanner.alpha?=?0.0;? }? 正如你看到的,通過把它的Alpha值設為0,我們隱藏了banner視圖。隨后,當一個委托方法會通知我們,廣告已準備好要顯示時,我們再將這個值設置為1,另外我們也使用動畫讓其更具吸引力。更改alpha值,顯然不是隱藏或顯示廣告橫幅的唯一途徑。還有許多其他的方法來做到這一點,例如設置更改隱藏顯示欄的屬性的值,或一開始就把banner廣告放置在可見屏幕區域之外。用什么方法,你最終的選擇完全取決于你,選擇最適合你應用的方法。為了簡便起見,我只是選擇使用alpha值。 該ADBannerViewDelegate協議總共提供5個委托方法。通過它們,我們可以管理廣告和應用程序的最終行為。我們會逐個進行簡單的分析。需要注意的是在每一個委托方法體里,我特意加了NSLog命令,所以當我們運行應用程序后可以知道調用了哪一種方法。 第一種方法:
-(void)bannerViewWillLoadAd:(ADBannerView?*)banner{? ????NSLog(@"Ad?Banner?will?load?ad.");? }? 從方法的名稱很容易得出結論,當一個新的廣告即將被載入時調用。請注意,當這個方法被調用時廣告還沒有準備好要顯示。 第二個委托方法:
-(void)bannerViewDidLoadAd:(ADBannerView?*)banner{? ????NSLog(@"Ad?Banner?did?load?ad.");? }? 當新廣告已加載并準備顯示時調用該方法。隨后,在這個方法中,我們需要添加能讓banner廣告再次可見的代碼,這樣我們就知道有廣告可以顯示。 第三個委托方法:
-(BOOL)bannerViewActionShouldBegin:(ADBannerView?*)banner?willLeaveApplication:(BOOL)willLeave{? ????NSLog(@"Ad?Banner?action?is?about?to?begin.");? ? ????return?YES;? }? 當用戶點擊banner廣告時將調用此方法,并且該廣告將以全尺寸模式視圖顯示。當發生這種情況時,需要暫停用戶的任何視覺上的進程或關鍵任務,直到解除模態視圖。這種方法有趣之處是它返回的值。當返回值是YES,那么廣告將顯示在全屏視圖。但是,如果返回值是NO,當用戶點擊該廣告時,什么都不會發生。 第四個委托方法:
-(void)bannerViewActionDidFinish:(ADBannerView?*)banner{? ????NSLog(@"Ad?Banner?action?did?finish");? }? 全屏視圖添加解除時調用該方法。這是非常有用的,因為在這里任何暫停或停止任務都應該被再次放到Action里了。 最后,第五個委托方法:
-(void)bannerView:(ADBannerView?*)banner?didFailToReceiveAdWithError:(NSError?*)error{? ????NSLog(@"Unable?to?show?ads.?Error:?%@",?[error?localizedDescription]);? }? 這個方法也是非常有用和重要的,因為它調用的時候沒有廣告可被傳遞到應用程序。當它被調用時,我們的工作就是隱藏banner視圖,以便在沒有廣告展示時,不會給用戶一個空白區。 正如你所了解的,所有這些委托方法都使廣告處理變得非常容易?,F在,正如我們之前所說,我們必須在廣告已準備好要顯示時展示banner廣告,所以要修改bannerViewDidLoadAd:委托方法,如下所示:
-(void)bannerViewDidLoadAd:(ADBannerView?*)banner{? ????NSLog(@"Ad?Banner?did?load?ad.");? ? ????//?Show?the?ad?banner.? ????[UIView?animateWithDuration:0.5?animations:^{? ????????self.adBanner.alpha?=?1.0;? ????}];? }? 你看,我們用動畫的形式設置我們的banner廣告視圖的alpha值設置為1。該動畫將設置成一個淡入效果。 最后,當沒有廣告將顯示時,我們應該隱藏的廣告橫幅視圖。在bannerView:didFailToReceiveAdWithEr ror:添加與上述相同的代碼,這一次設置Alpha值為0:
-(void)bannerView:(ADBannerView?*)banner?didFailToReceiveAdWithError:(NSError?*)error{? ????NSLog(@"Unable?to?show?ads.?Error:?%@",?[error?localizedDescription]);? ? ????//?Hide?the?ad?banner.? ????[UIView?animateWithDuration:0.5?animations:^{? ????????self.adBanner.alpha?=?0.0;? ????}];? }? 與廣告最重要的相關工作已經完成。在本教程的下一節中,我們將看到如何使用其他委托方法,但是我們的應用程序已經可以使用了。所以,你可以對它進行一次嘗試,等待第一個廣告被顯示。
添加計數器 廣告橫幅現在已經能很好的工作了,最重要的環節--正確地顯示和隱藏的橫幅廣告已經實現。然而,本教程并不只是討論所有重要的委托方法,所以在這一節中我們要做一個有趣的項目。我們將使用一個定時器(一個NSTimer對象),將計算用戶看到視圖控制器場景的秒數,并利用iAd的框架提供的委托方法,在廣告以全屏模式展示時,我們將暫停計數。當廣告視圖解除后,計數器將重新工作。 讓我們開始通過聲明三個屬性,以實現我們需要的目的。第一個屬性是定時器對象,第二個將用于計算秒數的整數值,最后第三個屬性是一個boolean標志,將指示計數是否應該暫停。在ViewController.m文件,轉到私有類部分,并添加如下所示的屬性:
@interface?ViewController?()? ? @property?(nonatomic,?strong)?NSTimer?*timer;? ? @property?(nonatomic)?int?secondsElapsed;? ? @property?(nonatomic)?BOOL?pauseTimeCounting;? ? ? @end? 現在,在viewDidLoad方法中,讓我們做一些初始化:
-?(void)viewDidLoad? {? ????[super?viewDidLoad];? ??????...? ?????...? ? ????//?Start?the?timer.? ????self.timer?=?[NSTimer?scheduledTimerWithTimeInterval:1.0?target:self?selector:@selector(showTimerMessage)?userInfo:nil?repeats:YES];? ? ????//?Set?the?initial?value?for?the?elapsed?seconds.? ????self.secondsElapsed?=?0;? }? 正如你在創建定時器對象過程中看到的那樣,選擇器參數被設置為showTimerMessage方法。這是一個尚不存在的私有方法,由定時器每隔一秒調用(設置為1.0的間隔參數)。當然,我們希望我們的計時器反復工作,所以我們重復設置參數值為YES。 現在Xcode顯示警告,因為它無法找到上述聲明的方法。讓我們首先聲明這個方法來解決它,然后我們將定義它?;氐剿接蓄惒糠?#xff0c;并添加下一行:
@interface?ViewController?()? ? ...? ...? ? -(void)showTimerMessage;? ? @end? 現在在它的定義中,你會看到下面的代碼片段,代碼執行流程依賴于pauseTimeCounting標志。如果它的值是false,那么我們將繼續計數和更新lblTimerMessage中的文本。顯然,當它的值為true,我們就不計數了。注意,任何文本更新之前有必要增加secondsElapsed屬性的值。實現是非常簡單的,所以你看:
-(void)showTimerMessage{? ????if?(!self.pauseTimeCounting)?{? ????????self.secondsElapsed++;? ? ????????self.lblTimerMessage.text?=?[NSString?stringWithFormat:@"You've?been?viewing?this?view?for?%d?seconds",?self.secondsElapsed];? ????}? ????else{? ????????self.lblTimerMessage.text?=?@"Paused?to?show?ad...";? ????}? }? 讓我們來看看如何使用其他兩個iAd的委托方法。我們看到的第一個是bannerViewActionShouldBe gin:willLeaveApplication:。正如我已經說過,這種方法在用戶已點擊了廣告之后被調用,以全屏視圖顯示該廣告。當然,有必要將方法的返回值設置為YES,否則將沒有廣告顯示。當調用此方法時我們所要的就非常簡單了: 告訴我們的應用程序應該暫停時間計數。想要做到這一點,我們可簡單地改變pauseTimeCounting標志的值。讓我們先來看看方法:
-(BOOL)bannerViewActionShouldBegin:(ADBannerView?*)banner?willLeaveApplication:(BOOL)willLeave{? ????NSLog(@"Ad?Banner?action?is?about?to?begin.");? ? ????self.pauseTimeCounting?=?YES;? ? ????return?YES;? }? 除了暫停計數過程, 當一個帶有廣告的全圖像視圖被關閉時,我們還必須允許它可以繼續下去。為了這個目的,我們將使用bannerViewActionDidFinis h:委托方法。在這里面,我們將簡單地再次更改標志的值。如下:
-(void)bannerViewActionDidFinish:(ADBannerView?*)banner{? ????NSLog(@"Ad?Banner?action?did?finish");? ? ????self.pauseTimeCounting?=?NO;? }? 這是我們最后的環節!現在,當廣告橫幅被點擊時計數將暫停;當banner解除時,它會再次計數。
編譯并運行應用程序 此時,你可以自由地編譯和運行應用程序。你會發現,廣告橫幅將會在屏幕底部出現一段時間,計數器的值會顯示在消息標簽上。點擊廣告橫幅,就會看到一個全屏模式廣告。當您返回到視圖控制器的場景,并顯示正在觀看廣告時,你看到的計數器并不是活躍的。如果突然沒有廣告被服務,不用擔心,這是正常的。廣告投放可能隨時會停止。 作為一個額外的練習,你可以嘗試在視圖的頂部顯示的廣告橫幅。
總結 廣告集成到應用程序中是一個相當常見的策略,而且是一個很好的方式,讓你的免費應用程序也能帶來一些收入。說實話,也許你不會通過廣告賺一大筆,但如果你的應用程序獲得大的下載量是,那么你就可能有一個顯著的收益。正如你在本教程中所看到的,有關于廣告橫幅簡單的規則,以及所需的代碼僅幾行而已。所以,如果你還在想著是否應該在你的應用程序中添加廣告以及如何添加,那么這是一個不錯的機會。當然,官方文檔也是如此建議并鼓勵使用他們的。我希望這個教程對大家能有一些幫助,并希望你一如既往地隨時與我們分享任何想法或意見。 你可以從這里
下載完整的Xcode項目,以供參考。
總結
以上是生活随笔為你收集整理的如何使用iAd在应用程序中展示Banne…的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。