【问题标题】:Interstitial iAd delayed after pressing button按下按钮后插页式 iAd 延迟
【发布时间】:2016-01-10 11:08:21
【问题描述】:

单击 JSSAlert 上的取消按钮后,我正在尝试设置 iAd。我在 JSSAlert 函数中设置了完整视图 0.7 的 alpha .. 在视图控制器中我有 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

【问题讨论】:

  • 您正在使用 ADInterstitialPresentationPolicy.Automatic 方法,该方法会请求广告(如果可用)然后显示它,因此该过程需要时间。
  • 什么更好用?
  • 请检查我的答案,我给了你两种测试方法。

标签: swift delay iad interstitial


【解决方案1】:

更新:

iAd 应用网络关闭截至 2016 年 12 月 31 日,iAd 应用网络 不再被提供。如果您想推广您的应用,您可以 使用 Search Ads、Apple News 或第三方网络投放广告,以及 广告卖家。

参考: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.
    }

}

更新:您可能只需要在您班级的viewDidLoad 中致电:UIViewController.prepareInterstitialAds() 即可下载插页式广告的内容,这样每当您要求展示时,它就会准备就绪,然后可能不会耽误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2023-03-25
    • 2012-10-14
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多