- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有 UITabBarController
的应用程序,其中包含 5 个选项卡,其中每个选项卡都是一个 UIViewController
,其中嵌入了一个 UITableView
。我带来了iAds 和 AdMobs 到我的应用程序,将使用 IAP 删除。这是一款通用的 iPhone 和 iPad 应用程序。
起初,我只使用共享横幅和 AppDelegate
实现了 iAd,效果非常好。现在,在发布之前,我还将使用 AdMob 横幅作为后备,以防 iAd 横幅无法加载。我以与 iAd 横幅相同的方式设置它。
以同样的方式实现实际的 AdMob 横幅不是问题,但我在更改标签时遇到问题。
问题
如果加载 iAd 横幅并且我从第一个选项卡移动到第二个选项卡,它会继续显示 iAd 横幅。如果加载 AdMob 横幅并且我从第一个选项卡移动到第二个选项卡,AdMob 横幅会消失,直到它再次加载。
代码:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"VIEW WILL APPEAR");
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"])
{
NSLog(@"View will appear and the IAP is not Successful");
[self displayiAdsOrNot];
}
else
{
NSLog(@"View will appear and the IAP IS Successful");
self.adBanner.hidden = YES;
self.adMobBannerView.hidden = YES;
}
}
- (void)displayiAdsOrNot
{
NSLog(@"Display iAds or Not");
self.adMobBannerView.hidden = YES;
self.adBanner = [[self appdelegate] adBanners];
self.adBanner.delegate = self;
if (IDIOM == IPAD)
{
NSLog(@"***This is the iPad****");
[self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-80, 320, 50)];
[self.adBanner setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.adBanner];
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:self.adBanner
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0];
[self.view addConstraint:myConstraint];
myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
}
else
{
NSLog(@"*** THIS IS THE IPHONE ***");
[self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-98, 320, 50)];
[self.view addSubview:self.adBanner];
}
}
委托(delegate)方法:
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
NSLog(@"bannerViewDidLoadAd gets called");
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"])
{
NSLog(@"bannerViewDidLoadAd gets called and the IAP is not successful, so we hide the AdMob and show the iAd");
self.adMobBannerView.hidden = YES;
self.adBanner.hidden = NO;
}
else
{
NSLog(@"bannerViewDidLoadAd gets called and the IAP IS Successful so we hide the AdMob and iAd");
self.adMobBannerView.hidden = YES;
self.adBanner.hidden = YES;
}
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"The didFailToReceiveAdWithError is called and it is unable to show ads in Timeline. Error: %@ %@", [error localizedDescription], [error domain]);
self.adBanner.hidden = true;
[self displayAdMobBannerOrNot];
}
- (void)displayAdMobBannerOrNot
{
NSLog(@"DisplayAdMobBannerOrNot is called");
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"])
{
NSLog(@"The DisplayAdMonBannerOrNot is called and the IAP is not Successful");
self.adMobBannerView.hidden = NO;
self.adMobBannerView = [[self appdelegate] adMobBanners];
self.adMobBannerView.rootViewController = self;
self.adMobBannerView.delegate = self;
self.adMobBannerView.adUnitID = @"ca-app-pub-394025609333333333335716";
if (IDIOM == IPAD)
{
NSLog(@"The DisplayAdMobBannerOrNot is called and we are using an iPad");
[self.adMobBannerView setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-80, 320, 50)];
[self.adMobBannerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.adMobBannerView];
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:self.adMobBannerView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0];
[self.view addConstraint:myConstraint];
myConstraint =[NSLayoutConstraint constraintWithItem:self.adMobBannerView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
myConstraint =[NSLayoutConstraint constraintWithItem:self.adMobBannerView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
}
else
{
NSLog(@"The DisplayAdMobBannerOrNot is called and we are using an iPhone");
[self.adMobBannerView setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-98, 414, 50)];
[self.view addSubview:self.adMobBannerView];
GADRequest *request = [GADRequest request];
request.testDevices = @[ @"151111111111ffb836f4d823ac" ];
[self.adMobBannerView loadRequest:request];
}
}
else
{
NSLog(@"The DisplayAdMobBannerOrNot is called and the IAP IS Successful so we'll just hide the iAd and the adMobBanner");
self.adBanner.hidden = YES;
self.adMobBannerView.hidden = YES;
}
}
所以,当 viewWillAppear
被调用时(每次我回到这个 UIViewController
),我检查 IAPSuccessful
BOOL
为真。如果为假,我加载 displayiAdsOrNot
方法。如果失败,将调用它的委托(delegate),调用 displayAdMobBannerOrNot
。
现在,我完全理解为什么当我显示 AdMob 横幅并从一个 View 移动到另一个 View 时,它会删除 AdMob 横幅,因为当我回来时,viewWillAppear
会加载 Shared iAd 而非 AdMob 的横幅。
考虑到这一点,我不太确定我需要做什么。我想确保 AdMob 每次加载共享横幅时都会加载它。因此,我将 displayAdMobBannerOrNot
中的共享横幅代码放入 displayiAdOrNot
并且它没有改变行为,因为它没有调用实际放置广告的功能(displayAdMobBannerOrNot
).
作为测试,在 viewWillAppear
中,当 IAPSuccessful
为 false 时,我调用了 [self bannerView:self.adBanner didFailToReceiveAdWithError:nil];
而不是其他任何东西并且有效。当我从第一个选项卡移到第二个选项卡时,它会继续显示 AdMob 横幅。但是,这当然不是生产代码。我只是无法清楚地看到这一点。
最佳答案
您将 adMobBannerView
隐藏在您的 displayiAdsOrNot
函数中。每次 viewWillAppear
时都会调用此函数。删除它,你应该得到你想要的结果。
至于你的其余代码,你在这里有很多事情要做。首先,为了简化事情,当 [ [NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"]
为 false,并自动设置两个横幅 .hidden = YES
。这将消除您对 displayiAdsOrNot
和 displayAdMobBannerOrNot
的需要,您在其中重复许多相同的 if
语句来检查 IAP 和用户使用的设备正在使用。完成此操作后,在您的委托(delegate)方法中,您可以简单地隐藏或显示正确的横幅,具体取决于 iAd 现在是否失败。例如,iAd 加载时将其隐藏值设置为 NO
,将 AdMob 的隐藏值设置为 YES
,如果 iAd 无法加载广告,则反之亦然。我确定您每次都在检查 IAP,以防用户在当前 session 中购买它,这样您就可以删除广告。一个更简单的解决方案是在 IAP 完成时将广告移到屏幕边界之外,然后在您的应用程序的下一次启动时根本不创建任何横幅 if [[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful "]
为真。其他一些需要指出的事情是,您应该在提交申请之前删除您的 request.testDevices
AdMob 请求,并且您似乎正在多次定义您的 NSLayoutConstraint *myConstraint
。我不太确定你想在这里做什么。此外,在 didFailToReceiveAdWithError
中,您有 self.adBanner.hidden = true
,它应该是 self.adBanner.hidden = YES
。
关于ios - 在 iOS 上使用共享横幅切换标签时显示 AdMob 和/或 iAd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891026/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!