Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用swift、spritekit和xcode调用admob中间广告?_Ios_Xcode_Swift_Admob_Interstitial - Fatal编程技术网

Ios 如何使用swift、spritekit和xcode调用admob中间广告?

Ios 如何使用swift、spritekit和xcode调用admob中间广告?,ios,xcode,swift,admob,interstitial,Ios,Xcode,Swift,Admob,Interstitial,我一直在寻找这个问题的答案,我在objective C(谷歌开发者文档等)中找到了很多例子,在swift中也找到了一些答案,但没有使用spritekit,作为一名新手,我只是没能弥合这些教程中的空白,将它们整合到我的项目中。老实说,我真的不在乎广告是在应用程序发布时,还是在游戏结束时,我只是很高兴能在广告发布期间打电话,尽管我想在游戏发布时是首选 我很确定我已经在gameviewcontroller.swift中正确地设置了它,但我不知道如何实际调用它。以下是my gameviewcontrol

我一直在寻找这个问题的答案,我在objective C(谷歌开发者文档等)中找到了很多例子,在swift中也找到了一些答案,但没有使用spritekit,作为一名新手,我只是没能弥合这些教程中的空白,将它们整合到我的项目中。老实说,我真的不在乎广告是在应用程序发布时,还是在游戏结束时,我只是很高兴能在广告发布期间打电话,尽管我想在游戏发布时是首选

我很确定我已经在gameviewcontroller.swift中正确地设置了它,但我不知道如何实际调用它。以下是my gameviewcontroller.swift中的代码:

import UIKit
import SpriteKit
import GoogleMobileAds

class GameViewController: UIViewController {

    var interstitial : GADInterstitial!

 func createAndLoadAd() -> GADInterstitial {

        var ad = GADInterstitial()
        ad.adUnitID = "ca-app-pub-4471013071748494/2980967718"
        var request = GADRequest()
        request.testDevices = [""]

        return ad

    }
除此之外。。。我也有这个if语句来调用广告,但我不知道它应该在哪里。。。或者,如果它是完整的(在教程中,它是在一个按钮中,但我需要它是自动的,自然:

if (self.interstitial.isReady) {
            self.interstitial.presentFromRootViewController(self)
            self.interstitial = self.createAndLoadAd()
        }

有人对此有任何经验吗?如果有人能帮我完成这项工作,让我知道在If声明上面的位置,或者如果还有更多的事情需要做…你的帮助将不胜感激。谢谢。

好的,所以我开始了一个新项目(Swift项目),这是一个游戏项目

在GameViewController中:

class GameViewController: UIViewController
{
var interstitial = GADInterstitial()

override func viewDidLoad()
{
    super.viewDidLoad()

    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene
    {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)



        let delayTime = dispatch_time(DISPATCH_TIME_NOW,
            Int64(5 * Double(NSEC_PER_SEC)))

        //Creation of the ad and its request
        self.interstitial = GADInterstitial()
        self.interstitial.adUnitID = "ca-app-pub-4798156420380453/7714267723"
        var request = GADRequest()
        // request.testDevices = [""]
        self.interstitial.loadRequest(GADRequest());//The method u were missing

        dispatch_after(delayTime, dispatch_get_main_queue())
        {
            self.showAd()
        }

    }
}



 func showAd()
 {
    if (self.interstitial.isReady)
    {
        self.interstitial.presentFromRootViewController(self)//Whatever  shows the ad
    }
}
这是我的第一个swift密码,所以如果我做错了什么,请不要评判我 但当我在±5秒后吃午饭时,我看到了广告 这是你的例子

我对斯威夫特一点也不熟悉, 但是你所需要做的就是在中间代理解散时得到它->并请求下一个中间代理,这样下次你就可以得到新的广告了

随便问吧!
注意:别忘了将admob ID更改为您的ID。

基于以上评论,我的解决方案如下:

1) 将其添加到GameViewController.swift中

protocol AdmobInterstitialDelegate{
    func showInterstitial()
}
...
// add this delegate in GameViewController definition
class GameViewController: UIViewController, GADInterstitialDelegate, AdmobInterstitialDelegate {
...
// and assign it to the GameScene class when you create its instance
     let scene = GameScene()
     scene.adDelegate = self
// do not forget to implement the delegated method itself
    func showInterstitial(){
        if (interstitial!.isReady) {
            interstitial!.presentFromRootViewController(self)             
        }
    }
然后你可以在游戏场景中使用它

class GameScene: SKScene {
....
    var adDelegate: AdmobInterstitialDelegate?
....
// and finally - show the ad
    override func didMoveToView(view: SKView) {
        self.adDelegate?.showInterstitial();
        ....

希望这有帮助

在视图中保留if条件,它将自动执行

override func viewDidAppear(animated: Bool) {
        if (interstitial.isReady) {
        interstitial.presentFromRootViewController(self)
        self.interstitial = self.createAndLoadInterstitial()
        }

我认为,当你展示它时,你再次调用create方法就是在扼杀它——当你的广告失败时,你应该调用该方法。我可能错了,但对我来说,唯一不同的是我认为这是一个广告的名称。把它放在任何你想让广告弹出的地方,比如说在游戏结束或查看加载它取决于你最好在游戏结束时调用它,因为广告必须加载(它需要时间,取决于连接速度)顺便说一句,在你的代码中缺少加载请求方法AdThank。。。但我不太明白你在第一次和最后一次评论中说了什么。我不确定当我展示它的时候我会杀了它。。。上面的代码直接来自一个教程,在一个按钮上放了一个广告,杜德按下按钮,它就工作了。我只希望它是自动的或基于事件的,而不是基于按钮的。但是,这是在我的gameviewcontroller.swift上。。。如何从GameSecene.swift或gameend.swift(创建游戏视觉方面的两个swift文件)中调用它??你能偶然提供一些示例代码吗?太棒了!!太棒了,谢谢你!!!让它工作起来。很抱歉,回复耽搁了很长时间,在回复之前,我不得不花些时间与家人团聚。这太棒了。调度做得不错。杰出的现在我可以玩这个游戏了,看看可能只是让它在游戏屏幕上显示出来或者其他什么。。。但我不会再麻烦你了,你肯定已经超越了我。谢谢x10^123!!!嗯,好吧,我一直坐在这里试着做不同的事情,“随便问什么”这个词不断出现在我的脑海里。所以我想我会问(请随意忽略,公平吗?)。。。如果您想在场景更改时调用add,而不是在延迟时间之后调用add,您会做什么不同的事情?当玩家死亡时,该应用程序会从游戏场景切换到终端场景。。。如果广告在最后一幕上映时就出现了,那就太棒了。有什么想法吗?不管怎样都不用担心——说真的,别担心,我会坚持下去的。:-)在obj-c中,解决方法是将showAd方法从endScene委托给viewController(也可以使用nsnotification center)。在swift中,ot应该是相同的,只是Idk如何声明它的语法,我将尝试在网络中查找文档。这是通知中心的示例。这会根据显示的场景显示广告吗?