当前位置: 首页 > 知识库问答 >
问题:

间歇性iAD:如何检测关闭iOS8?

呼延渝
2023-03-14

我们显示了水平之间的间隙IAD。由于iAd似乎需要相当多的内存(我们过去在显示时会收到许多内存警告,并且遇到一些崩溃),因此在间隙关闭之前,我们不会加载新视图(因此,我们首先卸载游戏视图,然后显示间隙,然后加载游戏视图)。

为此,我们使用了旧的/不推荐的方式来展示插页:

>

  • 分配ADINTERSTIIALAD并设置委托

    _interstitial = [[ADInterstitialAd alloc] init];
    _interstitial.delegate = self;
    

    准备好后,在某些viewcontroller中显示广告:

    [_interstitial presentFromViewController:_rootViewController];
    

    聆听学员的方法,以检测用户何时关闭间隙广告:

    - (void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
    {
        [self proceedToNextLevel];
    }
    

    这在iOS 7中曾经适用。然而,在iOS8中,虽然调用了大多数委托函数,但不会调用InterstitalAdactionDidFinish(InterstitalAddidUnload会被调用,但只会在5分钟后调用)。

    因此,似乎有了一些通过UIViewController上的类别显示中间广告的新方法:https://developer.apple.com/library/ios/documentation/iAd/Reference/UIViewController_iAd_Additions/index.html#//apple_ref/occ/instm/UIViewController/shouldPresentInterstitialAd

    所以新的方法是:

    >

  • 通过静态方法调用准备广告:

    [UIViewController prepareInterstitialAds];
    

    准备就绪后,请求显示广告:

    _rootViewController.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
    [_rootViewController requestInterstitialAdPresentation];
    

    这确实显示了间隙-但是,由于不再有委托,因此无法判断用户何时关闭间隙。

    所以问题是:在iOS8(也兼容iOS7)上,我们如何判断用户何时关闭了间隙广告?

    //编辑:我还试图查询

        viewController.isPresentingFullScreenAd
    

    重复使用计时器,但虽然这在iOS 7上有效,但在iOS 8上,即使在用户关闭间隙广告后,属性也始终返回true

  • 共有1个答案

    胥诚
    2023-03-14

    当一个间歇性的iAd关闭时,在您的VC中会调用viewDidEmerar。

    下面是我如何实现。。。

    当我想显示广告时,我会从我的SKScene调用以下代码。

        MyScene.m
    
        if ([viewController showIAd]) // attempting to show an ad
        {
            NSLog(@"showIAd returned YES, ad shown");
            // Do nothing.  Wait for viewDidAppear to be called.
        }
        else
        {
            // No ad was ready, do what needs to happen after ad.
        }
    

    当显示iAd时,我设置了一个名为currentlyShowingAnIAd的布尔值。当viewDidAppear运行时,它知道它是从广告返回的。

    viewController.m
    
    -(void)viewDidAppear:(BOOL)animated
    {
        NSLog(@"viewDidAppear");
    
        if (self.currentlyShowingAnIAd)
        {
            self.currentlyShowingAnIAd = NO;
    
            // Do what needs to happen after ad.
        }
    }
    
    -(BOOL)showIAd
    {
        NSLog(@"showIAd method run");
        self.currentlyShowingAnIAd = [self requestInterstitialAdPresentation];
        return self.currentlyShowingAnIAd;
    }
    

    希望这有帮助:)

     类似资料:
    • 我正在我的项目中实施间隙IAD。每场比赛后,我都会尝试显示一个中间广告。然而,在我的测试中,我得到一个错误,即大约10场比赛后,中间广告太多了。如何删除这些插入式广告? 代码: 此外,我还试图在每次比赛结束后播放一则插播广告。然而,有时没有显示广告,我认为这是正常的,因为广告库存可能并不总是可用的。因此,游戏通常在结束时不显示广告。 是否有一种方法,我可以检测到是否不会显示间隙广告,以便我可以使用

    • 问题内容: 我正在尝试在我的c程序中检测从Linux关闭或重新启动。我发现程序可以使用signal(SIGTERM,handler)(SIGKILL,handler)。但是,如果用户也使用命令杀死该进程,这两个触发器也会触发。 他们说,在某些解决方案中,可以使用运行级别,但无法运行。在系统初始化运行级别之前,不知道该进程是否被杀死。我什至尝试将脚本放在rcx.d中,但仍然无法正常工作。 有人建议吗

    • 我有显示iBeacon信息的文本视图(例如uuid、major、minor等)和一个用于启动/停止扫描的检测/停止按钮。当我在iBeacon关闭的情况下按下按钮开始扫描时,应用程序没有显示预期的内容。但是,当我在iBeacon打开时开始扫描,然后在扫描时关闭iBeacon时,应用程序仍会显示信息,就好像它仍在检测iBeacon一样。当应用程序在信标打开的情况下扫描BLE时,它会给出 D/Bluet

    • 问题内容: 我有一个通过Apache https proxypass在Tomcat上运行的Java Spring Web应用程序,当它尝试访问安全的IBM Watson服务时间歇性地失败。Apache通过LetsEncrypt证书进行安全保护,该证书重定向到Tomcat端口8080。 环境: Java:jdk1.7.0_80 Solaris 10 Tomcat 8.0.33 Apache2.4.1

    • 我已经编写了一个程序,从usb摄像头捕获图像,并根据检测到的每帧颜色跟踪对象的位置。间歇性(可能在1分钟、10分钟或半小时后发生)我收到错误消息: 我遵循的流程是: 用相机拍摄一帧,cap=cv2。视频捕获(1)/cap。read() 变换几何,cv2。透视图 高斯模糊滤波器,cv2。高斯模糊 BGR到HSV转换,cv2。CVT彩色(模糊帧,cv2.COLOR\u BGR2HSV) 轮廓发现和分析

    • 我对Java还很陌生,我试着查了一下,但没有找到任何有用的东西。我想知道我怎么能检测到一个特定的窗口关闭了?我一直在使用windowClosing(),但这适用于关闭的任何窗口,因此如果窗口B关闭,我希望由于窗口a关闭而发生的事件也会发生。我如何只在窗口A关闭的情况下进行检测?抱歉,如果这是一个糟糕的措辞,我不知道那么多Java术语。提前致谢:)