我正在尝试将NavigationBanner iAdSuite示例实现到我的项目中,以便可以在多个 View Controller 之间共享一个AdBannerView实例,但是我一直收到以下错误:

Error Domain = ADErrorDomain代码= 2“该操作无法完成。加载已被限制

我已经将相关代码完全从当前iAdSuite复制到了自己的应用中,并遇到此错误。实际上,该错误在Apple自己的NavigationBanner的iAdSuite示例中是可重复的(这是我尝试实现的示例)。通过添加以下错误可以看到:

NSLog (@"%@",error);

至:
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error

要在iAdSuite中复制该问题,请执行以下操作:
  • 将设备的飞行模式设为开启
  • 从Xcode启动iAdSuite NavigationBanner。这将立即生成错误“ADErrorDomain错误1”。
  • 按下设备上的主屏幕按钮退出应用程序,然后关闭飞行模式。
  • 通过点击图标重新启动NavigationBanner,并显示错误。

  • 这对于我的应用程序来说是一个问题,因为如果没有连接,我想隐藏iAd,然后在恢复连接后重新显示它。如果应用收到节流错误,则可能会延迟很长时间才能收到另一个广告。

    如何避免节流误差?我当时在想bannerView需要先删除再重新添加,但无法弄清楚如何正确执行此操作。

    最后要注意的一点是,当前的iAdSuite使用ARC,而我的应用程序却未使用。即使这样,我的应用程序和iAdSuite都发生错误。

    最佳答案

    尝试使用Apple的“Reachability”项目代码来检测网络状态。 Github上有ARC兼容版本。 (https://github.com/tonymillion/Reachability)将Reachability.h导入头文件后,可以尝试下面的代码。可达性将检测是否有任何可用的连接,否则,iAd将移出屏幕。希望这可以帮助!

    - (void)bannerViewDidLoadAd:(ADBannerView *)banner
    {
        Reachability *reachability = [Reachability reachabilityForInternetConnection];
        [reachability startNotifier];
    
        NetworkStatus status = [reachability currentReachabilityStatus];
    
        if(status == NotReachable)
        {
            // No internet connection. We need to move the iAd off screen.
            NSLog(@"No network connection. iAd will hide.");
            banner.frame = CGRectOffset(banner.frame, 320, 0);
        }
        if(status == ReachableViaWifi)
        {
            banner.frame = CGRectOffset(banner.frame, your position here);
        }
        if(status == ReachableViaWWAN)
        {
            banner.frame = CGRectOffset(banner.frame, your position here);
        }
    }
    

    关于objective-c - 从后台重新启动应用后,iAd的加载受到限制(也发生在iAdSuite中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8107558/

    10-11 00:37