2014-12-01 53 views
1

我們在各級之間顯示interstitial iAds。由於iAds似乎需要相當多的內存(我們在顯示它們並遇到一些崩潰時會收到很多內存警告),因此我們不會在插頁式廣告關閉之前加載新視圖(因此,我們首先卸載遊戲視圖,然後我們展示插頁式廣告,然後我們加載遊戲視圖)。插頁式iAD:如何檢測iOS 8上的關閉?

對於這一點,我們使用顯示插頁式舊/過時的方法:

  1. 分配ADInterstitialAd並設置委託

    _interstitial = [[ADInterstitialAd alloc] init]; 
    _interstitial.delegate = self; 
    
  2. 準備好時,目前的廣告在某些視圖 - 控制:

    [_interstitial presentFromViewController:_rootViewController]; 
    
  3. 收聽代理方法來檢測你的u SER關閉插頁式廣告:

    - (void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd 
    { 
        [self proceedToNextLevel]; 
    } 
    

這可是用在iOS的7工作在iOS8上,而大多數的委託函數被調用,interstitialAdActionDidFinish不會被調用(interstitialAdDidUnload不會被調用,但只就像5分鐘後)。

因此,似乎有通過在UIViewController的一個類別顯示插頁廣告的一些新的方式:https://developer.apple.com/library/ios/documentation/iAd/Reference/UIViewController_iAd_Additions/index.html#//apple_ref/occ/instm/UIViewController/shouldPresentInterstitialAd

因此,新的方法是:

  1. 通過靜態方法調用準備的廣告:

    [UIViewController prepareInterstitialAds]; 
    
  2. 在準備好時,請求廣告的顯示:

    _rootViewController.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual; 
    [_rootViewController requestInterstitialAdPresentation]; 
    

這確實顯示插頁 - 但是,因爲沒有代表了,沒有當用戶關閉間隙告訴的方式。

所以問題是:如何在iOS 8(也與iOS 7兼容)我們可以告訴用戶什麼時候關閉了插頁式廣告?

//編輯: 我也試着查詢

viewController.isPresentingFullScreenAd 

有計時器反覆,但在此適用於iOS 7,iOS上的8屬性始終返回true,用戶關閉後的插頁式廣告

回答

4

當插頁式廣告iAd關閉時,viewDidAppear會在您的VC中調用。

這裏是我如何實現...

我把從我SKScene下面的代碼時,我想展示的廣告。

MyScene.m 

    if ([viewController showIAd]) // attempting to show an ad 
    { 
     NSLog(@"showIAd returned YES, ad shown"); 
     // Do nothing. Wait for viewDidAppear to be called. 
    } 
    else 
    { 
     // No ad was ready, do what needs to happen after ad. 
    } 

當顯示iAd時,我設置一個名爲currentlyShowingAnIAd的BOOL。當viewDidAppear運行時,它知道它是從廣告中返回的。

viewController.m 

-(void)viewDidAppear:(BOOL)animated 
{ 
    NSLog(@"viewDidAppear"); 

    if (self.currentlyShowingAnIAd) 
    { 
     self.currentlyShowingAnIAd = NO; 

     // Do what needs to happen after ad. 
    } 
} 

-(BOOL)showIAd 
{ 
    NSLog(@"showIAd method run"); 
    self.currentlyShowingAnIAd = [self requestInterstitialAdPresentation]; 
    return self.currentlyShowingAnIAd; 
} 

希望這有助於:)

+0

這是非常有用的,感謝您的回答!小提示:您不必爲currentlyShowingAnIAd管理自己的狀態。你可以使用:self.presentingFullScreenAd從:https://developer.apple.com/library/ios/documentation/iAd/Reference/UIViewController_iAd_Additions/#//apple_ref/occ/instp/UIViewController/presentingFullScreenAd – davvilla 2015-10-17 21:07:59