【问题标题】:Admob and Interstitial Ads with iOS9使用 iOS9 的 Admob 和插页式广告
【发布时间】:2015-11-13 16:17:05
【问题描述】:

今天我注册了 adMob,并开始在我的应用程序中制作 adMob 广告。第一个是游戏(带有视图控制器),我想在游戏结束后立即显示插页式广告,所以我想加载游戏加载完毕后的插页式广告(此视图仅在游戏结束后才可访问,并且游戏持续一分钟,因此不应出现太频繁)

我在 youtube 和 admob 网站上看过很多教程,我遇到了很多问题,例如: 即使我导入它也找不到 admob 框架, 我在构建时禁用了位码以避免链接器错误, 但我仍然无法在我的应用、模拟器和真实设备上看到测试广告。

我导入了admob所需的所有框架,在xcode中GoogleMobileAds框架旁边有个问号,是什么意思? 关于 admob 的第一行是:

import GoogleMobileAds

在视图控制器内部

var interstitial: GADInterstitial!
func createNloadAd () -> GADInterstitial
{
    var ad = GADInterstitial(adUnitID: "XXX")



    var request = GADRequest()

    request.testDevices = [kGADSimulatorID]

    ad!.loadRequest(request)

    return ad

}

在viewdidload里面

self.interstitial = self.createNloadAd()
    if(self.interstitial!.isReady)
    {
        self.interstitial!.presentFromRootViewController(self)
        self.interstitial! = self.createNloadAd()
    }

在 adUnitID 中,我尝试了我在 admob 网站中创建的插页式广告的 ID,以及在教程中找到的其他字符串,但没有任何效果

在测试设备中,我在看到输出消息后添加了我的 iphone 的 UDID,但我看不到任何测试广告,而且我完全没有错误

而且我没有接触故事板,我必须在故事板中创建一些东西吗?

在将应用程序提交到 appstore 之前,我必须删除 testdevices 行?当然还要输入我的真实 AdUnitID

也许代码是正确的,但如果应用程序未发布,admob 将无法加载,或者我必须等待一天我的 admob id 才能开始工作

在哪里可以找到最近的 admob ID 以进行测试? 所以我测试了应用程序,如果可行,我会更改 id 并提交

我正在使用 Xcode 7.1、AdMob 7.5.2,我的应用程序部署目标是 iOS7,我在模拟器上用 9.1 和我的旧 iPhone4 用 iOS7 进行了测试,这应该不是问题,因为 admob 甚至支持 iOS6

关于 admob 指南的另一个问题,在其他应用程序中,我可以在视图中使用 iAd,而在其他应用程序中使用 Admob?我会因此被禁止吗?仅在屏幕下方显示横幅广告

【问题讨论】:

    标签: ios swift admob


    【解决方案1】:

    即使我导入了 AdMob 框架,也找不到它

    删除框架并重新导入。确保您正在检查“如果需要,请复制项目”。此外,请检查项目设置和构建阶段下的库搜索路径,以查看框架是否包含在内。

    我导入了 AdMob 所需的所有框架

    这不是必需的。包含 import GoogleMobileAds 后,AdMob 框架将导入它需要的框架。

    而且我没有碰故事板。我必须在情节提要中创建一些东西吗?

    没有

    在将应用程序提交到 App Store 之前,我必须删除测试设备行并输入我的真实 AdUnitID?

    是的。立即尝试使用您的真实 AdUnitID,看看是否是您的测试 ID 导致了问题。

    也许代码是正确的,但如果应用未发布,AdMob 将无法加载,或者我可能需要等待一天,我的 AdMob id 才能开始工作

    没有。无需发布应用程序即可接收实时广告。

    在哪里可以找到最近的 AdMob ID 以进行测试?所以我测试了应用程序,如果可行,我会更改 id 并提交

    无处可去。提供您的 AdUnitID 是不明智的。

    关于 AdMob 指南的另一个问题,在其他应用中,我可以在一个视图中使用 iAd,而在另一个应用中使用 AdMob?我可以因此被禁止吗?仅屏幕下方的横幅广告

    在您的应用程序中使用尽可能多的广告网络。没有任何说明不允许您这样做。


    听起来你走在正确的轨道上。您应该设置并包含插页式广告的委托方法,以查看是否收到任何错误消息。您还需要在 .plist 中允许任意加载。检查AdMob's iOS 9 Considerations

    在尝试在viewDidLoad 中显示插页式广告之前,您是否致电createNloadAd()?下载广告需要时间。

    确保 AdMob 提供的 AdUnitID 与您使用的相同。

    另外,将演示文稿从 viewDidLoad 移动到 viewDidAppear

    下面是在AppDelegate.swift 中创建插页式广告然后在ViewController.swift 中展示插页式广告的示例:

    AppDelegate.swift

    import UIKit
    import GoogleMobileAds // Import AdMob
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate, GADInterstitialDelegate { // Include delegate
    
        var window: UIWindow?
        var myInterstitial : GADInterstitial?
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // App launched
            // Load interstitial
            myInterstitial = createAndLoadInterstitial()
            return true
        }
    
        func createAndLoadInterstitial()->GADInterstitial {
            let interstitial = GADInterstitial(adUnitID: "Your Ad Unit ID")
            interstitial.delegate = self
            interstitial?.loadRequest(GADRequest())
            return interstitial
        }
    
        func interstitialDidReceiveAd(ad: GADInterstitial!) {
            print("interstitialDidReceiveAd")
        }
    
        func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) {
            print(error.localizedDescription)
        }
    
        func interstitialDidDismissScreen(ad: GADInterstitial!) {
            print("interstitialDidDismissScreen")
            myInterstitial = createAndLoadInterstitial()
        }
    

    ViewController.swift(这将是您的游戏视图控制器)

    import UIKit
    
    class ViewController: UIViewController {
    
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate // Create reference to our app delegate
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func viewDidAppear(animated: Bool) {
            appDelegate.myInterstitial?.presentFromRootViewController(self)
        }
    

    【讨论】:

    • 谢谢,现在广告加载了,但如果我在控制台最后做另一个游戏,我会收到以下消息:将不会发送请求,因为已使用插页式对象
    • 我可以将来自 App Delegate 类的横幅视图广告称为插页式广告吗?
    • @GautamSareriya 我不确定你的意思。你应该问一个新问题。
    • @Daniel Storm,是的,我可以从 App Delegate 类调用 Ad mob 横幅请求。
    • @GautamSareriya 啊,我明白你现在在说什么了。检查这个答案:stackoverflow.com/a/28639200/2108547。它适用于 iAd,但逻辑是相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多