iAd横幅广告在iOS 9上无法正常工作。

13

在模拟器和设备上运行时,控制台会显示didFailToReceiveAdWithError消息。

iOS 8 上运行时,iAd横幅广告能够成功展示。但是在iOS 9上运行时,iAd横幅广告无法接收到广告。

.h

#import <iAd/iAd.h>
@interface ViewController : UIViewController <ADBannerViewDelegate>

@property (retain, nonatomic) IBOutlet ADBannerView *adBanner;

.m


(直接翻译为):这是一个带有强调的段落,其中包含“.m”。
-(void)viewDidLoad {
    self.adBanner = [[ADBannerView alloc]initWithFrame:CGRectMake(0,[UIScreen mainScreen].bounds.size.height-100, [UIScreen mainScreen].bounds.size.width, 50)];
    self.adBanner.delegate=self;
    [self.adBanner setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:self.adBanner];
}   

-(void)bannerViewWillLoadAd:(ADBannerView *)banner {
    NSLog(@"bannerViewWillLoadAd");
}

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    // Show the ad banner.
    NSLog(@"bannerViewDidLoadAd");

    [UIView animateWithDuration:0.5 animations:^{
        self.adBanner.alpha = 1.0;
    }];
}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    NSLog(@"didFailToReceiveAdWithError");

    // Hide the ad banner.
    [UIView animateWithDuration:0.5 animations:^{
        self.adBanner.alpha = 0.0;
    }];
}    

-(void)bannerViewActionDidFinish:(ADBannerView *)banner {
    NSLog(@"Ad did finish");
}

在运行 iOS 9 时,控制台会每次输出didFailToReceiveAdWithError


1
我已经将你的代码复制粘贴到一个新的Xcode 7项目中,使用iOS 9.1版本测试通过。 - Warif Akhand Rishi
根据你的代码,我认为IBOutlet是必要的,只需要在接口中声明变量即可。在Interface Builder中绘制横幅是不必要的。设置广告的背景颜色是不允许的。(只是按照Daniel Storm的答案,对我来说非常有效。) - Vincent
3个回答

6
我无法重现您的问题。当测试时,iAd网络可能已经关闭了您所在的国家;您可能在不支持iAd的国家;或者您在开发设备/模拟器上将iAd测试填充率设置为0%。请转到“设置>开发人员>填充率”,并检查开发设备/模拟器的填充率是否设置为100%。
我建议打印您在“didFailToReceiveAdWithError”中收到的“error”,以便找出“ADBannerView”失败的原因。
-(void)viewDidLoad {
    // The ADBannerView will size itself based on the device it is being displayed on
    // Only setting the position is sufficient
    self.adBanner = [[ADBannerView alloc]initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height-100, 0, 0)];
    self.adBanner.delegate=self;
    // Removed setBackgroundColor
    // Set alpha to 0.0 initially
    self.adBanner.alpha = 0.0;
    [self.view addSubview:self.adBanner];
}

-(void)bannerViewWillLoadAd:(ADBannerView *)banner {
    NSLog(@"bannerViewWillLoadAd");
}

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    NSLog(@"bannerViewDidLoadAd");
    [UIView animateWithDuration:0.5 animations:^{
        self.adBanner.alpha = 1.0;
    }];
}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    // Changed NSLog to print the error that is received
    NSLog(@"didFailToReceiveAdWithError: %@", error);
    [UIView animateWithDuration:0.5 animations:^{
        self.adBanner.alpha = 0.0;
    }];
}

-(void)bannerViewActionDidFinish:(ADBannerView *)banner{
    NSLog(@"bannerViewActionDidFinish");
}

如果您仍然遇到此问题,您应直接联系iAd并根据他们的回复更新您的问题,如果他们能够为您解决问题,您也可以发布答案。

@sohil 你在哪个国家? - Daniel Storm
@sohil 请阅读我的回答开头。虽然印度是iAd支持的国家,但iAd目前可能存在向印度投放广告的问题。我可以确认这一点,并且OP的代码在美国正常工作。直接联系iAd,看看是否能从他们那里得到解决方案。 - Daniel Storm

1
尝试在项目的plist文件中添加应用程序传输安全性。 在此输入图片描述

Timir Baran Kundu已经被添加到.plist文件中,但不起作用。如果您有任何想法,请分享。 - Rohit suvagiya

0

我在这里找到了这个链接:

检查我的故事板时,我注意到ADBannerView的高度约束设置为32 - 在该方向上32不是有效的高度。删除该高度约束后,错误“广告库存不足”消失了,然后它就可以正常工作了。

请检查一下是否适用于您。

还要检查一下iAD更改日志,看看是否有任何需要担心的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接