使用iAd作为默认广告网络,如果iAd失败则使用AdMob

9

我用这种方式构建了我的应用程序,一切似乎都在更或多少地工作。听说iAd的填充率极低后,我决定这将是最好的方法,但我尝试搜索并没有找到其他人像这样在他们的应用程序中实现广告的记录。这是否违反了TOS?

6个回答

10
为什么不使用Adwhirl呢?它是一个很棒的SDK,可以满足您的需求。您可以为不同的广告网络设置优先级,并根据需要在运行时更改。它处理了所有有关广告请求失败或者优先级逻辑的问题,您不必担心这些。您只需创建一个Adwhirl视图并请求广告即可。Adwhirl会自动处理其余部分,包括适当的刷新。如果iAd第一次请求失败,然后显示了一个Admob广告,但下一个iAd成功加载,那么将显示iAd而不是Admob广告,前提是您将iAd设置为更高优先级的网络。 http://adwhirl.com

这是我决定采用的解决方案,但在我实施AdWhirl后出现了一些问题。最重要的是,应用程序在启动时会请求广告,然后失败,再也不会发出其他请求!经常情况下,我加载应用程序后,应用程序既不会进入adWhirlDidReceiveAd:也不会进入adWhirlDidFailToReceiveAd:。此外,我的iAd请求总是失败,所以我甚至无法看到我需要的广告框架,以便将广告视觉化地集成到我的应用程序中! - D-Nice
你的iAds填充率如何?你有收到广告吗? - Goles
Adwirl目前还不支持ARC。 - user4951
2
Adwirl自2013年10月被Google收购后不再受支持,现在Google推广AdMob。 - estemendoza
@estemendoza 这是正确的,不过我认为 AdWhirl 仍在运作。但你说得对,AdMob 及其调解库对于新项目来说更好。 - Jasarien

3
你是否通过将 visible 设置为 NO 来隐藏 ADBannerView?如果将 visible 设置为 NO,则 ADBannerView 将停止请求广告。要“隐藏” ADBannerView,你需要将其移动到屏幕外。

3

1

我有iAds和Admob。

我强烈建议先加载iAd,如果没有广告则使用admob。如果您获得广告,则iAd的ECPM要比admob高得多。请记住,iAd每30秒刷新一次,因此将多次调用未获取广告的方法。

我的应用程序已经获得批准,您可以获取它,章鱼神谕。 http://kurl.ws/Ay


非常感谢您提供的信息。屏幕上出现了两个AdMob广告,后来我意识到每30秒都会调用iAd失败方法,于是成功解决了这个问题。在iAd最初失败、您成功将AdMob广告放置在视图中之后,iAd是否会在此之后的某个时间成功呢?这种情况是否可能发生? - D-Nice
我想我会隐藏iAd视图,以防万一。 我可能会把iAd视图放回去并删除admob。 iAd会让你赚更多的钱。 - John Ballinger

1

你可以使用AdWhirl,它最好的教程在这里Tutorial


0
我最终采用了这个策略:
首先,我从故事板中创建了两个出口,一个是用于 ADBannerView 的,另一个是用于 GADBannerView 的。
@IBOutlet weak var iadBannerView: ADBannerView!
@IBOutlet weak var adMobBannerView: GADBannerView!

在你的viewDidLoad方法中,你可以这样做:
override func viewDidLoad() {
    super.viewDidLoad()
    self.iadBannerView.hidden = true
    self.adMobBannerView.hidden = true
    self.iadBannerView.delegate = self
    NSTimer.scheduledTimerWithTimeInterval(35, target: self, selector: Selector("dispalyGoogleBanner"), userInfo: nil, repeats: false)
}

所以在这里,您隐藏了两个横幅(如果您愿意,可以直接在Storyboard中完成)。然后您等待35秒钟才显示Google广告。因此,在显示Google广告之前,您基本上想要查看iAD是否可用。

这是用于显示Google横幅的方法:

 //MARK: - Google banner
    func dispalyGoogleBanner() {
        if !self.isDisplayIAD && !idDisplayADMob {
        idDisplayADMob = true
        self.adMobBannerView.adUnitID = kAdUnitID
        self.adMobBannerView.hidden = false
        self.adMobBannerView.rootViewController = self
        self.adMobBannerView.loadRequest(GADRequest())
        }
    }

因此,在显示 Google 横幅之前,我们确保 iAD 横幅和 adMob 横幅尚未显示。 如果是这种情况,那么我们可以发送请求以显示 ADMob 横幅。

这里是我对 ADBannerViewDelegate 的实现。

func bannerViewDidLoadAd(banner: ADBannerView!) {
        self.iadBannerView = banner
        self.iadBannerView.hidden = false
        self.adMobBannerView.hidden = true
        idDisplayADMob = false
        self.view.layoutIfNeeded()
    }

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError
        error: NSError!) {
            println(error)
            isDisplayIAD = false
            self.iadBannerView.hidden = true
            self.dispalyGoogleBanner()
    }

    func bannerViewActionDidFinish(banner: ADBannerView!) {
        self.iadBannerView = banner
        self.iadBannerView.hidden = true
        isDisplayIAD = false
        dispalyGoogleBanner()
    }

    func bannerViewWillLoadAd(banner: ADBannerView!) {
        //remove the google banner if displayed
        isDisplayIAD = true
        self.iadBannerView.hidden = false
        self.adMobBannerView.hidden = true
        idDisplayADMob = false
        self.view.layoutIfNeeded()
    }

我在这些代理中所做的基本上是检查iAD横幅是否可用,如果是这种情况,那么我将隐藏adMob横幅。如果iAD完成显示广告,则会调用ADMob横幅,请参见bannerViewActionDidFinish

您可以轻松地将此逻辑适应于您的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接