Как вызвать межстраничную рекламу admob с помощью swift, spritekit и xcode?

Я искал ответ на этот вопрос повсюду, и я нашел множество примеров в объективном C (документы разработчика Google и т. не смог восполнить пробелы в этих руководствах, чтобы собрать все вместе для моего проекта. Честно говоря, мне все равно, будет ли реклама вызываться при запуске приложения или при завершении игры, я был бы просто счастлив, если бы мог назвать период рекламы, хотя я думаю, что предпочтительнее при запуске игры.

Почти уверен, что у меня все правильно настроено в gameviewcontroller.swift, но я не знаю, как это на самом деле назвать. Вот код из моего gameviewcontroller.swift:

import UIKit
import SpriteKit
import GoogleMobileAds

class GameViewController: UIViewController {

    var interstitial : GADInterstitial!

 func createAndLoadAd() -> GADInterstitial {

        var ad = GADInterstitial()
        ad.adUnitID = "ca-app-pub-4471013071748494/2980967718"
        var request = GADRequest()
        request.testDevices = [""]

        return ad

    }

Помимо этого... У меня также есть это выражение if для вызова объявления, но я не знаю, где оно должно быть... или завершено ли оно (в учебнике оно было на кнопке, но мне нужно, чтобы оно было автомат, естественно:

if (self.interstitial.isReady) {
            self.interstitial.presentFromRootViewController(self)
            self.interstitial = self.createAndLoadAd()
        }

У кого-нибудь есть опыт в этом? Если кто-нибудь может помочь мне завершить это, сообщив мне, где разместить это выше, если оператор, или если есть еще что нужно сделать ... ваша помощь будет очень признательна. Спасибо.


person user3147770    schedule 24.04.2015    source источник
comment
Я думаю, что когда вы представляете его, вы убиваете его, снова вызывая метод create — вы должны вызывать этот метод, когда ваше объявление закрывается. Я может быть ошибаюсь, но для меня это сработало, единственная разница, которую я ise obj-c   -  person ColdSteel    schedule 24.04.2015
comment
Это if dstatement — это то, что на самом деле вызывает объявление. поместите его туда, где вы хотите, чтобы реклама всплывала, скажем, в конце игры или viewDidLoad, это зависит от вас   -  person ColdSteel    schedule 24.04.2015
comment
Лучше позвонить по окончанию игры, потому что реклама должна загрузиться (это занимает время, зависит от скорости соединения)   -  person ColdSteel    schedule 24.04.2015
comment
Кстати, в вашем коде отсутствует метод запроса загрузки для рекламы.   -  person ColdSteel    schedule 24.04.2015
comment
Спасибо ... но я не совсем понимаю, что вы говорите в первом и последнем комментариях. Не уверен, что я убиваю его, когда представляю его ... приведенный выше код прямо из учебника, в котором реклама размещалась на кнопке, чувак нажал кнопку, и это сработало. Я просто хочу, чтобы это было автоматически или на основе событий, а не на основе кнопок. Но это на моем gameviewcontroller.swift ... как я могу вызвать его из gamescene.swift или gameend.swift (два файла swift, которые создают визуальные аспекты игры) ?? Не могли бы вы случайно предложить пример кода ??   -  person user3147770    schedule 24.04.2015
comment
О, и да... отсутствующий метод запроса загрузки... Я думаю, что это может быть то, о чем я спрашиваю, как это сделать/где разместить... помимо этого оператора if. Документы разработчика Google представлены только на языке C ... но даже если бы у них были документы для Swift, я сомневаюсь, что это было бы для среды spritekit. Дерп! Это последнее, что мне нужно было сделать, чтобы завершить это приложение ... хотелось бы, чтобы я мог пойти дальше и назначить награду за это. ;-)   -  person user3147770    schedule 24.04.2015
comment
Вы можете добавить рекламу как UIKit поверх SpriteKit — это вообще не должно быть проблемой. Я не могу предложить вам пример кода ... Я не связываюсь со swift , все, что я могу сказать, это то, что в target-c вы должны вызывать [request loadRequest]; как последняя строка в инициализации объявления ... Просто посмотрите на заголовок GadTequest и найдите параллельный метод   -  person ColdSteel    schedule 24.04.2015
comment
Спасибо! Вот что расстраивает. Это вообще не должно быть проблемой, дох! Изучу строку/заголовок запроса на вызов GADRequest и посмотрю, что смогу выяснить.   -  person user3147770    schedule 24.04.2015
comment
У вас есть viewController, верно? ... на контроллере представления вы представляете сцену, верно? теперь вам нужно инициировать и загружать рекламу на контроллере представления (не на сцене) и со сцены для делегирования в viewController для представления рекламы (презентация - это первая строка в вашем операторе if)   -  person ColdSteel    schedule 24.04.2015
comment
Прошу прощения за мой плохой английский, я просто не знаю, как лучше объяснить   -  person ColdSteel    schedule 24.04.2015
comment
Нет, не совсем. Это не похоже на другие приложения, которые я сделал, где у вас есть обычный контроллер представления и раскадровка. Этот набор спрайтов имеет файл gameviewcontroller.swift, для которого я ничего не кодировал, пока не реализовал эту рекламу, и он имеет файл gamescene.swift, над которым я не делал никаких визуальных действий, но в котором я программно закодировал все визуальные объекты для игры, и endscene.swift, который я добавил в код с высокой оценкой и кнопкой перезапуска, также программно. Извините, мой словарный запас программирования настолько ограничен, что такие слова, как инициализация, сбивают меня с толку. Я новичок, сумасшедший. Однако, спасибо!!!   -  person user3147770    schedule 24.04.2015
comment
Кстати, у меня есть баннерная реклама admob, и она работает нормально. Он также был закодирован в файле gameviewcontroller.swift, и мне не нужно было добавлять какой-либо код в файл gamescene.swift, чтобы заставить его работать. Понятия не имею, почему это было так просто понять, и эта межстраничная реклама просто ломает мне голову. Тем не менее, спасибо за вашу помощь. Очень признателен!   -  person user3147770    schedule 24.04.2015
comment
это то же самое! добавить его в контроллер представления, да программно все мои 8 приложений работают программно...   -  person ColdSteel    schedule 24.04.2015
comment
Если вы хотите, вы можете отправить мне свой проект по электронной почте, и я добавлю туда ...   -  person ColdSteel    schedule 24.04.2015
comment
В моем лучшем голосе Криса Гриффина, Whaaaaaaat? :-) Подождите, но это же в Swift... кажется, вы сказали, что не делали всего Swift??? Спасибо, чувак ... в настоящее время добавление таймера к рекламному баннеру ... нужно будет выяснить, как экспортировать проект, чтобы отправить его по электронной почте.   -  person user3147770    schedule 24.04.2015
comment
быстро или нет, это одна и та же иерархия и одни и те же вещи   -  person ColdSteel    schedule 25.04.2015
comment
Хорошо, я сделаю вам пример через пару часов (быстро) ... Я понимаю, что вы расстроены (кстати, я имел в виду, что вы отправите только часть viewController) ... В любом случае я сделаю вам ответ через 2-3 часов с примером в swift   -  person ColdSteel    schedule 25.04.2015
comment
Какой у тебя адрес электронной почты? Проверили страницу своего профиля и не увидели ее? Я могу быстро и легко просто скопировать/вставить код gameviewcontroller.swift. :-)   -  person user3147770    schedule 25.04.2015
comment
О... и если я еще недостаточно сказал -- спасибо!!!   -  person user3147770    schedule 25.04.2015
comment
Я сделал вам пример, надеюсь, это поможет. (Кстати, измените идентификатор ADUnit, это из моего приложения.)   -  person ColdSteel    schedule 25.04.2015


