ADBannerView 混乱 (iOS 8)
ADBannerView Confusion (iOS 8)
我搜索了又搜索了又搜索了关于如何执行此操作的说明,但我仍然不知道如何正确执行此操作。
我的困境和我想要的结果是:
我在故事板中添加了一个 ADBannerView
,我实现它的变量名称是 bannerView
。我正在选择禁用 游戏中的广告。如果广告被禁用,则广告甚至不应加载。如果我是正确的,那么不应调用委托的 bannerViewWillLoadWithAd:
方法,也不应调用 bannerViewDidLoadAd:
方法。我使用包含在 "if" 语句中的这段代码从视图控制器中删除 ADBannerView
:
[bannerView removeFromSuperview];
[self setCanDisplayBannerAds:NO];
然后我的委托方法如下所示(我的委托是我的游戏场景,视图控制器由所述场景 viewController1
的 属性 引用):
-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {
NSLog(@"banner view action will begin.");
self.paused = YES;
return YES;
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"Ad loaded.");
}
-(void)bannerViewWillLoadAd:(ADBannerView *)banner {
NSLog(@"Ad Banner will load ad.");
if (// ads are disabled) {
viewController1.canDisplayBannerAds = NO;
[banner removeFromSuperview];
NSLog(@"Banner shouldn't load");
}
}
-(void)bannerViewActionDidFinish:(ADBannerView *)banner{
NSLog(@"Ad Banner action did finish");
self.paused = NO;
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"Ad banner view failed to load. Details about the error: %@", error.debugDescription);
banner.hidden = YES;
}
代码有效,但我最终在日志中收到错误和奇怪的事件,其中通常包括 "service session terminated" 应该显示广告和加载不应该显示的广告。知道如何解决这个问题吗?
首先,除了创建您自己的 ADBannerView
之外,您还在使用 [self setCanDisplayBannerAds:YES]
。您需要使用一个或另一个。 [self setCanDisplayBannerAds:YES]
除了 您 正在创建的内容之外,实际上还为您创建了一个 ADBannerView
。
要删除广告,您不应等到广告加载后再隐藏它们。您应该在应用程序启动时检查一次,然后再进行处理。如果您决定使用 setCanDisplayBannerAds
,它非常简单:
-(void)viewDidLoad {
[super viewDidLoad];
if (disableAds) {
self.canDisplayBannerAds = NO;
}
}
如果您决定使用自己实现的 ADBannerView
您的代码可能看起来更像这样:
-(void)viewDidLoad {
[super viewDidLoad];
if (disableAds) {
banner.hidden = YES;
banner.delegate = nil;
}
}
我搜索了又搜索了又搜索了关于如何执行此操作的说明,但我仍然不知道如何正确执行此操作。
我的困境和我想要的结果是:
我在故事板中添加了一个 ADBannerView
,我实现它的变量名称是 bannerView
。我正在选择禁用 游戏中的广告。如果广告被禁用,则广告甚至不应加载。如果我是正确的,那么不应调用委托的 bannerViewWillLoadWithAd:
方法,也不应调用 bannerViewDidLoadAd:
方法。我使用包含在 "if" 语句中的这段代码从视图控制器中删除 ADBannerView
:
[bannerView removeFromSuperview];
[self setCanDisplayBannerAds:NO];
然后我的委托方法如下所示(我的委托是我的游戏场景,视图控制器由所述场景 viewController1
的 属性 引用):
-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {
NSLog(@"banner view action will begin.");
self.paused = YES;
return YES;
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"Ad loaded.");
}
-(void)bannerViewWillLoadAd:(ADBannerView *)banner {
NSLog(@"Ad Banner will load ad.");
if (// ads are disabled) {
viewController1.canDisplayBannerAds = NO;
[banner removeFromSuperview];
NSLog(@"Banner shouldn't load");
}
}
-(void)bannerViewActionDidFinish:(ADBannerView *)banner{
NSLog(@"Ad Banner action did finish");
self.paused = NO;
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"Ad banner view failed to load. Details about the error: %@", error.debugDescription);
banner.hidden = YES;
}
代码有效,但我最终在日志中收到错误和奇怪的事件,其中通常包括 "service session terminated" 应该显示广告和加载不应该显示的广告。知道如何解决这个问题吗?
首先,除了创建您自己的 ADBannerView
之外,您还在使用 [self setCanDisplayBannerAds:YES]
。您需要使用一个或另一个。 [self setCanDisplayBannerAds:YES]
除了 您 正在创建的内容之外,实际上还为您创建了一个 ADBannerView
。
要删除广告,您不应等到广告加载后再隐藏它们。您应该在应用程序启动时检查一次,然后再进行处理。如果您决定使用 setCanDisplayBannerAds
,它非常简单:
-(void)viewDidLoad {
[super viewDidLoad];
if (disableAds) {
self.canDisplayBannerAds = NO;
}
}
如果您决定使用自己实现的 ADBannerView
您的代码可能看起来更像这样:
-(void)viewDidLoad {
[super viewDidLoad];
if (disableAds) {
banner.hidden = YES;
banner.delegate = nil;
}
}