Это довольно долго, но это, вероятно, очень простое решение. Большинство это код, просто перейдите к нижней и там будет Т.Л., д-рSwist Admob Interstitial Error
Эй, так что я следовал около 10 учебных пособий на получение AdMob межстраничную работать в моей игре Swift Spritekit. Кроме всех обучающих программ, которые я видел, используйте кнопку IBAction с помощью кнопки. В настоящее время я хотел бы, чтобы объявления отображались каждый раз в меню. (только для начала, я могу изменить его позже). Все это работает отлично, но как только я нажал кнопку воспроизведения (перейдя на другую сцену), а затем вернусь к сцене меню. (GameScene) Интерстициальная функция больше не выполняется. Нет ошибки, она просто не делает этого больше, пока приложение не будет полностью закрыто и повторно открыто.
Вот код.
В моем классе GameViewController у меня есть:
var interstital: GADInterstitial!
И в сделал нагрузки GameViewController у меня есть:
if let scene = GameScene(fileNamed:"GameScene") {
let skView = self.view as? SKView
skView!.ignoresSiblingOrder = false
scene.scaleMode = .AspectFill
scene.viewController = self
skView!.presentScene(scene)
interstital = GADInterstitial(adUnitID: "ca-app-pub-9776687746813194/9687097060")
let request = GADRequest()
interstital.loadRequest(request)
Кроме того, в классе GameViewController у меня есть эти функции:
func ShowAd() {
print("doing the showadfunc now")
if (interstital.isReady) {
print("there is an inter ready")
interstital.presentFromRootViewController(self)
interstital = CreateAd()
}
else{
print("The interstitial wasn't ready.")
}
}
func CreateAd() -> GADInterstitial {
let interstital = GADInterstitial(adUnitID: "ca-app-pub-9776687748683194/9687247060")
interstital.loadRequest(GADRequest())
return interstital
}
В моем классе GameScene (меню) у меня есть:
var viewController: GameViewController!
И в классе GameScene у меня есть эта функция для отображения межстраничного объявления.
func adThing(){
//viewController?.ShowAd()
print("starting the ad function")
let waitForInterstitial = SKAction.waitForDuration(15.0)
let waitForInterstitialShort = SKAction.waitForDuration(3.0)
let showInterstitialAd = SKAction.runBlock({self.viewController?.ShowAd(); print("the function has been called..")})
let waitThenShowInterstitial = SKAction.sequence([showInterstitialAd,waitForInterstitial])
let waitThenShowInterStitialForever = SKAction.repeatActionForever(waitThenShowInterstitial)
//self.runAction(waitThenShowInterStitialForever)
self.runAction(waitForInterstitialShort, completion: {
print("its waited 3 seconds and will now start the ad thingo")
self.runAction(waitThenShowInterStitialForever)
})
print("done")
}
Итак, я вызываю функцию ShowAd (которая находится в gameviewcontroller) в моем GameScene каждые 20 секунд, (я подтвердил, что по крайней мере, думает, что это вызов функции.) Он отлично работает, когда приложение открывается для начала. Но когда я меняю сцену, а затем возвращаюсь к сцене меню (GameScene), функция Prints in my GameScene продолжает происходить, и мой код считает, что он вызывает функцию ShowAd, но кажется, что ничего не происходит, даже не отпечатки, которые находятся в функции ShowAd в GameViewController.
Так кажется, что после смены сцен и возврата, моя игра забывает, что такое GameViewController. Если я обращаюсь к GameViewController без «?» это приведет к краху моей игры с ошибкой «неожиданно обнаружено нуль при распаковке опционального». Итак, после смены сцен, возможно, GameViewController становится нулевым? Как я могу это исправить.
Пожалуйста, помогите мне !!! (Я новичок в программировании на случай, если вы не можете сказать. Я знаю, что должно быть заманчиво сделать комментарий от моего кода, это действительно голые кости, и на данный момент это не так хорошо.)
Спасибо так много, если вы можете мне помочь, и вау .. спасибо за чтение всего этого.;)
Спасибо за тщательный и ранний отзыв! Я сразу же займусь этим и позволю (и кому-нибудь еще) знать, как это происходит! –
Прохладный, также проверяйте комментарий Daniel Storm, вы также загружаете его неправильно. Сначала создайте объявление, а затем создайте его. – crashoverride777
Вы также должны обновить свой код для вызова метода createAd ранее. На данный момент вы загружаете новую рекламу, которую вы хотите показать. Вы должны предварительно загрузить его за кулисы, чтобы они были готовы, как только захотите. – crashoverride777