我和我的开发者之前曾试图在iPhone和iPad上加载插屏广告,但只能在iPad上使用。
在测试期间,我们发现iPhone不支持插屏广告,但自iOS7发布以来,有些人现在说这是可能的。
然而,我找不到任何合适的文档。不过,这个Stack问题让我再次思考 iAd& Admob在iPhone上的插屏整合
那么,使用iAd在iPhone上可以实现全屏插屏广告吗?
我和我的开发者之前曾试图在iPhone和iPad上加载插屏广告,但只能在iPad上使用。
在测试期间,我们发现iPhone不支持插屏广告,但自iOS7发布以来,有些人现在说这是可能的。
然而,我找不到任何合适的文档。不过,这个Stack问题让我再次思考 iAd& Admob在iPhone上的插屏整合
那么,使用iAd在iPhone上可以实现全屏插屏广告吗?
我也一直在等待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
编辑:01/03/14 该应用程序更新已经获得批准并已上线12个小时。截至目前,我尚未收到任何插页式iAd。这可能是由于iPhone上缺乏插页式广告库存,也可能与我在iTunes Connect的iAd模块中收到的以下消息有关。消息如下:
当您提交要审核的应用程序[app name]时,iAd还将审核其在App网络上的使用情况,以确定其是否适合从iAd广告商那里接收广告。一旦您的应用程序获得批准,您就可以开始为在您的应用程序中运行的广告赚取收入。
我以前从未收到过这个消息,通常只要更新发布到App Store中,就会收到“您的应用现在有资格接收广告”的消息。这可能是由于我在应用程序中新实现了插页式广告,或者苹果已经更新了其iAd程序之一。
如果我开始接收插页式iAd,我会再次更新答案。在此期间,您可以在我的应用程序+Quotes上测试它。以上代码被调用,用户在应用程序内通过Facebook分享后将显示插页式广告。
编辑:01/07/14 直接联系iAd并于今日收到回复:
你好Daniel, 初始填充率将反映iOS 7上插页式的最新发布。感谢您的耐心等待,因为我们不断增加广告服务。 如果您尚未这样做,请将标准纵向和横向iAd横幅集成到应用程序中,以利用所有可用类型的广告库存。 最后,供参考,当您提交应用程序以供审核时,iAd还将对其进行审查,以确定是否适合从iAd广告商那里接收广告。因此,您的新iAd启用应用程序可能需要几天时间才能开始接收广告展示。 最好的祝福, iAd应用网络支持
因此,iPhone的插页式iAd确实与iOS 7.0及以上版本兼容,但目前填充率较低。
[interstitial presentFromViewController:self];
自 iOS7 起已经被弃用了。请使用 [interstitial presentInView:self.view];
代替。 - zero3nnaCode=3 "The operation couldn’t be completed. Ad inventory unavailable"
有什么想法吗? - user2876115我的原始答案已经过时了,这里有一个更新的Swift实现:
此实现使用手动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()
}