【问题标题】:iOS Interstitial iAd does not closeiOS 插页式 iAd 不关闭
【发布时间】:2023-04-09 11:52:02
【问题描述】:

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

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

更新

它适用于[interstitial presentFromViewController:self];,但不适用于[interstitial presentInView:self.view]; 问题是 presentFromViewController 在 iOS 7 中已被弃用...那么我该如何更改呢?


- (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");
    }

提前谢谢你:)

【问题讨论】:

    标签: ios fullscreen deprecated iad interstitial


    【解决方案1】:

    对我来说,这个问题的最佳解决方案是将[interstitial presentInView:self.view]; 替换为[_interstitialAd presentInView:_adPlaceholderView];,其中_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;
    }
    

    希望对你也有帮助。

    【讨论】:

    • 别忘了给release打电话。
    • 别忘了在 2014 年使用 ARC。
    【解决方案2】:

    我有同样的问题。不确定您是否已经弄清楚了,但实际上没有必要展示 InView。

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

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

    希望对您有所帮助。祝你好运。

    【讨论】:

    • 这是错误的。类方法prepareInterstitialAds是一个UIViewController类方法:developer.apple.com/library/iOs/documentation/iAd/Reference/…
    • 我确实忘记了UIView之后的Controller,但它并没有错,我在这个实例中使用它并且它完美地工作,将UIViewController替换为正在使用的视图控制器的名称。
    • 我没说使用方法不对。我说你说的那个班级是不正确的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多