在每 x 次加载的 viewdidload 上显示插页式广告

Posted

技术标签:

【中文标题】在每 x 次加载的 viewdidload 上显示插页式广告【英文标题】:Showing interstitial ad on every x loads of viewdidload 【发布时间】:2018-12-10 09:30:45 【问题描述】:

我想弄清楚,在每 x 次 viewdidload 调用时显示一个插页式广告。 当我的 viewdidload 调用时,我正在加载该广告。但是我想加载它,当viewdidload调用x的时候。 任何帮助将不胜感激。这是我的代码;

    class DetailController: UIViewController, GADInterstitialDelegate 

    //Admob
    ...
    ...
    var fullScreenAds : GADInterstitial!

    //Interstitial-Ad
    func createAndLoadInterstitial() -> GADInterstitial? 
        fullScreenAds = GADInterstitial(adUnitID: myInterstitialID)
        guard let fullScreenAds = fullScreenAds else 
            return nil
        
        let request = GADRequest()
        request.testDevices = [ kGADSimulatorID ]
        fullScreenAds.load(request)
        fullScreenAds.delegate = self

        return fullScreenAds
    

    func interstitialDidReceiveAd(_ ad: GADInterstitial) 
        print("Ads loaded.")
        ad.present(fromRootViewController: self)
    

    func interstitialDidFail(toPresentScreen ad: GADInterstitial) 
        print("Ads not loaded.")
    

    //MARK: View functions
    override func viewDidLoad() 
        super.viewDidLoad()

        ......

        SVProgressHUD.show()
        imageView.af_setImage(withURL: URL(string: pic.largeImageURL!)!, placeholderImage: imgPlaceHolder, filter: nil, progress: nil, progressQueue: DispatchQueue.main, imageTransition: .crossDissolve(0.2), runImageTransitionIfCached: true)  (data) in
            SVProgressHUD.dismiss()
        

        scrollView.delegate = self
        setupScrollView()
        setupGestureRecognizers()
        setupBanner()

        self.fullScreenAds = createAndLoadInterstitial()
    

【问题讨论】:

您可以使用 UserDefaults 存储一个计数,然后检查它是否已达到限制,展示您的广告并重置计数 @sashatheitguy 你的意思是“每次 X 视图控制器加载后”吗? @LadumorDineshkumar 是的。 我之前没有使用过 UserDefaults。如果有例子。它会帮助我.. @Scriptable @sashatheitguy 检查我的答案。 【参考方案1】:

您可以使用UserDefaults 来存储每次加载视图时的计数。一旦达到其限制,重置计数并显示广告。

示例代码:

class ViewController: UIViewController 

    private let adFrequency = 5
    private let userDefaults: UserDefaults = .standard
    private let defaultsKey = "passwordScreenViewCount"

    override func viewDidLoad() 
        super.viewDidLoad()

        let count = userDefaults.integer(forKey: defaultsKey)
        if count + 1 >= adFrequency 
            userDefaults.set(0, forKey: defaultsKey)
            // show the ad
         else 
            userDefaults.set(count + 1, forKey: defaultsKey)
        
    

【讨论】:

【参考方案2】:

取1个全局变量viewDidLoadCount并设置为0。

假设您希望每 5 个viewDidLoad() 展示一次广告。所以,

在每个 viewDidLoad() 方法中将 viewDidLoadCount 增加 1 并检查

//取全局变量

var viewDidLoadCount : Int = 0
override func viewDidLoad() 
    super.viewDidLoad()

    viewDidLoadCount+=1
    if viewDidLoadCount == 5 
        //send post notification to your main viewcontroller in which you have done code of ad delegate.
    

【讨论】:

以上是关于在每 x 次加载的 viewdidload 上显示插页式广告的主要内容,如果未能解决你的问题,请参考以下文章

React Native 如何延迟加载图像

ARCgisEngine二次开发,输入坐标点,在axmapcontrol上显示?(vs2008)

归档数据,然后将其加载到 viewdidload

在 UIViewController 上加载数据:viewDidLoad 和 viewWillAppear - 啥是正确的逻辑?

Pan Segue 调用 viewDidLoad 循环

在 viewDidLoad 之后加载图像