4

我的 iAd 集成无法正常工作。我尝试实施全屏广告。广告出现了,但是当我按下“X”按钮关闭时,它并没有关闭。

也许您可以在我的代码中找到问题?我不知道要改变什么,并且投入了大量时间来解决这个问题,但没有成功。

更新

它适用于[interstitial presentFromViewController:self];但不适[interstitial presentInView:self.view]; 用于 iOS 7 不推荐使用 presentFromViewController 问题...那么我该如何更改它?


- (void)viewDidLoad
    {
        requestingAd = NO;
        [self showFullScreenAd];

    }

//Interstitial iAd
    -(void)showFullScreenAd {
        //Check if already requesting ad
        if (requestingAd == NO) {
            interstitial = [[ADInterstitialAd alloc] init];
            interstitial.delegate = self;
            self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
            [self requestInterstitialAdPresentation];
            NSLog(@"interstitialAdREQUEST");
            requestingAd = YES;
        }//end if
    }

    -(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAd didFailWithERROR");
        NSLog(@"%@", error);
    }

    -(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
        NSLog(@"interstitialAdDidLOAD");
        if (interstitialAd != nil && interstitial != nil && requestingAd == YES) {
    [interstitial presentInView:self.view];
            NSLog(@"interstitialAdDidPRESENT");
        }//end if
    }

    -(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAdDidUNLOAD");
    }

    -(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAdDidFINISH");
    }

先感谢您 :)

4

2 回答 2

4

对我来说,这个问题的最佳解决方案是替换[interstitial presentInView:self.view];where [_interstitialAd presentInView:_adPlaceholderView];is view 与在展示广告之前添加的_adPlaceholderView具有相同边界的视图。self.view并且不要忘记在广告完成后删除此视图。

完成的方法将如下所示:

-(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd
{
    if ((interstitialAd != nil) && (_interstitialAd != nil) && (_requestingAd))
    {
        _adPlaceholderView = [[UIView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:_adPlaceholderView];
        [_interstitialAd presentInView:_adPlaceholderView];
    }
}

-(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
{
    _interstitialAd = nil;
    _requestingAd = NO;
    [_adPlaceholderView removeFromSuperview];
    _adPlaceholderView = nil;
}

我希望它也能帮助你。

于 2014-05-15T21:18:11.670 回答
4

我遇到过同样的问题。不确定你是否已经弄清楚了,但实际上不需要presentInView。

您只需要调用[self requestInterstitialAdPresentation]. 但是...如果广告未加载,它将不会显示在视图中,也不会像旧的 iAd API 一样向您提供日志或警告。

我最好的建议是在加载视图之前,从调用要加载的视图控制器的任何位置,也就是设置演示策略的位置。我的另一点建议是在 AppDelegate 中调用 [UIView prepareInterstitialAds]。在您请求广告之前,它可以更好地加载广告。

希望有帮助。祝你好运。

于 2014-04-01T01:53:41.273 回答