Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iAd间质异常行为_Ios_Ios7_Ios8_Iad_Interstitial - Fatal编程技术网

Ios iAd间质异常行为

Ios iAd间质异常行为,ios,ios7,ios8,iad,interstitial,Ios,Ios7,Ios8,Iad,Interstitial,我在ios7和ios8中都遇到了一些奇怪的行为 有时会出现全屏显示X(POTRAIT全屏广告-我的应用程序仅适用于横向)。你点击X,你就可以回到我的菜单了 但有时广告会显示没有X(横向全屏广告)。如果您等待didfish则不会调用委托。然后我试着点击它离开。然后显示另一个带有X(横向全屏广告)的广告。因此,我点击X,然后转到另一个广告(横向全屏广告),在那里调用didfish。iOS7它会在第三个广告上冻结。ios8会显示第三个广告一秒钟,然后进入黑屏吗?有人处理过这样的事情吗 不确定当第一个广

我在ios7和ios8中都遇到了一些奇怪的行为

有时会出现全屏显示X(POTRAIT全屏广告-我的应用程序仅适用于横向)。你点击X,你就可以回到我的菜单了

但有时广告会显示没有X(横向全屏广告)。如果您等待
didfish
则不会调用委托。然后我试着点击它离开。然后显示另一个带有X(横向全屏广告)的广告。因此,我点击X,然后转到另一个广告(横向全屏广告),在那里调用
didfish
。iOS7它会在第三个广告上冻结。ios8会显示第三个广告一秒钟,然后进入黑屏吗?有人处理过这样的事情吗

不确定当第一个广告以纵向显示时,它是否工作正常,是否有线索

此外,显示的多个广告都是iAd,而不是rev mob和iAd的组合,因为我有100%的iAd填充率。目前,我只是想让iAds的全屏广告始终如一地发挥作用

我知道代理被设置为
didLoad
代理在ad加载时被调用 这也是iPhone和iPad的一个问题

还有其他人有这些问题吗

使用

[interstitial presentFromViewController:self];
而不是

[interstitial presentInView:self.view];
使一切正常工作..但是现在不推荐使用
presentFromViewController:

这是我使用的代码

-(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;
    requestingAd = NO;
    NSLog(@"interstitialAd didFailWithERROR");
    NSLog(@"%@", error);

    [revmobFS loadWithSuccessHandler:^(RevMobFullscreen *fs) {
        [fs showAd];
        NSLog(@"Ad loaded");
    } andLoadFailHandler:^(RevMobFullscreen *fs, NSError *error) {
        NSLog(@"Ad error: %@",error);
    } onClickHandler:^{
        NSLog(@"Ad clicked");
    } onCloseHandler:^{
        NSLog(@"Ad closed");
    }];
}

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

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

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

如果有人能在那里发布代码,让我在那里的应用程序中充分发挥作用,我也会获得+50的声誉

我这边没有有效的代码,但我查看了文档,找到了UIViewController与iAd方法的分类

看起来您正在将旧代码与新代码混合

根据我所看到的情况,我建议:

        -(void)showFullScreenAd {
        //Check if already requesting ad
        if (requestingAd == NO) {
            [self requestInterstitialAdPresentation];
            requestingAd = YES;
        }
    }

    -(void)viewDidLoad()
{
    [super viewDidLoad];
// Any other setup.
 self.ADInterstitialPresentationPolicy = ADInterstitialPresentationPolicyManual

}
这遵循新的iOS7实现。在viewDidLoad方法中设置策略允许框架预缓存资产并开始从iAd服务器获取任何广告。准备好了,所以当调用“showFullScreenAd”方法时,广告应该准备好了

在加载视图或执行其他数据任务时,还可以调用类方法
+(void)prepareInterstitalADS
,这使框架可以预缓存资产(如果可以的话),这意味着后续请求会更快

对于ad失败时的RevMob处理:
[self-RequestInterstitalAdPresentation]
返回一个布尔值,这意味着您可以处理它并告诉RevMob它失败了,等等,以确定广告何时关闭。最好在ViewController的
presentingFullScreenAd
属性上执行一些KVO。这说明它是否在播放全屏广告,我相信这只是iAd,全屏广告

之所以会有如此不同的结果,是因为在同一视图控制器中有两种方式可以请求和显示广告

当广告呈现为纵向时,
[自我请求间隙显示]检索ad失败,但ADINTERSTIIALAD实例的实例化已发送另一个请求。这已经加载,因为您没有为实例的视图设置框架,它不知道它是横向的,因此会显示一个纵向版本。由于这现在在视图中显示,视图不知道/不关心它的方向,因此根据其几何图形显示广告视图

当它是由
[自我请求中间层表示]构成的横向视图时成功。那个顶级广告就是这个电话的广告。我不知道为什么广告的其余部分会显示出来,除非这是来自框架的东西,即[自我要求的中间层展示];内部决定它必须是ViewController布局中的横向,因此所有后续的广告请求都符合此要求,除非VC方向再次更改

[编辑]-我已经拼凑了一个基本的例子。这是从内存/文档中完成的,因此可能不会100%正确,并且很可能无法直接复制和粘贴。这是为了给出一个想法,其中还包括对iOS7之前版本的支持

//.h 

@import UIKit;
@import iAd;

