如何使用 swift、spritekit 和 xcode 调用 admob 插页式广告?

How to call admob interstitial ad using swift, spritekit and xcode?

我一直在寻找这个问题的答案,我在 objective C(google 开发人员文档等)中找到了很多示例,在 [=26] 中找到了一些答案=],但没有使用 spritekit,并且作为新手,我只是无法弥补这些教程中的差距,无法将它们整合到我的项目中。老实说,我真的不在乎广告是在应用启动时调用还是在游戏结束时调用,我很高兴能够调用广告期,但我想在游戏启动时是首选。

很确定我已经在 gameviewcontroller.swift 中正确设置了它,但我不知道如何实际调用它。这是我的 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 秒后吃午饭时,我看到了广告 这是你的例子。

我对Swift一点都不熟悉, 但是您需要做的就是在解雇时获取插页式代理 -> 并请求下一个插页式广告,因此下次您将获得新的 AD

有什么问题尽管问! P.S。不要忘记将 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)             
        }
    }

然后就可以在GameScene中使用了

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

希望这对您有所帮助。

在viewDidAppear中保留if条件会自动执行

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