16

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

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

但是我找不到任何像样的文档。这个 Stack 问题让我再次想知道iPhone 上的 iAd 和 Admob 插页式集成

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

4

2 回答 2

20

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

视图控制器.h

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

-(void)showFullScreenAd;

视图控制器.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 添加参考

编辑: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,今天收到了回复

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

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

于 2013-12-31T14:19:48.160 回答
2

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

此实现使用 a Manual ADInterstitialPresentationPolicy,因此我们可以按自己的时间间隔展示插页式广告。手动展示您的插页式广告时,它不会使用自己的关闭按钮加载以自行关闭。因此,我所做的是创建一个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()
    }
于 2015-09-10T13:17:01.410 回答