Ответы (3)


Итак, я начал новый проект (проект Swift), который называется Game Project.

В GameViewController:

class GameViewController: UIViewController
{
var interstitial = GADInterstitial()

override func viewDidLoad()
{
    super.viewDidLoad()

    if let scene = GameScene.unarchiveFromFile("GameScene") as? 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

        skView.presentScene(scene)



        let delayTime = dispatch_time(DISPATCH_TIME_NOW,
            Int64(5 * Double(NSEC_PER_SEC)))

        //Creation of the ad and its request
        self.interstitial = GADInterstitial()
        self.interstitial.adUnitID = "ca-app-pub-4798156420380453/7714267723"
        var request = GADRequest()
        // request.testDevices = [""]
        self.interstitial.loadRequest(GADRequest());//The method u were missing

        dispatch_after(delayTime, dispatch_get_main_queue())
        {
            self.showAd()
        }

    }
}



 func showAd()
 {
    if (self.interstitial.isReady)
    {
        self.interstitial.presentFromRootViewController(self)//Whatever  shows the ad
    }
}

Это мой первый быстрый код, поэтому не судите меня, если я сделал что-то не так. Но когда я обедаю, через ± 5 секунд я вижу рекламу. Вот ваш пример.

Я совсем не знаком со Swift, но все, что вам нужно сделать, это получить межстраничный делегат, когда он будет отклонен -> и запросить следующее межстраничное объявление, поэтому в следующий раз вы получите новый AD

