【问题标题】:Programmatically turn off Google AdMob Ads (iOS)以编程方式关闭 Google AdMob 广告 (iOS)
【发布时间】:2015-10-30 16:47:12
【问题描述】:

我正在使用适用于 iOS 的 Google AdMob:

Google AdMob

我想知道我是否能够以编程方式关闭这些广告,以便它们停止展示。阅读 SDK 后,我看不到任何地方可以打开或关闭广告。

编辑:

这是我加载 Google AdMob 代码的方式:

MainViewController.m

- (void) viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    // Create a view of the standard size at the bottom of the screen.
    // Available AdSize constants are explained in GADAdSize.h.
    bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
    // Must be a better way to position at bottom of page
    [bannerView_ setCenter:CGPointMake(kGADAdSizeBanner.size.width/2, 455)];
    // Specify the ad's "unit identifier." This is your AdMob Publisher ID.
    bannerView_.adUnitID = MY_BANNER_UNIT_ID;
    // Let the runtime know which UIViewController to restore after taking
    // the user wherever the ad goes and add it to the view hierarchy.
    bannerView_.rootViewController = self;
    [self.view addSubview:bannerView_];

    // Initiate a generic request to load it with an ad.
    GADRequest *request = [GADRequest request];
    // remove this line when you are ready to deploy for real
    request.testing = YES;
    [bannerView_ loadRequest:request];
}

我想在类实现中禁用超级视图:

这是迄今为止我尝试循环遍历 MainViewController 子视图的代码。

一旦我找到了正确的子视图GADBannerView,我希望能够将其删除。

OtherClass.m

- (void)disableAds
{
    // Turn the ads off.
    UIViewController *mainView = [[UIViewController alloc] initWithNibName:@"MainViewController" bundle:[NSBundle mainBundle]];
    for (UIView *subview in [mainView.view subviews]) {
        NSLog(@"View(s): %@", subview);
    }
}

【问题讨论】:

  • 你能不能把bannerView_ 设为nil?
  • 用更多代码更新了原始问题。

标签: objective-c ios admob ads


【解决方案1】:

因为类实现实际上是一个插件,所以我可以使用以下代码:

for (UIView *subview in [self.viewController.view subviews]) {
    if([subview isKindOfClass:[GADBannerView class]]) {
        [subview removeFromSuperview];
    }
}

根据 Phonegap 文档,每个插件都有一个 self.viewController 属性。所以这只是一个循环并从超级视图中删除 GADBannerView 的问题。

当然我必须先在插件类实现中#import "GADBannerView.h",这样它才能知道GADBannerView

【讨论】:

  • 您正在将横幅视图分配给 ivar,您只需调用 removeFromSuperview 即可。看我的回答。
【解决方案2】:

如果没有任何使用 admob 的经验,我会说只是禁用 BannerView 和任何控制器

点赞bannerView = nil[bannerView release]

还有[bannerView removeFromSuperview]bannerView.hidden = YES


根据您自己的答案和添加的代码,您需要做的就是

 -(void)disableAds
{
    // Turn the ads off.
    [bannerView_ removeFromSuperview];
}

【讨论】:

  • 是的,看到我的应用程序中有一个MainViewController,在另一个实现中我想删除MainViewController 的子视图。该子视图是GADBannerView
  • 使用委托或通知。为了获得更好的答案,您必须发布一些代码,以便清楚地了解这些类是如何结合在一起的。
  • 但是你会在这里找到很多帖子询问不同的控制器如何相互通信。
  • 您的disableAds() 方法将不起作用,因为bannerView_ 没有暴露给MainViewController 之外的任何类实现。我必须遍历 MainViewController 的 self.viewController 属性并删除 GADbannerView 类对象的 bannerView_ 子视图。请参阅我自己的答案,了解我最终做了什么。
  • 您的解决方案不是很优雅。相反,您可以使用通知或包含对bannerView 的引用的单例类。您可以完全控制视图层次结构。循环遍历每个视图并执行相当昂贵的运行时涉及的操作只是不需要,这表明可能存在架构问题。
【解决方案3】:

试试这个:bannerView.rootViewController = nil;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多