我和我的开发人员之前曾尝试在 iPhone 和 iPad 上加载插页式广告,但只能在 iPad 上运行。
在我们的测试过程中,我们发现 iPhone 不支持插页式广告,但自从 iOS7 发布以来,有些人现在说这是可能的。
但是我找不到任何像样的文档。这个 Stack 问题让我再次想知道iPhone 上的 iAd 和 Admob 插页式集成
那么,在 iPhone 上使用 iAd 可以实现全屏插页式广告吗?
我和我的开发人员之前曾尝试在 iPhone 和 iPad 上加载插页式广告,但只能在 iPad 上运行。
在我们的测试过程中,我们发现 iPhone 不支持插页式广告,但自从 iOS7 发布以来,有些人现在说这是可能的。
但是我找不到任何像样的文档。这个 Stack 问题让我再次想知道iPhone 上的 iAd 和 Admob 插页式集成
那么,在 iPhone 上使用 iAd 可以实现全屏插页式广告吗?
我也一直在等待 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 及更高版本,但目前填充率较低。
我原来的答案开始过时了,所以这里有一个更新的 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()
}