2014-11-08 5 views
4

Я пытаюсь выяснить, как переключиться с моего iOS-интерфейса на межстраничные iAds, чтобы освободить место для контроллера с вкладками. По какой-то причине я полностью не могу найти какой-либо ресурс даже для начала работы с этими объявлениями быстро.Как реализовать Interstitial iAds в Swift (Xcode 6.1)

Может ли кто-нибудь, пожалуйста, дать мне некоторую информацию об интерстициальных iAds с Swift и о том, как я могу реализовать их в проекте.

+1

Заканчивать [Swift AdMob Учебник] (http://www.ios-blog.co.uk/tutorials/swift/display-ads-in-your-application-with-google-admob/) - Буквально только через это все испытание, пока я не нашел это. (iAds закрывается.) – JamesG

ответ

3

Вот как я использую в моем проекте

// добавление рамки ОВР

import iAd 

// соответствует ОВР делегат

class ViewController: UIViewController,ADInterstitialAdDelegate 


//create instance variable 
var interstitial:ADInterstitialAd! 

// по умолчанию IAD межстраничные не обеспечивает кнопку закрытия поэтому нам нужно создать один вручную

var placeHolderView:UIView! 
var closeButton:UIButton! 



override func viewDidLoad() { 
    super.viewDidLoad() 

    //iAD interstitial 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: ("runAd:"), name:UIApplicationWillEnterForegroundNotification, object: nil) 

} 




//iAD interstitial 
func runAd(notification:NSNotification){ 
var timer = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector("dislayiAdInterstitial"), userInfo: nil, repeats: false) 
cycleInterstitial() 
} 

func cycleInterstitial(){ 

    // Clean up the old interstitial... 
    // interstitial.delegate = nil; 
    // and create a new interstitial. We set the delegate so that we can be notified of when 
    interstitial = ADInterstitialAd() 
    interstitial.delegate = self; 
} 

func presentInterlude(){ 
    // If the interstitial managed to load, then we'll present it now. 
    if (interstitial.loaded) { 

     placeHolderView = UIView(frame: self.view.frame) 
     self.view.addSubview(placeHolderView) 

     closeButton = UIButton(frame: CGRect(x: 270, y: 25, width: 25, height: 25)) 
     closeButton.setBackgroundImage(UIImage(named: "error"), forState: UIControlState.Normal) 
     closeButton.addTarget(self, action: Selector("close"), forControlEvents: UIControlEvents.TouchDown) 
     self.view.addSubview(closeButton) 


     interstitial.presentInView(placeHolderView) 
    } 
} 

// iAd Delegate Mehtods 

// When this method is invoked, the application should remove the view from the screen and tear it down. 
// The content will be unloaded shortly after this method is called and no new content will be loaded in that view. 
// This may occur either when the user dismisses the interstitial view via the dismiss button or 
// if the content in the view has expired. 

func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!){ 
    placeHolderView.removeFromSuperview() 
    closeButton.removeFromSuperview() 
    interstitial = nil 

    cycleInterstitial() 
} 


func interstitialAdActionDidFinish(_interstitialAd: ADInterstitialAd!){ 
    placeHolderView.removeFromSuperview() 
    closeButton.removeFromSuperview() 
    interstitial = nil 

    println("called just before dismissing - action finished") 

} 

// This method will be invoked when an error has occurred attempting to get advertisement content. 
// The ADError enum lists the possible error codes. 
func interstitialAd(interstitialAd: ADInterstitialAd!, 
    didFailWithError error: NSError!){ 
     cycleInterstitial() 
} 


//Load iAd interstitial 
func dislayiAdInterstitial() { 
    //iAd interstitial 
    presentInterlude() 
} 


func close() { 
    placeHolderView.removeFromSuperview() 
    closeButton.removeFromSuperview() 
    interstitial = nil 

} 
+0

Отличный код! Я получил эту работу, но мне любопытно, почему в строке есть 3.0: NSTimer.scheduledTimerWithTimeInterval (3.0, target: self, selector: Selector ("dislayiAdInterstitial"), userInfo: nil, repeatts: false) –

+0

Так что в основном использование рекламы данные. Поэтому вам нужно подождать 3 секунды, чтобы дать рекламе возможность быть загруженной, чтобы ее можно было использовать, даже если услуга не очень хорошая. –

17

Вот относительно чист и легче следовать способу реализации межстраничных объявлений, так как этот способ не требует использования

import UIKit 
import iAd 

class ViewController: UIViewController, ADInterstitialAdDelegate { 
var interstitialAd:ADInterstitialAd! 
var interstitialAdView: UIView = UIView() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    loadInterstitialAd() 
} 

func loadInterstitialAd() { 
    interstitialAd = ADInterstitialAd() 
    interstitialAd.delegate = self 
} 

func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) { 

} 

func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) { 
    interstitialAdView = UIView() 
    interstitialAdView.frame = self.view.bounds 
    view.addSubview(interstitialAdView) 

    interstitialAd.presentInView(interstitialAdView) 
    UIViewController.prepareInterstitialAds() 
} 

func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) { 
    interstitialAdView.removeFromSuperview() 
} 

func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool { 
    return true 
} 

func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) { 

} 

func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) { 
    interstitialAdView.removeFromSuperview() 
} 

И это может помочь, если вы поставите println("Function Name") в каждой функции только следить вашего процесса межстраничных объявлений. Если у вас есть какие-либо вопросы или способ улучшить этот блок кода, пожалуйста, оставьте комментарий. Спасибо

1

Я знаю, что это старый - но я просто наткнулся на

override func prepareForSegue(segue: UIStoryboardSegue, 
       sender: AnyObject?) { 

let destination = segue.destinationViewController 
      as UIViewController 
destination.interstitialPresentationPolicy = 
    ADInterstitialPresentationPolicy.Automatic 
} 
1

Если добавить этот делегат своего приложения, вы будете избегать, что 3 второй задержки было предложено выше.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     UIViewController.prepareInterstitialAds() 
     return true 
    }