gpt4 book ai didi

ios - adMob iOS 恢复(返回应用程序按钮)

转载 作者:行者123 更新时间:2023-11-29 01:05:09 30 4
gpt4 key购买 nike

我有一个带计时器的小游戏。我正在实现 adMob 来获利,但在用户点击横幅并返回应用后,我无法重新启动计时器/广告。

流程是:

  • 1 - 游戏开始
  • 2 - 展示广告
  • 3 - 点击横幅并暂停计时器
  • 4 - 歌剧游猎
  • 5 - 点击“返回我的应用”链接/按钮(iOS 功能)
  • 6 - 返回应用并重新启动计时器(此处出现问题)

我已经实现了所有 adMob 事件方法(并插入重新启动计时器代码),但我无法摆脱这个问题。该代码之所以有效,是因为它适用于 iAds(我正在迁移到 adMob)。

感谢任何帮助。谢谢

编辑:这是代码:

    /// Tells the delegate an ad request loaded an ad.
- (void)adViewDidReceiveAd:(GADBannerView *)adView {
NSLog(@"adViewDidReceiveAd");
self.pauseTimer = NO;
}

/// Tells the delegate an ad request failed.
- (void)adView:(GADBannerView *)adView
didFailToReceiveAdWithError:(GADRequestError *)error {
NSLog(@"adView:didFailToReceiveAdWithError: %@", [error localizedDescription]);
self.pauseTimer = NO;
}

/// Tells the delegate that a full screen view will be presented in response
/// to the user clicking on an ad.
- (void)adViewWillPresentScreen:(GADBannerView *)adView {
NSLog(@"adViewWillPresentScreen");
self.pauseTimer = NO;
}

/// Tells the delegate that the full screen view will be dismissed.
- (void)adViewWillDismissScreen:(GADBannerView *)adView {
NSLog(@"adViewWillDismissScreen");
self.pauseTimer = NO;
}

/// Tells the delegate that the full screen view has been dismissed.
- (void)adViewDidDismissScreen:(GADBannerView *)adView {
NSLog(@"adViewDidDismissScreen");
self.pauseTimer = NO;
}

/// Tells the delegate that a user click will open another app (such as
/// the App Store), backgrounding the current app.
- (void)adViewWillLeaveApplication:(GADBannerView *)adView {
NSLog(@"adViewWillLeaveApplication");
self.pauseTimer = YES;
}

最佳答案

在这个VC中创建一个属性来存储这个

@property (nonatomic) BOOL didGoToSafari;

- (void)adViewWillLeaveApplication:(GADBannerView *)adView {
NSLog(@"adViewWillLeaveApplication");
self.pauseTimer = YES;
self.didGoToSafari = YES;
}

在广告将显示在 viewWillAppearviewDidAppear 之前显示的 VC 中,您应该放置此代码

  [[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(applicationDidBecomeActiveNotification:)
name:UIApplicationDidBecomeActiveNotification
object:[UIApplication sharedApplication]];

然后在viewDidAppearviewWillAppear之后,编写这个函数

    - (void)applicationDidBecomeActiveNotification:(NSNotification *)notification {

if (self.didGoToSafari = YES){

self.pauseTimer = NO;
self.didGoToSafari = NO;
}
}

viewWillDisappear

[[NSNotificationCenter defaultCenter] removeObserver:self                                  name:UIApplicationDidBecomeActiveNotification
object:[UIApplication sharedApplication]];

基本上,您所做的就是监听应用程序是否再次激活。如果是这样,请检查它是否从 Safari 中返回。它并不完美,因为您可能正在使用该应用程序,用户会转到 Safari,然后不会返回或关闭游戏。然后他们可以稍后使用 Safari,然后返回游戏,游戏就会重新开始运行。您可以使用 AppDelegate 中的一些控制流来围绕此进行编码,但通常此代码应该可以做到这一点。

编辑:根据您关于理解它的评论,这是完整的解释。

您正在使用NSNotification监听应用程序何时返回事件状态。当您的应用程序变为事件状态时,UIApplicationDidBecomeActiveNotification 会自动调用(它是一个应用程序委托(delegate)方法)。当它这样做时,方法 (void)applicationDidBecomeActiveNotification 被自动调用,并且该方法中的方法被调用。你有一个 bool 标志来查看应用程序是否从 Safari 返回,因为如果用户在推送广告时切换到另一个应用程序,你的应用程序可能会从任何其他应用程序返回。最后,您删除 VC 作为观察者以避免内存泄漏。

关于ios - adMob iOS 恢复(返回应用程序按钮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493093/

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