【发布时间】:2014-12-01 15:48:08
【问题描述】:
我们在关卡之间展示插页式 iAd。由于 iAd 似乎需要相当多的内存(我们过去在显示时收到很多内存警告并经历了一些崩溃),我们不会在插页式广告关闭之前加载新视图(因此,我们首先卸载游戏视图,然后我们显示插页式广告,然后我们加载游戏视图)。
为此,我们使用了旧的/已弃用的方式来显示插页式广告:
-
分配 ADInterstitialAd 并设置委托
_interstitial = [[ADInterstitialAd alloc] init]; _interstitial.delegate = self; -
准备就绪后,在某个视图控制器中展示广告:
[_interstitial presentFromViewController:_rootViewController]; -
监听委托方法以检测用户何时关闭插页式广告:
- (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
所以新的方法是:
-
通过静态方法调用准备广告:
[UIViewController prepareInterstitialAds]; -
准备就绪后,请求展示广告:
_rootViewController.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual; [_rootViewController requestInterstitialAdPresentation];
这确实显示了插页式广告 - 但是,由于不再有委托,因此无法判断用户何时关闭插页式广告。
所以问题是:在 iOS 8(也兼容 iOS 7)上,我们如何判断用户何时关闭了插页式广告?
//编辑: 我也试过查询
viewController.isPresentingFullScreenAd
重复使用计时器,但虽然这适用于 iOS 7,但在 iOS 8 上,该属性始终返回 true,即使在用户关闭插页式广告后也是如此
【问题讨论】:
标签: objective-c ios8 iad interstitial