【问题标题】:iAd doesn't hide when it fails to load?iAd 加载失败时不隐藏?
【发布时间】:2013-02-03 17:27:07
【问题描述】:

这似乎是有史以来最愚蠢的问题,但是在阅读了所有 Apple 的文档和无用的在线教程之后,我仍然无法弄清楚如何在我的应用程序中正确实现 iAds。因此,我的应用程序从表格视图控制器开始,并且在导航栏下方和表格上方有一个iAd 对象。

现在,在我的代码中:(我还添加了 iAd 框架)

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@interface MasterTableViewController : UITableViewController <ADBannerViewDelegate>
{
    IBOutlet ADBannerView *iAd;
}
@property(nonatomic, readonly, getter=isBannerLoaded) BOOL bannerLoaded;
@end

然后在.m文件中

#import "MasterTableViewController.h"

@interface MasterTableViewController ()
@end

@implementation MasterTableViewController
@synthesize bannerLoaded;

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
    if (!willLeave)
    {
        // nothing in this case thanks to ARC 
    }
    return YES;
}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    iAd.hidden = NO;
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{   
    iAd.hidden = YES;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    for (int i = 0; i > 0; i++)
    {
        if (bannerLoaded)
        {
            iAd.hidden = NO;
        }
        else
        {
            iAd.hidden = YES;
        }
    }
}

现在,问题是,当我在没有互联网连接的情况下测试应用程序时,iAd 不会加载(显然)但它也不会隐藏。所以,在屏幕的顶部,我留下了一个大的白色矩形。否则,当连接可用时,广告可以正常工作。有没有人有任何想法?另外-我只是添加了无限循环以查看它们是否有所作为,这些完全是故意的,哈哈。

【问题讨论】:

    标签: iphone ios objective-c iad


    【解决方案1】:

    我假设您已通过情节提要添加了 ADBannerView,因为我看不到您初始化横幅位置的位置。

    1. 在情节提要中,将初始位置设置在屏幕外。
    2. 在“bannerViewDidLoadAd”中,为横幅设置动画效果。
    3. 在“bannerView: didFailToReceiveAdWithError:”中,将横幅设置为动画。

    这里有一个很好的例子https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iAd_Guide/WorkingwithBannerViews/WorkingwithBannerViews.html

    希望这会有所帮助。我刚刚实现了这个,但目前无法访问我的代码。

    它确实会在模拟器中带来一些错误,但在设备上可以正常工作。

    我已经在 iOS6 上对此进行了测试,即使显示 iAd 然后用户失去连接也可以正常工作(因此看起来像“bannerView:didFailToReceiveAdWithError:”正在为我调用)。

    【讨论】:

      【解决方案2】:

      您有一个属性bannerLoaded 用于保存您的广告状态,这很好。

      首先,在您的viewDidLoad 方法中,无法加载iAd,因此您必须相应地设置您的属性:self.bannerLoaded = NO;

      然后,当您收到/未能收到您的广告时,您需要更新此属性。

      - (void)bannerViewDidLoadAd:(ADBannerView *)banner
      {
          if (!self.bannerLoaded) {
              iAd.hidden = NO;
              self.bannerLoaded = YES;
          }
      }
      
      - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
      {   
          if (self.bannerLoaded) {
              iAd.hidden = YES;
              self.bannerLoaded = NO;
          }
      }
      

      【讨论】:

      • 同样的问题 :(。当我断开所有数据并测试应用程序时,我仍然得到白色矩形。
      • 实际上,我认为没有互联网连接时不会调用bannerView:didFailToReceiveAdWithError:。您将不得不实施一些其他方法来处理互联网连接检查。看看苹果提供的Reachability 库:developer.apple.com/library/ios/#samplecode/Reachability/…
      • 好吧,我花了大约一个小时来寻找答案,我想我已经想出了一个解决方案。我不相信涉及到可达性类,但我不能肯定地说:P。所以,我在 iOS 模拟器上试了一下,它的工作方式大不相同。它给了我错误,说我的横幅没有代表。所以,在 ViewDidLoad 我做了: iAd.delegate = self;并重新运行它,它似乎按预期工作。然后我在我的 iPhone 上对其进行了测试,几分钟后它按预期工作。我认为在 iPhone 上的测试有点搞砸了。感谢您的所有帮助!
      • 哦,对了,代表!对不起,我没有考虑。我很高兴你最终让它发挥了作用:)
      • 现在的问题是我无法弄清楚这件事的逻辑。我有 80% 的可见广告率,但在它循环失败后,它使广告再次变白。有什么想法吗?
      猜你喜欢
      • 2012-10-13
      • 1970-01-01
      • 2010-12-11
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      相关资源
      最近更新 更多