iAd, AdMob and IAP wrapper for iOS using Swift.
- iAd and AdMob support
- iPhone and iPad compatability
- In app purchase to remove advert
- Add these lines to your Podfile.
pod 'CryptoSwift'
pod 'Google/AdMob'-
Add VLBanner.h to the build settings your target under: "Swift Compiler - Code Generation" -> "Objective -C Bridging Header"
-
You may get an error regarding bitcode, disable this under: "Build Options" -> "Enable Bitcode"
let advert = VLBanner.shared
advert.adUnitID = "ca-app-pub-xxxxxxxx/xxxxxxxx" //Insert your AdMob identifier here
advert.production = false //Choose whether test or production adverts are shown
advert.viewController = self //View controller to present modal adverts
self.view.addSubview(advert)
advert.start() //Begin advert cycleThe banner will resize itself as needed to display its current content. Constraints can be used to auto resize superviews and ui elements to fit onto the banner.
You can specify a custom view to be displayed when there are no adverts to present.
let advert = VLBanner.shared
advert.defaultView = UILabel(frame: advert.frame)
let defaultLabel = advert.defaultView as! UILabel
defaultLabel.text = "Remove This Advert"
defaultLabel.font = UIFont(name: "Helvetica Bold", size: 20)
defaultLabel.textAlignment = NSTextAlignment.Center
defaultLabel.backgroundColor = UIColor.blackColor()
defaultLabel.textColor = UIColor.whiteColor()See below for the delegate method to detect touches to the default view.
You can use the VLBannerContainer view controller subclass to wrap and respond correctly to the interface.
//Setup banner container
let bannerContainer = VLBannerContainer()
bannerContainer.subControllers.append(self)
bannerContainer.addChildViewController(self)
bannerContainer.edgesForExtendedLayout = UIRectEdge.None
bannerContainer.view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
//Get application delegate
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let window = appDelegate.window!
//Add and remove views
self.view.removeFromSuperview()
bannerContainer.view.addSubview(self.view)
window.rootViewController = bannerContainerTo manage the app properly in the background use the pause and resume meothds.
func applicationDidEnterBackground(application: UIApplication) {
VLBanner.shared.pause()
}
func applicationWillEnterForeground(application: UIApplication) {
VLBanner.shared.resume()
}You can use the protocol VLBannerPurchaseDelegate to be notified of advert changes.
let advert = VLBanner.shared
advert.advertDelegate = selfYou then have access to the following methdods.
func advertDefaultAction(advert: VLBanner) //Default view was pressed
func advertViewDidLoadAd(advert: VLBanner) //iAd or AdMob was loaded into view
func advertView(advert: VLBanner, didFailToReceiveAdWithError error: NSError) //iAd or AdMob returned an error
func advertViewActionShouldBegin(advert: VLBanner) //Modal advert presented from user click
func advertViewActionDidFinish(advert: VLBanner) //Modal advert finished presentingYou can use an in app purchase to enable the user to pay for the adverts removal.
let advert = VLBanner.shared
advert.iapIdentifier = "com.myapp.iap.adverts" //IAP identifier from iTunes Connect
advert.purchaseDelegate = selfOnce the IAP has been setup you can use the following methods to start an IAP transaction.
let advert = VLBanner.shared
advert.purchaseRemoveAdverts()
advert.restoreRemoveAdverts()If the transaction has been successful the banner will automaticlly hide itself and store its state in NSUserDefaults.
You can access this value via the VLBanner.shared.iapPurchased boolean property. (true is hidden)
You can then use the following VLBannerPurchaseDelegate methods to be notified of IAP changes.
func purchaseIAPSuccessful(advert: VLBanner, transaction: SKPaymentTransaction)
func purchaseIAPRestored(advert: VLBanner, transaction: SKPaymentTransaction)
func purchaseIAPFailed(advert: VLBanner, didFailToPurchaseWithError error: NSError)You can request an SKProduct object from the banner to obtain IAP information such as price.
let advert = VLBanner.shared
advert.requestProduct { (error, product) -> Void in
guard let product = product else{ return }
guard let defaultLabel = advert.defaultView as? UILabel else{ return }
//Format price to string
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.locale = product.priceLocale
defaultLabel.text = "Remove This Advert \(formatter.stringFromNumber(product.price)!)"
}You can use the VLBanner.shared.userInfo property to store the SKProduct if it is required elsewhere.