Не стесняйтесь спрашивать что угодно! P.S. Не забудьте сменить admob ID на свой ID.

person ColdSteel    schedule 24.04.2015
comment
Фантастический!! Потрясающе, спасибо!!! Получил это работает. Извините за долгую задержку с ответом, пришлось потратить немного времени на семью, прежде чем вернуться к нему. Это круто. Хорошая работа над отправкой. Превосходно! Теперь я могу немного поиграть с этим, посмотреть, может быть, только заставить его отображаться на экране игры или что-то в этом роде ... но я больше не буду вас беспокоить, вы определенно сделали все возможное. спасибо x10^123!!! - person user3147770; 25.04.2015
comment
Хм, хорошо, сижу здесь, пробую разные вещи, и слова «Не стесняйтесь спрашивать о чем угодно» продолжают появляться в моей голове. Итак... думаю, я спрошу (не стесняйтесь игнорировать, честно?)... Что бы вы сделали по-другому, если бы вы хотели вызвать добавление при смене сцены, а не после delayTime ? Это приложение переходит от игровой сцены к конечной, когда игрок умирает... было бы здорово, если бы реклама появлялась сразу после загрузки конечной сцены. есть идеи? Не беспокойтесь в любом случае — серьезно, не стесняйтесь игнорировать, я продолжу. :-) - person user3147770; 25.04.2015
comment
Что ж, в obj-c подход состоит в том, чтобы делегировать метод showAd из endScene в viewController (также можно использовать центр nsnotification), он не должен быть таким же в Swift, просто я знаю синтаксис того, как его объявить, я постараюсь найти сеть - person ColdSteel; 25.04.2015
comment
comment
вот пример центра уведомлений andrewcbancroft.com/2014 /10/08/ - person ColdSteel; 25.04.2015
comment
Самый быстрый способ для вас - реализовать центр уведомлений, но в целом вы должны изучить шаблон делегирования. - person ColdSteel; 25.04.2015
comment
Большое тебе спасибо. Да, я хочу научиться делать все это. Может быть, однажды я смогу быть так же полезен для кого-то, как вы и несколько других замечательных людей на этом сайте были для меня. Супер спасибо, амиго!!! - person user3147770; 25.04.2015

Мое решение, основанное на приведенных выше комментариях, было следующим:

1) Добавьте это в GameViewController.swift

protocol AdmobInterstitialDelegate{
    func showInterstitial()
}
...
// add this delegate in GameViewController definition
class GameViewController: UIViewController, GADInterstitialDelegate, AdmobInterstitialDelegate {
...
// and assign it to the GameScene class when you create its instance
     let scene = GameScene()
     scene.adDelegate = self
// do not forget to implement the delegated method itself
    func showInterstitial(){
        if (interstitial!.isReady) {
            interstitial!.presentFromRootViewController(self)             
        }
    }

а затем вы можете использовать его в GameScene

class GameScene: SKScene {
....
    var adDelegate: AdmobInterstitialDelegate?
....
// and finally - show the ad
    override func didMoveToView(view: SKView) {
        self.adDelegate?.showInterstitial();
        ....

надеюсь это поможет.

person Piotr    schedule 19.10.2015
comment
Будет ли это показывать рекламу в зависимости от отображаемой сцены? - person Dieblitzen; 24.12.2015

сохраните условие if в viewDidAppear, оно будет автоматически выполнено

override func viewDidAppear(animated: Bool) {
        if (interstitial.isReady) {
        interstitial.presentFromRootViewController(self)
        self.interstitial = self.createAndLoadInterstitial()
        }
person Sajjad Aims    schedule 20.02.2016