2016-06-20 9 views
1

Okay, ich habe jetzt Tage damit verbracht, dies zu tun. Ich habe die Admob Tutorials, Youtube, Stack Exchange, alles durchgegangen und ich kann keine Lösung für mein Problem finden.Verwenden von AdMob-Interstitial-Anzeigen in iOS-Spielanwendungen und Swift

Ich versuche admob Interstitial-Anzeigen in meine iOS-Spielanwendung zu implementieren. Der Code kompiliert, erstellt, läuft, das Spiel wird gespielt, aber Anzeigen werden nicht angezeigt. Das ist mein GameViewController.swift

import UIKit 
import SpriteKit 
import GoogleMobileAds 


class GameViewController: UIViewController, GADInterstitialDelegate { 

//AD STUFF-----------------------------vBELOWv---------------------------------------------- 
//AD STUFF-----------------------------vBELOWv---------------------------------------------- 
var interstitialAd: GADInterstitial? 

func createInterstitialAd() -> GADInterstitial { 
    let request = GADRequest() 
    let interstitial = GADInterstitial(adUnitID: "ca-app-pub-******") 
    request.testDevices = [kGADSimulatorID, "C966DEAC-A2FD-4FBA-80B5-802B7E394C6D", "F3E1897A-3556-4704-9C85-3D70B4672F44","090DCEE5-6B1C-4DFB-83CE-FE800A242008", "1B93E43B-E9B3-4482-8B11-4F3614A26EA2"] 
    interstitial.delegate = self 
    interstitial.loadRequest(request) 

    return interstitial 
} 

//func to show the ad 
func showAd() { 
    if interstitialAd != nil { 
     if interstitialAd!.isReady{ 
      interstitialAd?.presentFromRootViewController(self) 
     } 
     else {print("found not ready")} 
    } 
} 

//func to pre-load new ad - calls automatically when closes an ad 
func interstitialWillDismissScreen(ad: GADInterstitial!) { 
    interstitialAd = createInterstitialAd() 

} 
//AD STUFF--------------------------^ABOVE^-------------------------------------------------- 
//AD STUFF--------------------------^ABOVE^-------------------------------------------------- 

override func viewDidLoad() { 
    super.viewDidLoad() 
    interstitialAd = createInterstitialAd() 
    if let scene = GameScene(fileNamed:"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 
     scene.size = self.view.bounds.size 
     skView.presentScene(scene) 
    } 
} 

Dies ist, wie ich es meinen GameScene bin Aufruf

//makes the restart button appear 
func createRestartBTN(){ 
    restartBTN = SKSpriteNode(color: SKColor.clearColor(), size: CGSize(width: 200, height: 100)) 
    restartBTN.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 
    restartBTN.zPosition = 10 

    addChild(restartBTN) 
    createReplayText() 
    varForGVC.showAd() 
} 

Also, wenn das Spiel vorbei ist, eine Funktion eine Restart-Taste erscheinen läßt. Dann möchte ich, dass meine Interstitial-Anzeige eingeblendet wird, sodass der Nutzer die Interstitial-Anzeige verlassen muss, um den Wiedergabe-Button zu drücken. Diese Variable varForGVC ist ein früher im GameScene.swift implementiert von varForGVC = GameViewController()

Ich habe meine App mit Firebase und admob synchronisiert. Ich habe die GoogleService-Info.plist in meinem root. Ich habe auch die Liste der erforderlichen Frameworks für admob in meinem Root. Ich habe Pod mit Firebase installiert. Ich habe versucht, den Code, den ich in meinem GameViewController verwende, in mein GameScene.swift zu setzen, und es hat dort auch nicht funktioniert. Ich weiß nicht, ob das wichtig ist, aber mein Spiel hat einen Hauptbildschirm, einen Regelbildschirm, der nur über den Hauptbildschirm zugänglich ist, und der Benutzer drückt dann eine Play-Taste, um das Spiel auf einem anderen Bildschirm (dem GameScene) zu spielen. Mein Scheck für .isReady gibt found not ready nicht zurück. Ich brauche Hilfe bei diesem Problem. Fürs Erste werde ich versuchen, die Frameworks neu zu installieren und zu sehen, ob es das ist.

Antwort

2

So arbeite ich mit Interstitial-Anzeigen von AdMob - mit der Erweiterung. Ich denke, es ist viel sauberere Lösung. Hoffe es wird dir helfen!

GameViewController.swift

class GameViewController: UIViewController { 
    var interstitial: GADInterstitial? 

    override func viewDidLoad() { 
     createInterstitial() 
    } 

    func presentInterstitial() { 
     guard let interstitial = self.interstitial where interstitial.isReady else { 
      return 
     } 

     dispatch_async(dispatch_get_main_queue(), { 
      interstitial.presentFromRootViewController(self) 
     }) 
    } 
} 

GameViewController + GADInterstitialDelegate.swift

import GoogleMobileAds 

extension GameViewController: GADInterstitialDelegate { 
    func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) { 
     print("\(#function): \(error.localizedDescription)") 
    } 

    func interstitialDidDismissScreen(ad: GADInterstitial!) { 
     // Recycle interstitial 
     createInterstitial() 

     unpauseGame() // Some method from GameViewController 
    } 

    func interstitialWillPresentScreen(ad: GADInterstitial!) { 
     pauseGame() // Some method from GameViewController 
    } 

    func createInterstitial() { 
     interstitial = GADInterstitial(adUnitID: interstitialAdUnitID) 
     interstitial!.loadRequest(AdMobHelper.createRequest()) 
     interstitial!.delegate = self 
    } 
} 

Und der letzte Teil - AdMobHelper.swift

import GoogleMobileAds 

let interstitialAdUnitID = "Some Id" 

class AdMobHelper { 
    static func createRequest() -> GADRequest { 
     let request = GADRequest() 
     request.testDevices = ["Check this in your logs"] 
     return request 
    } 
} 
+0

Vielen Dank, dass auf jeden Fall meinen Code ganz bereinigt ein bisschen! NSNotificationCenter funktioniert, aber das ist viel sauberer. – bms117

+0

Danke Mann! genial – Sanf0rd

0

Ich habe es endlich herausgefunden. Ich habe NSNotifcationCenter benutzt. Ich habe in meiner ViewDidLoad-Funktion einen Beobachter in meine GameViewController.swift eingefügt, dann einen Empfänger, wo ich ihn sehen wollte.