@interface MyInterstitialViewController : UIViewController <ADInterstitialAdDelegate>
{

}
@property (strong) ADInterstitialAd *fullScreenAd;

@end

//.m

#include MyInterstitialViewController.h

@implementation MyInterstitialViewController
{
    - (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
    {
        if(self = [super initWithNibName:nibName bundle:nibBundle])
        {

        }
        return self;
    }


    -(void)viewDidLoad()
    {
        [super viewDidLoad];

        if([self respondsToSelector:@selector(requestInterstitialAdPresentation)] == YES)
        {
            self.ADInterstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
        }
    }

    -(void)viewWillDisappear
    {
        @try 
        {
                    **[self  removeObserver:self forKeyPath:@"isPresentingFullScreenAd"];**
                }
                @catch (NSException * __unused exception) 
        {
        }
    }

    -(void)showFullScreenAd()
    {
        if([self respondsToSelector:@selector(requestInterstitialAdPresentation)] == NO)
        {
            self.fullScreenAd = [[ADInterstitialAd alloc] init];
            self.fullScreenAd.delegate = self;
        }
        else
        {
            if([self requestInterstitialAdPresentation] == NO)
            {
                //Report back to RevMob Controller that the Ad Failed.
                [revmobFS loadWithSuccessHandler:^(RevMobFullscreen *fs) 
                { 
                    [fs showAd]; 
                    NSLog(@"Ad loaded"); 
                } andLoadFailHandler:^(RevMobFullscreen *fs, NSError *error) 
                { 
                    NSLog(@"Ad error: %@",error); 
                } onClickHandler:^{
                    NSLog(@"Ad clicked"); 
                } onCloseHandler:^{
                    NSLog(@"Ad closed"); 
                }]; 
            }
            else
            {
                **[self addObserver:self forKeyPath:@"isPresentingFullScreenAd" options:NSKeyValueObservingOptions.NSKeyValueObservingOptionNew context:nil];**
            }
        }
    }

//ADInterstitialAd Delegate Methods.
-(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error 
{
    interstitial = nil; 
    NSLog(@"interstitialAd didFailWithERROR"); 
    NSLog(@"%@", error); 
    [revmobFS loadWithSuccessHandler:^(RevMobFullscreen *fs) 
        { 
            [fs showAd]; 
            NSLog(@"Ad loaded"); 
        } andLoadFailHandler:^(RevMobFullscreen *fs, NSError *error) 
        { 
            NSLog(@"Ad error: %@",error); 
        } onClickHandler:^{
            NSLog(@"Ad clicked"); 
        } onCloseHandler:^{
            NSLog(@"Ad closed"); 
        }]; 
} 
-(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd 
{
    NSLog(@"interstitialAdDidLOAD"); 
    if (self.fullScreenAd != nil) 
    { 
                   CGRect interstitialFrame = self.view.bounds;
 interstitialFrame.origin = self.view.origin;
 UIView *view = [[UIView alloc] initWithFrame:interstitialFrame];
 [self.view addSubview:view];
[self.fullScreenAd presentInView:view];


        NSLog(@"interstitialAdDidPRESENT"); 
    }//end if
}
-(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd 
{
    NSLog(@"interstitialAdDidUNLOAD");
}
-(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
{
    NSLog(@"interstitialAdDidFINISH"); 
}


//KVO Responding

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    **if([keyPath isEqualTo:"isPresentingFullScreenAd"] == YES)
    {
        if([object === self])
        {
          if([self isPresentingFullScreenAd] == false)
          {
             //Handle logic for your app. New Screen etc.
          }
          else
          {
            //Handle logic for your app. Pause current activity etc.
          }
        }
    }**
}

}
/.h
@进口UIKit;
@进口iAd;
@接口MyViewController:UIViewController
{
}
@属性(强)ADINTERSTIIALAD*全屏显示;
@结束
//m
#包括MyInterstitutionalviewcontroller.h
@实现myalviewcontroller
{
-(instancetype)initWithNibName:(NSString*)nibName绑定:(NSBundle*)nibBundle
{
if(self=[super initWithNibName:nibName bundle:nibBundle])
{
}
回归自我;
}
-(void)viewDidLoad()
{
[超级视图下载];
if([self-respondsToSelector:@selector(requestInterstitalAdPresentation)]==YES)
{
self.adInterstitualPresentationPolicy=adInterstitualPresentationPolicyManual;
}
}
-(无效)视图将消失
{
@试一试
{
**[self-removeObserver:self-forKeyPath:@“isPresentingFullScreenAd”]**
}
@捕获(NSException*\uu未使用的异常)
{
}
}
-(无效)showFullScreenAd()
{
if([self-respondsToSelector:@selector(requestInterstitulardPresentation)]==否)
{
self.fullScreenAd=[[ADINTERSTIIALAD alloc]init];
self.fullScreenAd.delegate=self;
}
其他的
{
如果([self-RequestInterstitalAddPresentation]==否)
{
//向RevMob控制器报告Ad失败。
[revmobFS loadWithSuccessHandler:^(RevMobFullscreen*fs)
{ 
[fs showAd];
NSLog(@“Ad加载”);
}andLoadFailHandler:^(RevMobFullscreen*fs,N错误*错误)
{ 
NSLog(@“Ad错误:%@”,错误);
}onClickHandler:^{
NSLog(@“点击广告”);
}onCloseHandler:^{
NSLog(@“Ad关闭”);