【问题标题】:iAds interstitial adverts on iPhone?iPhone 上的 iAds 插页式广告?
【发布时间】:2013-12-23 10:31:38
【问题描述】:

我和我的开发人员之前曾尝试在 iPhone 和 iPad 上加载插页式广告,但只能在 iPad 上运行。

在我们的测试过程中,我们发现 iPhone 不支持插页式广告,但自从 iOS7 发布以来,现在有人说这是可能的。

但是我找不到任何像样的文档。尽管iAd & Admob Interstitial Integration on iPhone

,这个 Stack 问题让我再次感到疑惑

那么,在 iPhone 上使用 iAd 可以实现全屏插页式广告吗?

【问题讨论】:

  • 他们还不支持 iAds,但许多其他网络,如 Admob、Amazon 和 Chartboost。看看appodeal.com/+signup。在安卓上使用它,他们支付的平均有效每千次展示费用为 7-9 美元,并且支持插页式和插页式视频!

标签: iphone ipad iad interstitial


【解决方案1】:

我也一直在等待 iAd 的 iPhone 插页式广告。我终于将它实现到我的一个应用程序中,并且它正在运行并很好地显示测试广告。该应用程序目前正在审核中,一旦获得批准,我将更新我的答案,我可以测试是否正在投放任何实际广告。同时,这是我用来实现 iAd 插页式广告的代码:

ViewController.h

@interface ViewController : UIViewController <ADInterstitialAdDelegate> {
    ADInterstitialAd *interstitial;
    BOOL requestingAd;
}

-(void)showFullScreenAd;

ViewController.m

-(void)viewDidLoad {
    requestingAd = NO;
}

// Interstitial iAd
-(void)showFullScreenAd {
    // Check if already requesting ad
    if (requestingAd == NO) {
        [ADInterstitialAd release];
        interstitial = [[ADInterstitialAd alloc] init];
        interstitial.delegate = self;
        self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
        [self requestInterstitialAdPresentation];
        NSLog(@"interstitialAdREQUEST");
        requestingAd = YES;
    }
}

-(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAd didFailWithERROR");
    NSLog(@"%@", error);
}

-(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    NSLog(@"interstitialAdDidLOAD");
    if (interstitialAd != nil && interstitial != nil && requestingAd == YES) {
        [interstitial presentFromViewController:self];
        NSLog(@"interstitialAdDidPRESENT");
    }
}

-(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAdDidUNLOAD");
}

