【发布时间】:2016-12-04 20:28:16
【问题描述】:
我无法在我的 iOS 应用中投放 AdMob 广告。 我遇到了一个特定的错误,我将在下面向您展示,但首先这是我尝试过的。
这是我尝试过的方法
- 在我的主应用程序中出现错误后,我检索了官方BannerExample 并使其成功运行。 BannerView 示例应用运行时,我看到该广告在我的 iPhone 5s 模拟器上运行时出现在应用中。
- 我已经完成了各种方式的 pod 更新,以确保我拥有所有所需软件包的确切新版本,并牢记应用程序的构建没有问题。
- 我已将其调试为一行代码,我将在下面向您展示。
既然您知道我已经做了很多工作,请看看发生了什么。
应用崩溃
确切的错误是:
CYaPass[13155:433036] [MC] 从私人有效用户读取 设置。谷歌移动广告 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;
}
显然,唯一的变化是我注释了这三行。这是它运行时的样子。
选项卡式视图应用程序
顺便说一句,这是一个选项卡式应用程序。所以应用程序出现了,我单击设置选项卡,您可以看到 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"
唯一的区别:选项卡式视图——这就是问题所在吗?
唯一有效的区别是我的应用基于标签视图。 有谁知道为什么会这样?
我已经尝试了将近 2 天。任何帮助表示赞赏。
【问题讨论】:
标签: ios xcode firebase uiview admob