Swift — ADBannerView

Я пытался реализовать ADBannerView по-старому, как Objective C, но безуспешно. Все работает, но реклама не появляется, остается пустое поле.

func bannerViewDidLoadAd(banner: ADBannerView!) {
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1)
    banner.alpha = 1
    UIView.commitAnimations()
}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1)
    banner.alpha = 0
    UIView.commitAnimations()
}

Кто уже пробовал iAd на Swift?


person Bogdan Bogdanov    schedule 11.07.2014    source источник
comment
Здравствуйте, я тоже пытаюсь им пользоваться. Я нашел следующее: developer.apple.com/ библиотека/предварительная версия/ios/документация/   -  person Mr. T    schedule 11.07.2014
comment
добавьте делегата поверх вашего класса с помощью ADBannerViewDelegate вместо старого способа ‹ADBannerViewDelegate›   -  person Mr. T    schedule 11.07.2014
comment
Я бы порекомендовал вам использовать замыкания для анимации UIView: UIView.animateWithDuration(1) { /* animations ... */ }   -  person return true    schedule 26.10.2014
comment
Пожалуйста, проверьте выбранный вами ответ, так как ответ мистера Т. приводит к дублированию ADBannerView.   -  person chrisamanse    schedule 04.06.2015


Ответы (3)


Я нашел решение, как его реализовать. (Вы можете использовать внутри каждого метода «banner.alpha 1.0» или что-то еще.)

//import ... your normal imports as UIKit etc.
import iAd

class YourClassViewController: UIViewController, ADBannerViewDelegate {

   @IBOutlet var adBannerView: ADBannerView //connect in IB connection inspector with your ADBannerView

   override func viewDidLoad() {
      super.viewDidLoad()

      self.canDisplayBannerAds = true
      self.adBannerView.delegate = self
      self.adBannerView.hidden = true //hide until ad loaded
   }

   func bannerViewWillLoadAd(banner: ADBannerView!) {
      NSLog("bannerViewWillLoadAd")
   }

   func bannerViewDidLoadAd(banner: ADBannerView!) {
      NSLog("bannerViewDidLoadAd")
      self.adBannerView.hidden = false //now show banner as ad is loaded
   }

   func bannerViewActionDidFinish(banner: ADBannerView!) {
      NSLog("bannerViewDidLoadAd")

      //optional resume paused game code

   }

   func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
      NSLog("bannerViewActionShouldBegin")

      //optional pause game code

      return true
   }

   func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
      NSLog("bannerView")
   }

   //... your class implementation code

}

См. следующий ответ о том, как это сделать без IBBuilder!

person Mr. T    schedule 11.07.2014
comment
Я не могу скрыть рекламу, используя это. self.adBannerView.hidden = true Есть идеи? - person Rohit Goyal; 09.09.2014
comment
@RohitGoyal Я проверил это в другой раз, и он все еще отлично работает для меня с Xcode 6.0 (6A313). Вы можете проверить, является ли self.adBannerView != null и отладить его. Без какого-либо кода мы не можем помочь, извините. - person Mr. T; 11.09.2014
comment
Разве это не приведет к двум ADBannerView? - person chrisamanse; 04.06.2015

Если вы используете iOS 7, в UIViewController были добавлены методы расширения и свойства для поддержки обработки iAd:

Видеть

https://developer.apple.com/library/prerelease/ios/documentation/iAd/Reference/UIViewController_iAd_Additions/index.html

Чтобы показать iAd, сначала нужно добавить фреймворк iAd, перейти в свойства проектов, вкладка «Общие», добавить iAd.framework в раздел «Связанные фреймворки и библиотеки».

В контроллере представления импортируйте iAd, чтобы получить доступ к расширениям iAd. И, наконец, в viewDidLoad установите self.canDisplayBannerAds = true.

Чтобы удалить рекламу, установите для canDisplayBannerAds значение false.

Обратите внимание, что нет необходимости создавать AdBannerView в раскадровке или программно, и нет необходимости, чтобы ваш контроллер представления реализовывал AdViewDelegate.

import UIKit
import iAd

class ViewController : UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
        //That's it
        self.canDisplayBannerAds = true
    }
}
person Pig Dog Bay    schedule 02.03.2015

Ответ мистера Т содержит много бесполезного кода.

Все, что вам нужно, это эта часть, чтобы показывать рекламу в вашем контроллере:

override func viewDidLoad() {
      super.viewDidLoad()

      canDisplayBannerAds = true
}

А когда вам не нужна реклама, вы canDisplayBannerAds = false.

Что он делает — оборачивает ваш контроллер в другой контроллер с рекламным баннером внизу. Эта функция доступна начиная с iOS7.

С ним нельзя получить сообщения делегата, поэтому, если вам это нужно — вы должны заменить его на переменную экземпляра ADBannerView.

person Shmidt    schedule 05.02.2015
comment
Нет методов делегирования? Ну, вы можете сделать это так, как вы предлагаете, но тогда вы показываете рекламу, не закончив загрузку - не очень приятно для пользователя. И если пользователь нажимает на объявление, вам нужно остановить что-то в вашем приложении или игре, это возможно только с помощью методов делегирования. - person Mr. T; 26.02.2015
comment
@Mr.T Не закончив загрузку? Что это значит? - person Shmidt; 26.02.2015
comment
@Mr.T Ваше отрицательное голосование показывает, что вы не понимаете, что такое canDisplayBannerAds. - person Shmidt; 26.02.2015
comment
Проголосовал за этот, так как это должно сработать. Добавление еще одного ADBannerView в раскадровку приведет к двум ADBannerView, которые Apple может отклонить, поскольку это нарушает ее правила. Насколько я понимаю из документации Apple, установка canDisplayBannerAds на true уже позволит UIViewController обрабатывать показ/скрытие рекламы. Я пробовал только однострочный код, поэтому, пожалуйста, скажите мне, если то, что я предполагаю, неверно. - person chrisamanse; 04.06.2015
comment
@ Кристофр, все именно так, как ты написал. - person Shmidt; 04.06.2015