gpt4 book ai didi

ios - interstitialAd - iOS 8 beta 5 不在模拟器中提供 X 关闭按钮

转载 作者:行者123 更新时间:2023-11-28 09:20:16 27 4
gpt4 key购买 nike

我对 Apple 的插页式广告有疑问。我正在 swift 开发我的第一个应用程序,我想尽快把它放到 App store 上。但是当我将插页式广告的代码从 obejctive-c 重写为 swift 时,我能够显示广告,但我没有 X 关闭按钮,所以我无法关闭它。我没有找到任何地方,我应该自己放置这个按钮,默认情况下它应该在那里。我正在使用这个功能:(我还不得不说,我正在使用 sprite kit,所以我的 View Controller 会自动将游戏重定向到 Gamescene)

func showFullScreenAd() { 

if requestingAd == false {

interstitial = ADInterstitialAd()
interstitial!.delegate = self

requestingAd = true

}

}

func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
self.interstitial = nil
requestingAd = false

}

func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {

if interstitialAd != nil && self.interstitial != nil && self.requestingAd == true {

interstitial!.presentInView(self.view)

}
}
func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {
interstitial = nil
requestingAd = false
}
func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {
interstitial = nil
requestingAd = false
}

谢谢帮助(这里是图片:http://imgur.com/jKTWRiG)

-----更新-----这是解决方案,可以正常工作。我制作了 UIView,其中我展示了广告和关闭按钮(背景上有一些交叉图像)。这可能不是最好的解决方案,但应用商店接受了,soooo :D

所有这些功能都放在 GameViewController.swift 中(你不能简单地从 spritekit 场景控制 View Controller ,你可以通过 gameviewcontroller 的单例,这取决于你)

func showFullScreenAd() { 

if requestingAd == false {

interstitial = ADInterstitialAd()
interstitial!.delegate = self

requestingAd = true

}

}
func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
self.interstitial = nil
requestingAd = false

}

func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {

if interstitialAd != nil && _interstitial != nil && requestingAd == true {

self._adView = UIView()
self._adView!.frame = self.view.bounds
self.view.addSubview(_adView!)

self.button = UIButton(frame: CGRect(x: 10, y: 10, width: 40, height: 40))
self.button!.setBackgroundImage(UIImage(named: "close_button"), forState: UIControlState.Normal)
self.button!.addTarget(self, action: Selector("close"), forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(button!)

_interstitial!.presentInView(self._adView)
requestingAd = false
}
UIViewController.prepareInterstitialAds()
}
func close() {

self._adView!.removeFromSuperview()
self.button!.removeFromSuperview()
self._interstitial = nil

}

func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {
interstitial = nil
requestingAd = false
self._adView!.removeFromSuperview()
self.button!.removeFromSuperview()
}
func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {
interstitial = nil
requestingAd = false
self._adView!.removeFromSuperview()
self.button!.removeFromSuperview()
}

最佳答案

iOS 9.2.1,Xcode 7.2.1,启用 ARC

我用的是老方法:

[interstitial presentFromViewController:self];

否则,状态栏仍然使用容器 View 显示在 View 中,并且没有“X”按钮,或者您使用 Apple 建议的方法没有回调,即:

[self requestInterstitialAdPresentation];
[interstitial presentInView:self.view];

如果它困扰你,你可以抑制警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

//method goes here

#pragma clang diagnostic pop

请阅读这篇文章:iOS 7 iAd interstitial ads can not be closed by user

我所做的是将演示文稿包含在这样的方法中,在某些条件下添加一些润色:

*.h

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>
#import <AssetsLibrary/AssetsLibrary.h>

@interface MainViewController : UIViewController <ADInterstitialAdDelegate>
{
ADInterstitialAd *interstitial;
}

@end

*.m

- (void)viewDidLoad
{
[super viewDidLoad];

[UIViewController prepareInterstitialAds];
self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;

interstitial = [[ADInterstitialAd alloc] init];
interstitial.delegate = self;
}

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

- (void)presentInterlude
{
if (interstitial.loaded && [self shouldPresentInterstitialAd])
{
[interstitial presentFromViewController:self];
}
else
{
nil;
}
}

#pragma clang diagnostic pop

- (void)cycleInterstitial
{
interstitial.delegate = nil;
interstitial = [[ADInterstitialAd alloc] init];
interstitial.delegate = self;
}

- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd
{
NSLog(@"loaded");
nil;
}

- (void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd
{
NSLog(@"unloaded");

[self cycleInterstitial];
}

- (void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error
{
NSLog(@"failed, error: %@", error);

[self cycleInterstitial];
}

- (void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
{
NSLog(@"finish");
}

- (BOOL)interstitialAdActionShouldBegin:(ADInterstitialAd *)interstitialAd willLeaveApplication:(BOOL)willLeave
{
NSLog(@"action");

return true;
}

@end

然后在您准备好展示插页式广告时使用[self presentInterlude]

要使用“X”按钮(无需用户单击广告内容)告知广告何时显示以及广告何时关闭,您必须利用广告显示 viewDidDissapear 的事实: 被调用,当广告关闭时 viewDidAppear: 被调用。如果您有一些内容需要在调用 viewDidAppear: 之前准备好,请使用 viewWillAppear: 方法。

不要忘记在每次呈现后循环插页,插页广告对象在呈现后释放,这是插页式广告与横幅广告最大的区别。

如果有人有更好的解决方案,请分享并发布!

谢谢!干杯。

关于ios - interstitialAd - iOS 8 beta 5 不在模拟器中提供 X 关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25285344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com