? ? ? ?AdMob插頁廣告與蘋果iAd插頁廣告比較相似,都是全屏顯示,它的應用場景與iAd稍有不同。在應用啟動、 視頻前貼片或游戲關卡加載時顯示廣告,我們把這種場景稱為“啟動場景”,這與iAd的“內容顯示場景”類似。還有一種是在視頻播放結束或游戲結束時顯示的,我們稱之為“結束場景”。?
? ? ? ?1. 啟動場景?
? ? ? ??應用啟動、視頻前貼片或游戲關卡加載時,會彈出模態全屏廣告對話框,點擊全屏廣告左上角的關閉按鈕, 可以關閉該對話框,如圖1所示。沒有廣告時,直接進入②界面(主屏幕界面),如果有廣告填充時先啟動① (廣告界面)進入,我們需要關閉它才能回到②界面(主屏幕界面)。
?
啟動場景的AdMob插頁廣告?
? ? ? ?#import "GADInterstitial.h"?
? ? ? ?案例的主要代碼是在ViewController中編寫的,具體如下:
? ? ? ?import UIKit ?
? ? ? ?class ViewController: UIViewController,GADInterstitialDelegate { ? ? ? ? ? ?① ? ? ? ??
? ? ? ?var splashInterstitial: GADInterstitial! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?② ? ? ? ??
? ? ? ?let AdUnitID = "ca-app-pub-1990684556219793/1962464393" ? ? ? ? ?
? ? ? ?override func viewDidLoad() { ? ? ? ??
? ? ? ?super.viewDidLoad() ? ? ? ? ? ? ? ? ?
? ? ? ?self.splashInterstitial = GADInterstitial() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ③ ? ? ? ? ? ? ? ??
? ? ? ?self.splashInterstitial.adUnitID = ?AdUnitID ? ? ? ??
? ? ? ?self.splashInterstitial.delegate = self ? ? ? ? ? ? ? ? ?? ? ? ?self.splashInterstitial.loadRequest(self.createRequest()) ? ? ? ? ? ? ? ? ? ? ? ?④
? ? ? ?} ? ? ??
? ? ? ?func createRequest() -> GADRequest { ? ? ? ?
? ? ? ?var request: GADRequest = GADRequest() ? ? ? ??
? ? ? ?request.testDevices = NSArray(array: ["7740674c81cf31a50d2f92bcdb729f10", ? ? ? ? ? ?
? ? ? ?GAD_SIMULATOR_ID]) ? ? ? ??
? ? ? ?return request ? ??
? ? ? ?} ? ? ? ? ? ? ??
? ? ? ?//MARK: --GADInterstitialDelegate實現 ? ??
? ? ? ?func interstitialDidReceiveAd(ad: GADInterstitial!) { ? ? ? ? ? ? ? ? ? ? ? ⑤ ? ? ? ?
? ? ? ?NSLog("廣告加載成功") ? ? ? ??
? ? ? ?if self.splashInterstitial.isReady { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??⑥ ? ? ? ? ? ?
? ? ? ?self.splashInterstitial.presentFromRootViewController(self) ? ? ? ? ? ?⑦ ? ? ? ?
? ? ? ?} ? ??? ? ? ?} ? ? ? ? ?
? ? ? ?func interstitial(ad: GADInterstitial!, ? ? ? ? ?
? ? ? ?didFailToReceiveAdWithError error: GADRequestError!) { ? ? ? ? ? ? ? ? ? ? ?⑧ ? ? ? ?
? ? ? ?NSLog("廣告加載失敗") ? ??
? ? ? ?} ? ? ? ? ?
? ? ? ?} ??
? ? ? ?#import "ViewController.h"?
? ? ? ?#import "GADInterstitial.h" ?
? ? ? ?#define AdUnitID @"ca-app-pub-1990684556219793/1962464393" ??
? ? ? ?@interface ViewController ()
? ? ? ?@property(nonatomic, strong) GADInterstitial *splashInterstitial; ? ? ? ? ? ②?
? ? ? ?- (GADRequest *)createRequest; ?
? ? ? ?@end ?
? ? ? ?@implementation ViewController ?
? ? ? ?- (void)viewDidLoad { ? ?
? ? ? ?[super viewDidLoad];
? ? ? ?self.splashInterstitial = [[GADInterstitial alloc] init]; ? ? ? ? ? ? ? ? ? ③ ? ?
? ? ? ?self.splashInterstitial.adUnitID = ?AdUnitID; ? ??
? ? ? ?self.splashInterstitial.delegate = self; ? ??
? ? ? ?[self.splashInterstitial loadRequest:[self createRequest]]; ? ? ? ? ? ? ? ? ④ ? ??
? ? ? ?} ?
? ? ? ?//創建廣告請求?
? ? ? ?- (GADRequest *)createRequest { ? ? ? ? ?
? ? ? ?GADRequest *request = [GADRequest request]; ? ? ? ? ?
? ? ? ?//設置測試設備,防止測試階段的無效請求 ? ??
? ? ? ?request.testDevices = [NSArray arrayWithObjects: ? ? ? ? ?
? ? ? ?@"7740674c81cf31a50d2f92bcdb729f10",GAD_SIMULATOR_ID, nil]; ? ??
? ? ? ?return request;?
? ? ? ?} ?
? ? ? ?#pragma mark GADInterstitialDelegate實現?
? ? ? ?- (void)interstitialDidReceiveAd:(GADInterstitial *)ad { ? ? ? ? ? ? ? ? ? ?⑤ ? ?
? ? ? ?NSLog(@"廣告加載成功"); ? ??
? ? ? ?if (self.splashInterstitial.isReady) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?⑥ ? ? ? ?
? ? ? ?[self.splashInterstitial presentFromRootViewController:self]; ? ? ? ? ? ? ? ⑦ ? ?
? ? ? ?}?
? ? ? ?}?
? ? ? ?- (void)interstitial:(GADInterstitial *)interstitial ? ? ?
? ? ? ?didFailToReceiveAdWithError:(GADRequestError *)error { ? ? ? ? ? ? ? ? ? ? ?⑧ ? ?
? ? ? ?NSLog(@"廣告接收失敗 %@", [error localizedDescription]);?
? ? ? ?}?
? ? ? ?@end
? ? ? ?上述代碼中,第①行說明定義類時需要聲明遵守GADInterstitialDelegate委托協議,該協議規定了 GADInterstitial生命周期事件。第②行代碼是定義GADInterstitialAd類型的屬性splashInterstitial。 GADInterstitialAd是AdMob插頁廣告視圖對象。第③行代碼用于創建并初始化插頁廣告視圖對象。第④行代碼 用于請求廣告,其中self.createRequest()語句(Objective-C是self createRequest)用于獲得請求對象GADRequest。?
? ? ? ?第⑤行和第⑧行是GADInterstitialDelegate委托協議方法,其中第⑤行的方法是成功加載廣告的方法,第⑥ 行用于判斷廣告是否已經加載完成,第⑦行用于呈現廣告界面,其中self是當前視圖控制器,它也是呈現廣告界面的視圖控制器。?
? ? ? ?2. 結束場景?
? ? ? ?該場景是在視頻播放結束或游戲結束時顯示廣告,它需要有一個觸發條件,滿足該條件時才彈出模態全屏廣 告對話框,如圖2所示。?
結束場景的AdMob插頁廣告
? ? ? ?#import "GADInterstitial.h"?
? ? ? ?案例的主要代碼是在ViewController中編寫的。ViewController類定義、屬性等的相關代碼如下:?
? ? ? ?import UIKit ? ?class ViewController: UIViewController, GADInterstitialDelegate { ? ? ? ?
? ? ? ?//用于模擬控制游戲進度 ? ? ?
? ? ? ?var timer: NSTimer! ? ? ? ? ? ?
? ? ? ?let AdUnitID = "ca-app-pub-1990684556219793/1962464393" ? ? ? ?
? ? ? ?//插頁廣告GADInterstitial對象屬性 ? ? ?
? ? ? ?var interstitial: GADInterstitial!?
? ? ? ?//進度條 ? ? ?
? ? ? ?@IBOutlet weak var progressView: UIProgressView! ? ? ? ? ??
? ? ? ?//界面中的按鈕 ? ? ?
? ? ? ?@IBOutlet weak var startButton: UIButton! ?
? ? ? ?......?
? ? ? ?}?
? ? ? ?#import "ViewController.h"?
? ? ? ?#import "GADInterstitial.h" ?
? ? ? ?#define AdUnitID @"ca-app-pub-1990684556219793/1962464393" ?
? ? ? ?@interface ViewController ()
? ? ? ?{ ? ??
? ? ? ?NSTimer *timer; ? ? ? ?//用于模擬控制游戲進度?
? ? ? ?} ?
? ? ? ?//插頁廣告GADInterstitial對象屬性
?
? ? ? ?@property(nonatomic, strong) GADInterstitial *splashInterstitial; ?
? ? ? ?//進度條?
? ? ? ?@property (weak, nonatomic) IBOutlet UIProgressView *progressView; /
? ? ? ?/插頁廣告GADInterstitial對象屬性?
? ? ? ?@property(nonatomic, strong) GADInterstitial *interstitial;?
? ? ? ?//界面中的按鈕?
? ? ? ?@property (weak, nonatomic) IBOutlet UIButton *startButton;?
? ? ? ?//創建廣告請求對象 - (GADRequest *)createRequest; //更新進度條 -(void)update; ?
? ? ? ?//按鈕事件?
? ? ? - (IBAction)start:(id)sender; ?
? ? ? @end?
? ? ? ?下面我們再看看ViewController中按鈕事件的onClick:方法和更新進度條的update方法的代碼:?
? ? ? ?@IBAction func onClick(sender: AnyObject) { ? ? ? ? ?
? ? ? ?self.startButton.enabled = false ? ? ? ? ?
? ? ? ?timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, ? ? ? ??
? ? ? ?selector: "update", ? ? ? ??
? ? ? ?userInfo: nil, ? ? ? ??
? ? ? ?repeats: true) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?① ? ? ?
? ? ? ?} ?
? ? ? func update() { ? ??
? ? ? self.progressView.progress += 0.1 ? ??
? ? ? if (self.progressView.progress == 1.0) { ? ? ? ? ? ? ? ? ? ? ? ? ?② ? ? ? ?
? ? ? //游戲結束 ? ? ? ? ?
? ? ? NSLog("游戲結束") ? ? ? ??
? ? ? timer.invalidate() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?③ ? ? ? ?
? ? ? timer = nil ?
? ? ? ??
? ? ? ?//初始化廣告 ? ? ? ??
? ? ? ?self.interstitial = GADInterstitial() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ④ ? ? ? ?
? ? ? ?self.interstitial.adUnitID = AdUnitID ? ? ? ? ? ? ? ? ? ? ? ? ? ? ⑤ ? ? ? ?
? ? ? ?self.interstitial.delegate = self ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ⑥ ? ? ? ?
? ? ? ?self.interstitial.loadRequest(self.createRequest()) ? ? ? ? ? ? ? ⑦ ? ?
? ? ? ?}?
? ? ? ?}
? ? ? ?- (IBAction)start:(id)sender { ? ??
? ? ? ?self.startButton.enabled = NO; ? ? ? ? ?
? ? ? ?timer = [NSTimer scheduledTimerWithTimeInterval:1.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?target:self ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?selector:@selector(update) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?userInfo:nil ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?repeats:YES]; ? ? ? ? ? ? ? ? ? ? ① ? ??
? ? ? ?}?
? ? ? ?-(void)update?
? ? ? ?{
? ? ? ?self.progressView.progress += 0.1; ? ? if (self.progressView.progress == 1.0){ ? ? ?② ? ? ? ?
? ? ? ?//游戲結束 ? ? ? ??
? ? ? ?NSLog(@"游戲結束"); ? ? ? ??
? ? ? ?[timer invalidate]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ③ ? ? ? ?
? ? ? ?timer = nil; ? ? ? ? ? ? ? ? ?
? ? ? ?//初始化廣告 ? ? ? ??
? ? ? ?self.interstitial = [[GADInterstitial alloc] init]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ④ ? ? ? ?
? ? ? ?self.interstitial.adUnitID = ?AdUnitID; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ⑤ ? ? ? ?
? ? ? ?self.interstitial.delegate = self; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?⑥ ? ? ? ?
? ? ? ?[self.interstitial loadRequest:[self createRequest]]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ⑦ ? ?
? ? ? ?}?
? ? ? ?}
? ? ? ?在onClick:方法中,第①行代碼通過NSTimer開始計劃任務,該計劃任務是每隔0.1秒調用一次update方法。在 update方法中,第②行代碼用于判斷游戲是否結束(當然這是模擬),NSTimer使用完,就需要使用第③行代碼停止計劃執行。第④行代碼用于實例化GADInterstitial對象。第⑦行代碼通過調用createRequest方法獲得請求對象發出廣告請求。?
? ? ? ?createRequest方法的代碼如下:?
? ? ? ?func createRequest() -> GADRequest { ? ??
? ? ? ?var request: GADRequest = GADRequest() ? ??
? ? ? ?request.testDevices = NSArray(array: ["7740674c81cf31a50d2f92bcdb729f10", ? ? ? ??
? ? ? ?GAD_SIMULATOR_ID]) ? ??
? ? ? ?return request?
? ? ? ?}?
? ? ? ?- (GADRequest *)createRequest { ? ? ? ? ?
? ? ? ?GADRequest *request = [GADRequest request]; ? ??
? ? ? ?//設置測試設備,防止測試階段的無效請求 ? ??
? ? ? ?request.testDevices = [NSArray arrayWithObjects: ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?@"7740674c81cf31a50d2f92bcdb729f10", ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?GAD_SIMULATOR_ID, nil]; ? ? ? ? ?
? ? ? ?return request;?
? ? ? ?}?
? ? ? ?下面我們再看看ViewController中有關GADInterstitialDelegate委托的實現代碼:?
? ? ? ?//MARK: --GADInterstitialDelegate實現?
? ? ? ?func interstitialDidReceiveAd(ad: GADInterstitial!) { ? ??
? ? ? ?NSLog("廣告加載成功") ? ??
? ? ? ?if self.interstitial.isReady { ? ? ? ??
? ? ? ?self.interstitial.presentFromRootViewController(self) ? ? ? ? ? ? ? ① ? ? ? ?
? ? ? ?self.startButton.enabled = true ? ? ? ??
? ? ? ?self.progressView.progress = 0.0 ? ??
? ? ? ?}?
? ? ? ?} ?
? ? ? ?func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: ? ? ?
? ? ? ?GADRequestError!) { ? ??
? ? ? ?NSLog("廣告加載失敗")?
? ? ? ?}?
? ? ? ?- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial { ?
? ? ? ?NSLog(@"廣告接收成功"); ?
? ? ? ?[self.interstitial presentFromRootViewController:self]; ? ? ? ? ? ? ① ? ?
? ? ? ?self.startButton.enabled = YES; ? ??
? ? ? ?self.progressView.progress = 0.0;?
? ? ? ?}?
? ? ? ?- (void)interstitial:(GADInterstitial *)interstitial ? ? ?
? ? ? ?didFailToReceiveAdWithError:(GADRequestError *)error { ? ?
? ? ? ?NSLog(@"廣告接收失敗 %@", [error localizedDescription]); ? ??
? ? ? ?}?
? ? ? ?在接收成功的interstitialDidReceiveAd:方法中,需要使用第①行代碼模態呈現廣告對話框,GADInterstitial 對象的presentFromRootViewController:方法需要在成功請求回來后再調用。最后運行一下,看看是否能呈現廣告。?
? ? ? ?以上便是南昌APP開發公司-百恒網絡為大家介紹的關于IOS軟件開發中添加AdMob插頁廣告的方法,如果還有哪些不太明白的地方,可隨時來電和我們聯系。此外,想了解更多關于網站建設、微信開發、電商購物網站開發等方面相關知識,歡迎訪問百恒網絡網站!