按下按钮后插页式 iAd 延迟

Interstitial iAd delayed after pressing button

我在点击 JSSAlert 上的取消按钮后尝试设置 iAd。我在 JSSAlert 函数中为全视图设置了 alpha 0.7.. 在视图控制器中我有 iAd 函数并将 alpha 设置回 1.0...

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.title = "Vyhodnotenie testu"
        self.showAlert()

    }


    func showAlert() {
        func callback(){}
        if numberOfPoints > 49 {
            let customIcon = UIImage(named: "smile")
            let alertview = JSSAlertView().show(self, title: "Gratulujeme! Uspeli ste.", text: "Dokončili ste test s počtom bodov \(numberOfPoints + 1) z \(maximumNumberOfPoints)!", buttonText: "OK!", color: UIColorFromHex(0x22c411, alpha: 1), iconImage: customIcon)
            alertview.setTextTheme(.Light)
            alertview.addAction(myCancelCallback)
            self.navigationController?.navigationBar.alpha = 0.7
        } else {
            let customIcon = UIImage(named: "sad")
            let alertview = JSSAlertView().show(self, title: "Ľutujeme! Neuspeli ste.", text: "Dokončili ste test s počtom bodov \(numberOfPoints + 1) z \(maximumNumberOfPoints)!", buttonText: "OK!", color: UIColorFromHex(0xd20606, alpha: 1), iconImage: customIcon)
            alertview.addAction(myCancelCallback)
            alertview.setTextTheme(.Light)
            self.navigationController?.navigationBar.alpha = 0.7
        }

    }

    func myCancelCallback() {
        self.navigationController?.navigationBar.alpha = 1.0
        self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Automatic
    }


    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(var interstitialAd: ADInterstitialAd!) {
        interstitialAd = nil
        interstitialAdView.removeFromSuperview()
    }

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

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

    }

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

函数 myCancelCallback 中的 Alpha 回到 1.0 正在工作,但 iAd 延迟了。什么会导致延迟?或者我该如何处理?

我想在按下确定后立即显示 iAd!

工作原理视频:

https://www.youtube.com/watch?v=r6LKN-cjaz8&feature=youtu.be

更新:

iAd App Network Shutdown As of December 31, 2016, the iAd App Network is no longer available. If you'd like to promote your apps, you can advertise using Search Ads, Apple News, or third party networks and advertising sellers.

Reference: https://developer.apple.com/support/iad/

这是您要做的,您必须以编程方式创建包括关闭按钮在内的插页式广告,我只是为您制作了一个示例:

在 info.plist 中添加行:View controller-based status bar appearance -> NO

在 AppDelegate didFinishLaunchingWithOptions 方法中添加以下行以确保状态栏不会被隐藏:

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)

这是一个完整的示例视图控制器,说明您将如何以编程方式添加插页式广告,但您只需要在显示插页式广告时编写动画,而不仅仅是使用 addSubView。你可以使用动画变换翻译你会发现很多关于它的样本。

import UIKit
import iAd

class ViewController: UIViewController, ADInterstitialAdDelegate {
    
    
    var interstitialAd:ADInterstitialAd!
    var interstitialAdView: UIView = UIView()
    var closeButton:UIButton!
    
   
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "loadInterstitialAd", userInfo: nil, repeats: false)
    }
    

    
    func loadInterstitialAd() {
        interstitialAd = ADInterstitialAd()
        interstitialAd.delegate = self
    }
    
    func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) {
        print("interstitialAdWillLoad")
    }
    
    func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {
        UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)

        print("interstitialAdDidLoad")
        UIApplication.sharedApplication().statusBarHidden = true
        interstitialAdView = UIView()
        interstitialAdView.frame = self.view.bounds
        
        self.navigationController?.navigationBar.addSubview(interstitialAdView)
        
        closeButton = UIButton(frame: CGRect(x: 15, y:  15, width: 20, height: 20))
        //add a cross shaped graphics into your project to use as close button
        closeButton.setBackgroundImage(UIImage(named: "close"), forState: UIControlState.Normal)
        closeButton.addTarget(self, action: Selector("close"), forControlEvents: UIControlEvents.TouchDown)
        
        self.navigationController?.navigationBar.addSubview(closeButton)
        
        interstitialAd.presentInView(interstitialAdView)
        UIViewController.prepareInterstitialAds()
    }
    
    func close() {
        interstitialAdView.removeFromSuperview()
        closeButton.removeFromSuperview()
        interstitialAd = nil
        UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)

        
    }
    
    func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {
        print("interstitialAdActionDidFinish")
        UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)
    }

    
    func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool {
        return true
    }
    
    func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
        print("didFailWithError")
    }
    
    func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {
        print("interstitialAdDidUnload")
        close()
    }

    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

}

更新: 可能你只需要在 class 的 viewDidLoad 中调用 : UIViewController.prepareInterstitialAds() 来下载插页式,因此无论何时您要求展示它都会准备就绪,然后可能不会延迟。