2017-04-19 102 views
1

我試圖在每次我的遊戲轉換到GameOver場景時顯示AdMob插頁式廣告。但是,只有在我的視圖控制器中將其初始化函數放入我的viewDidLoad()函數中時,廣告纔會顯示。我在遊戲中設置了一個通知中心,並且在進入GameOver場景時嘗試發送通知,以觸發初始化廣告的功能,但這並沒有成功。我想知道如何在任何給定的時間從場景中觸發它,而不是在應用程序啓動後立即顯示它,這是將它放在視圖控制器的viewDidLoad函數中。SpriteKit中的AdMob插頁式廣告遊戲

在我GameViewController是這兩個函數:

public func initAdMobInterstitial() { 

    adMobInterstitial = GADInterstitial(adUnitID: AD_MOB_INTERSTITIAL_UNIT_ID) 
    adMobInterstitial.delegate = self 
    let request = GADRequest() 
    request.testDevices = ["ddee708242e437178e994671490c1833"] 

    adMobInterstitial.load(request) 

} 

func interstitialDidReceiveAd(_ ad: GADInterstitial) { 

    ad.present(fromRootViewController: self) 

} 

這裏我註釋掉initAdMobInterstitial,但是當它被註釋掉的廣告彈出並正常工作。這個彈出窗口會在應用第一次啓動時發生。

override func viewDidLoad() { 
    super.viewDidLoad() 

    //initAdMobInterstitial() 

    initAdMobBanner() 

    NotificationCenter.default.addObserver(self, selector: #selector(self.handle(notification:)), name: NSNotification.Name(rawValue: socialNotificationName), object: nil) 

    let scene = Scene_MainMenu(size: CGSize(width: 1024, height: 768)) 
    let skView = self.view as! SKView 

    skView.isMultipleTouchEnabled = true 

    skView.ignoresSiblingOrder = true 

    scene.scaleMode = .aspectFill 

    _ = SGResolution(screenSize: view.bounds.size, canvasSize: scene.size) 

    skView.presentScene(scene) 

} 

現在,在我的一個場景中,名爲GameOver,我希望廣告彈出。每當場景出現時我都希望它出現,所以每次玩家輸掉遊戲時都會出現。使用通知中心,你可以在我的視圖控制器類看,我試圖發送一個通知,並將它處理...

override func didMove(to view: SKView) { 

    self.sendNotification(named: "interNotif") 

}

...通過這個功能,也是在發現視圖控制器類

func handle(notification: Notification) { 

    if (notification.name == NSNotification.Name(rawValue: interstitialNotificationName)) { 

     initAdMobInterstitial() 

    } 
} 

另請注意,在我的視圖控制器我已經宣佈interstitialNotificationName等於字符串「interNotif」來匹配發送的通知。

+0

請分享你的一些代碼。 – Evana

回答

1

加載後不要呈現GADInterstitial。您的通知功能應該呈現它。然後,一旦用戶駁回另一個廣告請求。例如:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Load the ad 
    initAdMobInterstitial() 
} 

func interstitialDidReceiveAd(_ ad: GADInterstitial) { 
    // Do not present here 
    // ad.present(fromRootViewController: self) 
} 

func handle(notification: Notification) { 
    if (notification.name == NSNotification.Name(rawValue: interstitialNotificationName)) { 
     // Check if the GADInterstitial is loaded 
     if adMobInterstitial.isReady { 
      // Loaded so present it 
      adMobInterstitial.present(fromRootViewController: self) 
     } 
    } 
} 

// Called just after dismissing an interstitial and it has animated off the screen. 
func interstitialDidDismissScreen(_ ad: GADInterstitial) { 
    // Request new GADInterstitial here 
    initAdMobInterstitial() 
} 

對於GADInterstitialDelegate廣告事件的完整列表,請參閱AdMob iOS Ad Events

+0

我明白你爲什麼這麼做了,但廣告仍然沒有顯示出來。如果我沒有從那裏加載它,我的didRecieveAd函數應該怎麼做? – Matt