Timer iOS-如何正确加载和显示间隙IAD?

Timer iOS-如何正确加载和显示间隙IAD?,timer,nstimer,iad,interstitial,Timer,Nstimer,Iad,Interstitial,我们的应用程序显示了在每个播放级别之后的间隙IAD。 在a级完成时,我们创建了广告: _interstitial = [[ADInterstitialAd alloc] init]; _interstitial.delegate = self; 委托实现以下回调方法: - (void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd { [self finish]; } - (void)interstitialAd:(

我们的应用程序显示了在每个播放级别之后的间隙IAD。 在a级完成时,我们创建了广告:

_interstitial = [[ADInterstitialAd alloc] init];
_interstitial.delegate = self;
委托实现以下回调方法:

- (void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd
{
    [self finish];
}
- (void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error
{
    [self finish];
}
- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd
{
    [_interstitial presentFromViewController:self];
}
- (void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
{
    [self finish];
}
而finish方法会清理内容并将用户转发到主菜单。 从创建ad对象的那一刻起,直到调用finish方法,屏幕上会显示一个旋转的轮子

现在的问题是,如果没有加载ad(例如,如果没有可用的internet连接),则不会调用任何回调函数,因此我们在创建ad时也会添加一个NSTimer,并在10秒后检查,如下所示:

_interstitial = [[ADInterstitialAd alloc] init];
_interstitial.delegate = self;
_timer = [NSTimer scheduledTimerWithTimeInterval:10
                                          target:self
                                        selector:@selector(checkForAds:)
                                        userInfo:nil
                                         repeats:false];

-(void)checkForAds:(NSTimer *)timer
{
    [_timer invalidate];
    if(!_interstitial.loaded)
        [self finish];
}
但是这看起来很不干净——而且如果没有互联网连接或者连接很差,每一关都会导致10秒的旋转轮延迟

所以,我的问题是:

处理这个问题的正确方法是什么?我觉得这里的计时器不合适

我目前正在考虑在关卡开始之前创建广告对象,然后在关卡结束后立即检查_interstival.loaded属性,在这种情况下显示广告,否则跳过它,而不使用计时器。问题是,一个级别的会话可能需要相当长的时间,大约1到60分钟,我会说,我读到广告可能会过期,但是文档中没有说明广告通常需要多长时间才能过期,以及在这种情况下会发生什么。如果广告在后台同时过期,_interstival.loaded属性是否返回false?ad过期时是否调用了某个回调函数?在级别开始之前(即广告实际显示前1-60分钟)创建广告对象是否可行,然后检查_interstival.loaded是否为真,在这种情况下显示广告