【问题标题】:adMob iOS resume (back to app button)adMob iOS 简历(返回应用按钮)
【发布时间】:2016-04-08 06:36:04
【问题描述】:

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

流程是:

  • 1 - 游戏开始
  • 2 - 展示广告
  • 3 - 点击横幅并暂停计时器
  • 4 - Opera safari
  • 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;
}

【问题讨论】:

  • 发布 AdMob 事件方法的代码,以便我们了解发生了什么。看起来事件正在返回应用程序,所以您需要应用程序委托方法而不是 AdMob 事件方法
  • @noobsmcgoobs 非常感谢您的回复/支持。我整夜都在上面。我编辑并添加了代码...
  • 我刚刚给出了答案。试一试,看看它是否适合你。如果没有,我可以提供另一个答案。
  • @noobsmcgoobs 天哪!
  • @noobsmcgoobs 但是否有对应于 -(void)bannerViewActionDidFinish:(ADBannerView *)banner 和 -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave 的内容?因为在 iAds 中我使用这种方法来暂停和重新启动计时器。 :(

标签: ios timer admob resume


【解决方案1】:

在这个 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]];

然后在viewDidAppear或者viewWillAppear之后,写这个函数

    - (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 在您的应用程序变为活动状态时自动调用(这是一个应用程序委托方法)。当它这样做时,方法(void)applicationDidBecomeActiveNotification 被自动调用并且该方法中的方法被调用。您有一个布尔标志来查看应用程序是否从 Safari 返回,因为如果用户在推送广告时切换到另一个应用程序,您的应用程序可能会从任何其他应用程序返回。最后,您将 VC 作为观察者移除以避免内存泄漏。

【讨论】:

  • 它就像一个魅力!你很棒!非常感谢...你摇滚! :)) 我会反复阅读你的解释,以了解它的工作方式。我希望修复你提到的“错误”流程不会很困难。
  • @frankypa 我为您节省了一些时间并更新了答案,因此您不必再读一遍。
  • 非常感谢!你很清楚,但我是 iOS 开发人员的新手和初级,我需要/喜欢理解这个理论。为你竖起大拇指,再次感谢! :))
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多