2016-06-20 4 views
1

오케이, 지금이 일을 보냈습니다. 내가 admob의 튜토리얼, 유튜브, 스택 교환, 모든 것을 겪어 왔고 내 문제에 대한 해결책을 찾을 수 없다.iOS 게임 애플리케이션 및 Swift에서 AdMob 삽입 광고 사용

저는 admob의 삽입 광고를 내 iOS 게임 응용 프로그램에 구현하려고합니다. 코드가 컴파일되고 빌드되며 실행되면 게임이 실행되지만 광고는 표시되지 않습니다. 이것은 내가 게임이 끝날 때, 함수가 다시 시작 버튼을 표시합니다

//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() 
} 

내 GameScene에 전화 드렸습니다 방법이 내 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) 
    } 
} 

입니다. 그런 다음 삽입 광고를 팝업으로 표시하여 사용자가 삽입 광고를 종료해야 재생 버튼을 누르십시오. 해당 변수 varForGVC은 GameScene.swift에서 구현되었습니다. varForGVC = GameViewController()

내 응용 프로그램을 Firebase 및 admob과 동기화했습니다. 내 루트에 GoogleService-Info.plist가 있습니다. 내 뿌리에 admob을위한 필수 프레임 워크 목록이 있습니다. Firebase로 포드가 설치되었습니다. 내 GameViewController에서 사용하고있는 코드를 내 GameScene.swift에 넣으려고했는데 거기에서도 작동하지 않았습니다. 이 문제가 중요한 건지 모르겠지만 내 게임에는 주 화면, 주 화면을 통해서만 액세스 할 수있는 규칙 화면이 있습니다. 그런 다음 사용자가 다른 화면 (GameScene)에서 게임을 시작하기 위해 재생 버튼을 누르십시오. .isReady에 대한 내 확인은 found not ready을 반환하지 않습니다. 이 문제에 대해 도움이 필요합니다. 지금은 프레임 워크를 다시 설치하고 그 프레임 워크를 확인하려고합니다.

답변

2

이것은 AdMob의 삽입 광고를 사용하는 방법입니다. 광고 확장을 사용하는 것입니다. 나는 그것이 더 깨끗한 해결책이라고 생각합니다. 희망이 당신을 도울 것입니다!

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 
    } 
} 

그리고 마지막 부분 - 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

는 것을 확실히 내 코드를 확실히 정리, 감사 약간! NSNotificationCenter는 작동하지만 이것은 훨씬 깨끗합니다. – bms117

+0

고마워요! 대단한 – Sanf0rd

0

나는 그것을 마침내 발견했다. 나는 NSNotifcationCenter를 사용했다. 나는 내 viewDidLoad 함수에서 내 GameViewController.swift의 옵저버에 놓은 다음, 수신기가 팝업되도록하고 싶습니다.