-(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd {
    interstitial = nil;
    [interstitialAd release];
    [ADInterstitialAd release];
    requestingAd = NO;
    NSLog(@"interstitialAdDidFINISH");
}

我只是在用户执行某个操作后调用-(void)showFullScreenAd。更多信息请参考UIViewController iAd Additions Reference

编辑:2014 年 1 月 3 日 应用更新已获批准,现已上线 12 小时。到目前为止,我还没有收到任何插页式 iAd。这可能是由于 iPhone 上的插页式广告库存不足,也可能与我在 iTunes Connect 上的 iAd 模块中收到的以下消息有关。消息内容为

当您提交您的应用 [app name] 以供批准时,iAd 还将对其在 App Network 上的使用进行审核,以确定其是否适合接收来自 iAd 广告商的广告。一旦您的应用获得批准,您就可以开始通过在您的应用中投放的广告赚取收入了。

我以前从未收到过此消息,我通常会在 App Store 发布更新后立即收到“您的应用现在有资格接收广告”消息。要么是因为在我的应用中新实施了插页式广告,要么是 Apple 更新了一些 iAd 程序。

如果我开始接收插页式 iAd,我会再次更新答案。同时,您可以在我的应用程序+Quotes 上自己进行测试。上面的代码被调用,一旦用户在应用内通过 Facebook 分享,就会显示一个插页式广告。

编辑:2014 年 1 月 7 日 今天直接联系了iAd并收到了回复

你好丹尼尔, 初始填充率将反映最近在 iOS 7 上推出的插页式广告。感谢您在我们增加广告投放时的耐心等待。 如果您还没有,我们建议您在您的应用程序中集成标准纵向和横向 iAd 横幅,以利用所有可用类型的广告资源。 最后,为了将来参考,当您提交您的应用程序以供批准时,iAd 还将对其进行审核,以确定其是否适合接收来自 iAd 广告商的广告。因此,您的新启用 iAd 的应用可能需要几天时间才能开始获得广告展示。 最好的祝福,  iAd 应用网络支持

因此,适用于 iPhone 的插页式 iAd 确实适用于 iOS 7.0 及更高版本,但目前填充率较低。

【讨论】:

  • 代码只有iOS7吗?期待在您的应用上线后看到您的更新。
  • @Buckers 是的,新增的 iAd 需要 iOS 7.0 或更高版本,此处注明UIViewController iAd Additions Reference
  • @DanielStormApps 这几乎可以工作,只是 [interstitial presentFromViewController:self]; 自 iOS7 以来已被弃用。改用[interstitial presentInView:self.view];
  • 在调用广告完成代理时还有其他人黑屏吗?
  • @DanielStormApps 谢谢,但这并不能解决问题,只是解决方法
【解决方案2】:

我原来的答案开始过时了,所以这里有一个更新的 Swift 实现:

此实现使用ManualADInterstitialPresentationPolicy,因此我们可以按自己的时间间隔展示插页式广告。手动展示您的插页式广告时,它不会使用自己的关闭按钮加载以自行关闭。所以,我所做的是创建一个UIView 来展示插页式广告,并使用插页式广告的委托方法来关闭UIView。测试时仍然会出现从 iAd 网络接收广告的不一致。有时您会收到一个广告,有时它无法加载,这使我们可以请求一个新广告,有时什么也没有发生。这似乎是 iAd 插页式广告的本质。

import UIKit
import iAd // Import iAd

class ViewController: UIViewController, ADInterstitialAdDelegate { // Include the delegate

    var iAdInterstitial = ADInterstitialAd() // Our ad
    var iAdInterstitialView = UIView() // View to present our ad in
    var adLoaded = false // Bool to keep track if an ad is loaded or not

    override func viewDidLoad() {
        super.viewDidLoad()
        setupAd()
    }

    func setupAd() {
        // Set presentation to manual so we can choose when to present the interstitial
        // Setting this will also fetch an interstitial ad for us
        self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Manual
        iAdInterstitial.delegate = self // Set the delegate

        // Make our view the same size as the view we will be presenting in
        iAdInterstitialView.frame = self.view.bounds
    }

    func requestNewAd() {
        // This will fetch an ad for us
        ViewController.prepareInterstitialAds()
        println("Requesting new ad")
    }

    @IBAction func presentAdButton(sender: AnyObject) {
        if (adLoaded) {
            // We have an ad that is loaded so lets present it
            self.view.addSubview(iAdInterstitialView)
            iAdInterstitial.presentInView(iAdInterstitialView)
        }
        else {
            // No ad has been loaded
            println("Ad not loaded")
        }
    }

    func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {
        // Kinda works as expected
        // Sometimes is called prematurely
        // Sometimes takes minutes after ad is dismissed to be called
        println("interstitialAdDidUnload")

        // Get new ad
        adLoaded = false
        iAdInterstitialView.removeFromSuperview()
        requestNewAd()
    }

    func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
        // Failed to load ad so lets try again
        println("didFailWithError: \(error)")
        requestNewAd()
    }

    func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) {
        // There is an ad and it has begun to download
        println("interstitialAdWillLoad")
    }

    func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {
        // We got an ad
        println("interstitialAdDidLoad")
        adLoaded = true
    }

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

    func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {
        // Done with this ad. Lets get a new one
        println("interstitialAdActionDidFinish")
        iAdInterstitialView.removeFromSuperview()
        adLoaded = false
        requestNewAd()
    }

【讨论】:

  • 我使用上面的代码但总是得到错误消息 didFailWithError: Error Domain=ADErrorDomain Code=3 "操作无法完成。广告库存不可用" UserInfo=0x7fe5584be760 {ADInternalErrorCode=3, NSLocalizedFailureReason=Ad库存不可用,ADInternalErrorDomain=ADErrorDomain} 请求新广告 广告未加载-------- 我启用设置//开发者//填充率始终为 100%
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多