3

我有一个使用 AdMob 中介服务的测试应用程序设置,目前仅在测试设备上。我已经按照文档设置了所有必需的方法。我遇到了一个问题,当出现无法接收广告错误时,不再请求或显示广告?

标题:

#import <UIKit/UIKit.h>
#import "GADBannerViewDelegate.h"

@class GADBannerView, GADRequest;

@interface AdTestViewController : UIViewController
    <GADBannerViewDelegate> {
    GADBannerView *bannerView_;
}

@property (nonatomic, retain) GADBannerView *bannerView;

- (GADRequest *)createRequest;

@end

小鬼文件

#import "AdTestViewController.h"
#import "Constants.h"
#import "GADBannerView.h"
#import "GADRequest.h"

@implementation AdTestViewController

@synthesize bannerView = bannerView_;

- (void)viewDidLoad {
    [super viewDidLoad];

    // Create a view of the standard size at the top of the screen.
    // Available AdSize constants are explained in GADAdSize.h.
    //bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
    // Initialize the banner at the bottom of the screen.
    //CGPoint origin = CGPointMake(0.0,
     //                            self.view.frame.size.height -
       //                          CGSizeFromGADAdSize(kGADAdSizeBanner).height);
    self.bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
                                                    //origin:origin];

    self.bannerView.adUnitID = kAdMobPublisherID;
    self.bannerView.delegate = self;
    [self.bannerView setRootViewController:self];
    [self.view addSubview:self.bannerView];
    self.bannerView.center =
    CGPointMake(self.view.center.x, self.bannerView.center.y);
    [bannerView_ loadRequest:[self createRequest]];

    bannerView_.backgroundColor = [UIColor blueColor];


    // Make the request for a test ad. Put in an identifier for
    // the simulator as well as any devices you want to receive test ads.
    GADRequest *request = [GADRequest request];
    request.testDevices = [NSArray arrayWithObjects:
                           @"4D047EB9-A3A7-441E-989E-C5437F05DB04",
                           @"YOUR_DEVICE_IDENTIFIER",
                           nil];

}

- (GADRequest *)createRequest {
    GADRequest *request = [GADRequest request];

    // Make the request for a test ad. Put in an identifier for the simulator as
    // well as any devices you want to receive test ads.
    request.testDevices = [NSArray arrayWithObjects:
                           @"4D047EB9-A3A7-441E-989E-C5437F05DB04",
                           @"YOUR_DEVICE_IDENTIFIER",
                           nil];
    return request;
}

- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error;
{
    NSLog(@"Error - did Fail to Receive an Ad");
    bannerView_.hidden = YES;

}

- (void)adViewDidReceiveAd:(GADBannerView *)view;
{
    NSLog(@"Ad Received");
    bannerView_.hidden = NO;
}

@end

我在日志中看到的是“收到广告”几次,然后是“错误 - 未能收到广告”......在此日志之后没有其他条目,就像它停止请求一样?目前仅在模拟器上测试。

任何想法如何解决这个问题,或者在收到错误/未收到广告时隐藏视图的潜在替代方法?

4

5 回答 5

1

我发现同样的事情——当它GADBannerView被隐藏时,不再发出请求。

我成功尝试的一件事是将GADBannerView屏幕移出而不是隐藏它。当然,您只想在 的结果下执行此操作didFailToReceiveAdWithError,然后在 时将其移回屏幕adViewDidReceiveAd。我得到了这个工作,所以当广告来来去去时,用户会看到一个漂亮的动画,就像 iAd 鼓励的那样。

简而言之,下面的代码会将您的GADBannerView(此处称为mAdBannerView)放置在屏幕底部或屏幕外,具体取决于布尔值adIsLoaded

  CGRect bannerFrame = mAdBannerView.frame;
  bannerFrame.origin.y = self.view.bounds.size.height - (adIsLoaded * bannerFrame.size.height);
  mAdBannerView.frame = bannerFrame;
于 2014-05-30T18:17:47.787 回答
0

在出现错误时调用的方法中,例如

bannerView_.hidden = 1;

如果有错误,它将隐藏视图,如果收到的广告没有错误,它可能会自动显示

于 2013-01-25T20:32:13.710 回答
0

认为你最好只用 hidden 属性隐藏bannerView_。

- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error {
        bannerView_.hidden = YES;       
    }

当然,您必须记住设置hiddenYES成功接收广告的时间。

于 2013-01-25T23:31:25.967 回答
0

简单的解决方案,在方法中设置bannerView_.hidden true adView:didFailToReciewvwAdWithError。并检索视图使用adViewDidReceiveAd方法。示例代码:

这些是 ADmob 的委托方法:

- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error
{
    bannerView_.hidden = YES;
}

- (void)adViewDidReceiveAd:(GADBannerView *)view
{
    bannerView_.hidden = NO;
}
于 2013-01-26T00:31:25.263 回答
0

我有同样的问题,这对我有用:

不要使用 .hidden 属性隐藏 AdMob 广告。只需将 alpha 设置为 0(不可见)或 1(可见)。

所以在你的 GADBannerView 委托方法中......

-(void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error {

    // Hide the ad banner.
    [UIView animateWithDuration:0.5 animations:^{

        self.myADBanner.alpha = 0.0;

    }];

}

-(void)adViewDidReceiveAd:(GADBannerView *)bannerView {

    //Show the ad banner.
    [UIView animateWithDuration:0.5 animations:^{

        self.myADBanner.alpha = 1.0;

    }];

}

关于“在此日志之后没有其他条目就像它停止请求一样?”

当我从视图层次结构中删除广告时,也会发生这种情况。但是,当我将广告添加回视图层次结构时,请求会继续。他们没有继续的唯一一次是当我使用 .hidden 属性时。

于 2016-04-22T01:54:34.680 回答