我无法在我的iOS应用中使用AdMob广告。 我收到一个特定的错误,我将在下面告诉你,但首先是我尝试过的。
这是我尝试过的事情
既然你知道我做了很多工作,那就去看看发生了什么。
应用崩溃
确切的错误是:
CYaPass [13155:433036] [MC]从私人有效用户那里阅读 设置。 Google移动广告SDK版:afma-sdk-i-v7.15.0 2016-12-04 14:37:26.046 CYaPass [13155:432944] - [UIView loadRequest:]: 无法识别的选择器发送到实例 0x7f8bf4546090 2016-12-04 14:37:26.055 CYaPass [13155:432944] ***由于未被捕获而终止应用程序 例外
这不是AppDelegate错误的正常sigabrt。 我已经尝试了所有与StoryBoard相关的正常事情,这里有一张图片向您展示我没有任何未定义的项目。另外,我会告诉您,当我删除一行AdMob代码时,该应用程序将正常运行。
你可以看到我在UIView上定义了两个我试图用于BannerView的出口。当我删除一行AdMob代码时,我可以测试它。
您还可以在SettingsController上看到这些插座
您可以在我的实际控制器代码中看到它们,如下所示:
@IBOutlet weak var AdMobs: GADBannerView!
@IBOutlet weak var SuperView: UIView!
func loadAd(){
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
AdMobs.rootViewController = self
AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}
我将这些行分隔为loadAd()
func,以便我可以从不同的位置测试它们,但它与官方BannerExample在viewDidLoad()
func中使用和调用的代码相同。
关于UIView的小测试
然后,你看我也在完全相同的UIView(SuperView)上做了一些工作,我将backgroundColor设置为黑色。
这是为了让自己相信这不仅仅是因为我已经为UIView添加了一个出口。但是如果我只是在它之前注释出三行,那么该代码工作正常。
在这里,我将运行它并向您显示输出。就在我这样做之前,这是我的AppDelegate应用程序构造函数,它不会改变。它实际上是官方BannerExample的副本:
import Firebase
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
GADMobileAds.configure(withApplicationID: "ca-app-pub-myapp-hiddenforpublicConsumption")
return true
}
现在,我将更改loadAd()更改为如下所示并再次运行:
func loadAd(){
//AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
//AdMobs.rootViewController = self
//AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}
显然,唯一的变化是我评论了这三行。这是它运行时的样子。
标签式视图应用
顺便说一下,这是一个标签式应用。所以应用程序出现了,我点击Settings选项卡,你可以看到loadAd()中更改的代码运行并将UIView的背景变为黑色。
要点:特定代码导致问题
现在,让我告诉您,如果我取消注释第一行横幅广告代码,那么该应用会在AppDelegate中崩溃。
这是改变后的loadAd()
:
func loadAd(){
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
//AdMobs.rootViewController = self
//AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}
同样,您可以看到我只取消了在GADBannerView上设置adUnitId的一行。这与BannerExample使用的代码完全相同。它甚至使用相同的测试unitId,每个人都可以免费测试。此外,即使您将该unitId更改为无效值,该应用也不会崩溃,广告也不会显示。
以下是结果
调试显示完整的代码行
我可以进入代码,它恰好位于我们刚发生此错误时添加的loadAd()行(如下所示,以供明确参考):
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
唯一差异:标签式视图 - 问题是什么?
唯一有效的区别是我的应用程序基于tabbedview。 有谁知道为什么会这样?
我现在已经尝试了近2天了。任何帮助表示赞赏。
答案 0 :(得分:2)
哦,痛苦......我终于找到了答案。
首先,在这里你可以看到我获得了成功。
必须更改视图类型
然而,有意义的是因为我们得到的错误不是GADBannerView:
[UIView setAdUnitID:]:无法识别的选择器发送到实例
这是让我得到答案的线索。
您必须将值更改为GADBannerView(只需在UIView上的框中键入它):
我还确认在官方示例中类型设置正确。 大约36个小时,我永远不会回来。 我错过了初始文档中的那一步,所以这是#34;椅子和键盘之间的错误"。
答案 1 :(得分:0)
如果其他人遇到同样的问题并且不知道发生了什么,我遇到了类似错误的不同问题。
转到广告的视图,然后转到Label
所在的位置。将其更改为您的视图名称,它对我有用。
同时确保module
为空,inherit module from target
未被取消。