Wie zeige ich eine Interstitial-Anzeige von admob alle x Mal, wenn der Benutzer gestorben ist oder alle x Mal der Benutzer macht so etwas wie drückt eine Taste? So habe ich eine Interstitial-Anzeige auf meinem GameScene und begrenzte Anzeigenimpressionen mit einer einfachen if-Anweisung gezeigt.Interstitial in anderen Szenen anzeigen - Admob, SpriteKit, Swift
Antwort
Dies funktioniert nur, wenn Sie die GoogleMobileAds.sdk haben und das googlemobileads-Modul in Ihren GameViewController und GameScene oder GameOverScene importiert haben.
Ich zeige Ihnen die cross-szenische Anzeigenimplementierung und die programmgesteuerte Begrenzung von Anzeigenimpressionen.
Zuerst in Ihrem GameViewController:
import GoogleMobileAds
class GameViewController: UIViewController, GADInterstitialDelegate {
var myAd = GADInterstitial()
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.loadAndShow), name: "loadAndShow", object: nil)
}
Erstellen Sie zwei Funktionen auf der Unterseite Ihres GameViewController:
func loadAndShow() {
myAd = GADInterstitial()
let request = GADRequest()
myAd.setAdUnitID("ca-app-pub-3940256099942544/4411468910")
myAd.delegate = self
myAd.loadRequest(request)
}
func interstitialDidReceiveAd(ad: GADInterstitial!) {
if (self.myAd.isReady) {
myAd.presentFromRootViewController(self)
}
}
Sie sind mit GameViewController getan. Gehe nun zu GameOverScene oder GameScene, was immer du brauchst.
Erstellen Sie eine globale Variable int:
var playCount = Int()
In Ihrem DidMoveToView sagen:
playCount = 1
Dieser Teil irgendwie verwirrend ist, ein bisschen, nicht wirklich. Gehe zu deinem touchesBegan und finde, wo du einer Schaltfläche Aktionen hinzufügst, wenn sie gedrückt wird. Zum Beispiel setzt eine resetGame-Schaltfläche die Szene zurück. Fügen Sie das dort hinzu und inkrementieren Sie das playButton Int wie folgt:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches{
let location = touch.locationInNode(self)
if resetGame.containsPoint(location) {
restartScene()
playCount += 1
}
Letzter Schritt. Fügen Sie diese beiden Funktionen auf dem Boden der Szene, die Sie in Interstitial-Anzeigen zeigen wollen:
func displayAd() {
NSNotificationCenter.defaultCenter().postNotificationName("loadAndShow", object: nil)
}
func checkAd() {
if playCount % 4 == 0 {
displayAd()
}
}
}
Jetzt jede vierte Mal, dass der Benutzer auf die Schaltfläche Reset Spiel drückt oder stirbt, sollte eine Interstitial-Anzeige angezeigt. Ich hoffe das hilft.
BEARBEITEN: Ich habe vergessen, Ihnen zu sagen, die checkAd() -Funktion aufzurufen. Ruf diese Funktion an, wo auch immer deine Spieler sterben. Wenn Sie also eine Bool-Variable namens "toded" oder "gameover" haben, rufen Sie sie an derselben Stelle auf. Zum Beispiel ..
if died == true {
checkAd()
}
import UIKit
import SpriteKit
import GoogleMobileAds
var playCount = Int()
class GameViewController: UIViewController, GADBannerViewDelegate {
@IBOutlet var banner: GADBannerView!
var myAd = GADInterstitial()
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.loadAndShow), name: "loadAndShow", object: nil)
let scene = MainScene(size: CGSize(width: 1536, height: 2048))
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
/* 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
skView.presentScene(scene)
banner.hidden = true
banner.delegate = self
banner.adUnitID = "ca-app-pub-8889875503423788/7902691359"
banner.rootViewController = self
banner.loadRequest(GADRequest())
}
func loadAndShow() {
myAd = GADInterstitial()
let request = GADRequest()
myAd.setAdUnitID("ca-app-pub-8889875503423788/7902691359")
myAd.delegate = self
myAd.loadRequest(request)
}
func interstitialDidReceiveAd(ad: GADInterstitial!) {
if (self.myAd.isReady) {
myAd.presentFromRootViewController(self)
}
}
func adViewDidReceiveAd(bannerView: GADBannerView!) {
banner.hidden = false
}
func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) {
banner.hidden = true
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return .AllButUpsideDown
} else {
return .All
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
gehen bis zu Ihrer Klasse GameViewController wo es UIViewController sagt und fügen GADInterstitialDelegate –
lol Ich kann nicht glauben, dass ich das erklären vergessen !. Haha Thankyou – Vic
Können Sie Ihren Beitrag bearbeiten, um zu erklären, wie dies die Frage beantwortet? Code-Dumps werden in StackOverflow nicht empfohlen: Sie sind nicht sehr hilfreich, da sie den Leuten nicht beibringen, wie sie Probleme lösen können. Sie ermutigen nur zum Kopieren und Einfügen. Vielen Dank! –