2016-12-05 155 views
2

我正在开发SpriteKit游戏,并正在通过AdMob(Google Firebase)实施横幅广告。我在Google的教程herehere上设置了您的第一个广告请求,但是当我在SIM或我的设备(iPhone 6s)上运行应用程序时,横幅不显示。根据教程,我通过故事板实现了横幅视图,其余部分以编程方式设置。以下是我的视图控制器的代码。AdMob横幅广告未显示Swift 3

问:为什么我的旗帜不显示?

后续问:是否可以在某些SKScenes上显示横幅?

import UIKit 
import SpriteKit 
import GoogleMobileAds 

class GameViewController: UIViewController, GADBannerViewDelegate { 

    @IBOutlet weak var bannerView: GADBannerView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion()) 
     bannerView.delegate = self 
     bannerView.adUnitID = "ca-app-pub-9474695450721030/1823667708" 
     bannerView.rootViewController = self 
     let req = GADRequest() 
     req.testDevices = ["91fbd46dff1179ce0a5e7226cea1ee0b", kGADSimulatorID] 
     req.tag(forChildDirectedTreatment: true) 
     bannerView.load(GADRequest()) 
     view.addSubview(bannerView) 
     showBanner() 
    } 

    override func viewWillLayoutSubviews() { 
     super.viewWillLayoutSubviews() 

     if let skView = self.view as? SKView { 
      if skView.scene == nil { 

       let aspectRatio = view.bounds.size.height/view.bounds.size.width 
       let scene = MenuScene(size: CGSize(width: 750, height: 750 * aspectRatio)) 

       scene.scaleMode = .aspectFill 
       skView.ignoresSiblingOrder = true 

       if kDebug { 
        skView.showsFPS = true 
        skView.showsDrawCount = true 
        skView.showsNodeCount = true 
        skView.showsPhysics = true 
       } 

       let transition = SKTransition.fade(with: SKColor.black, duration: 0.5) 

       skView.presentScene(scene, transition: transition) 
      } 
     } 
    } 

    func showBanner() { 
     bannerView.isHidden = false 
     let request = GADRequest() 
     request.testDevices = ["2077ef9a63d2b398840261c8221a0c9b"] 
     bannerView.load(request) 
    } 

    func hideBanner() { 
     bannerView.isHidden = true 
    } 
} 
+0

您不必每次运行showAd时间()请求新的旗帜。只需取消隐藏它。此外,在您的viewDidLoad代码中,您正在初始化横幅广告,然后加载另一个 – Nik

+0

@Nik在调用show/hideBanner()方面,如何从其他场景文件访问这些funcs(和bannerView本身)如果他们在本地vc文件在这里?呃,我会那样做的!有趣的是,我记得当时我正在设置req变量的属性,并且告诉自己改变这一行。干杯! – Mike

+0

看看这个从场景调用vc函数:http://stackoverflow.com/a/40409261/6728196 – Nik

回答

3

首先,您无需在每次运行showAd()时申请新的横幅。只需取消隐藏它。您在启动时加载的广告将保留整个生命周期,并自动刷新。

其次,在您的viewDidLoad代码中,您正在初始化横幅广告,然后加载一个全新的代码。确保您正在加载您设置的相同请求。

至于呼唤你GameViewController从SKScene内部功能,看看这个:Call GameViewController function from SKScene