2016-12-05 1 views
2

Ich arbeite an einem SpriteKit-Spiel und implementiere Bannerwerbung über AdMob (Google Firebase). Ich habe die Google-Lernprogramme here und here zum Einrichten der ersten Anzeigenanfrage verwendet. Wenn ich die App jedoch entweder auf der SIM-Karte oder auf meinem Gerät (iPhone 6s) ausführe, wird das Banner nicht angezeigt. In den Tutorials habe ich die Banneransicht über das Storyboard implementiert und der Rest wurde programmgesteuert eingerichtet. Unten ist der Code meines View-Controllers.AdMob-Banneranzeige nicht mit Swift 3

F: Warum wird mein Banner nicht angezeigt?

Follow-up F: Kann ich das Banner nur auf bestimmten SKScenes anzeigen?

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

Sie brauchen nicht ein neues Banner Sie jedes Mal zu beantragen showAd laufen(). Einfach einblenden. In deinem viewDidLoad-Code initialisierst du eine Banner-Anzeige und lädst dann eine andere ein. – Nik

+0

@Nik In Bezug auf das Aufrufen von show/hideBanner(), wie greife ich auf diese funcs (und das bannerView selbst) von den anderen Szenedateien Wenn sie hier in der VC-Datei lokal sind? Gahh, ich würde das tun! Komisch, ich erinnere mich, dass ich diese Zeile betrachtet habe und mir selbst gesagt habe, ich solle das ändern, während ich die Attribute der req-Variable festlege. Prost! – Mike

+0

Werfen Sie einen Blick auf diese Aufruf von VC-Funktionen von Szenen: http://Stackoverflow.com/a/40409261/6728196 – Nik

Antwort

3

Zunächst einmal brauchen Sie nicht ein neues Banner Sie jedes Mal zu beantragen showAd() laufen. Einfach einblenden. Die Anzeige, die Sie beim Start laden, bleibt für den gesamten Lebenszyklus erhalten und wird automatisch aktualisiert.

Zweitens, in Ihrem viewDidLoad Code, initialisieren Sie eine Banner-Anzeige und laden dann eine komplett neue. Stellen Sie sicher, dass Sie dieselbe Anforderung laden, die Sie eingerichtet haben.

Wie für Funktionen in Ihrem GameViewController von einem SKScene, werfen Sie einen Blick auf diesem Aufruf: Call GameViewController function from SKScene