applicationDidBecomeActive 未在 Cordova 应用程序中触发

Posted

技术标签:

【中文标题】applicationDidBecomeActive 未在 Cordova 应用程序中触发【英文标题】:applicationDidBecomeActive not firing in Cordova app 【发布时间】:2016-06-03 14:25:40 【问题描述】:

我正在尝试将 Facebook SDK 添加到我的 Cordova 应用程序以跟踪安装。在Facebook App Ads Setup 中,他们要求您添加

- (void)applicationDidBecomeActive:(UIApplication *)application 
    [FBSDKAppEvents activateApp];

我将代码的 sn-p 添加到我的 AppDelegate.m 并包含一个 NSLog 并且它从未被调用。任何帮助将不胜感激。

【问题讨论】:

您是否尝试在其他应用程序委托方法中包含 NSLog,例如:applicationDidFinishLaunching 并查看是否调用了它们中的任何一个? 是的,我向 applicationDidFinishLaunching 添加了一个日志,它被调用了,如果我移动 Facebook sn-p 也会被调用。我只是担心偏离 Facebook 的说明是否合适。 【参考方案1】:

我已经找到了解决这个问题的方法,或者至少找到了一些系统响应者可能无法在 Cordova 项目中启动的原因:

如果您使用扩展 AppDelegate 的插件来访问生命周期响应器 in ios,您可能不知道,其他一些组件也扩展了 AppDelegate 并且已经在使用此响应器,这会使您的响应器无法访问实施。

就我而言: 我正在制作一个委托,在制作快照并将应用程序发送到后台之前模糊屏幕以隐藏敏感的个人数据,我需要添加一些代码来

- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application

我没有得到DidBecomeActive 的任何回复,即使我只是想NSLog 一些东西。我在项目中搜索了DidBecomeActive 键,似乎FirebasePlugin 已经在将此方法用于其他一些东西(这个插件是由另一个人添加到项目中的,所以我不知道它是如何工作的)。 我所做的只是将我的代码移动到 Firebase 插件并实现缺少响应者,因为我总共只有大约 10 行代码。

【讨论】:

我对 FirebasePlugin 有同样的问题,但我不想更改插件代码,所以我真的不知道如何解决这个问题。有没有办法使用监听器而不是重写方法? @santi 您正在寻找答案的问题是如何从多个类同时附加到应用程序状态响应程序。根据我尝试解决此问题时的经验,没有任何问题,或者至少我还没有找到。【参考方案2】:

applicationDidBecomeActive 方法在应用从后台过渡到前台时调用。当用户接到电话、短信等或按下主页按钮时,应用程序会进入后台(以节省电池等);通话结束或多任务处理后,应用程序再次激活。然后调用 applicationDidBecomeActive 方法。它应该主要用于刷新表格视图等。

这是相同方法的 Apple 文档。

调用此方法是为了让您的应用知道它已从 非活动到活动状态。这可能是因为您的应用程序已启动 由用户或系统。应用程序也可以返回到活动状态,如果 用户选择忽略中断(例如来电 电话或短信)将应用程序暂时发送到非活动状态 状态。

您应该使用此方法重新启动任何暂停的任务(或 尚未启动),而应用程序处于非活动状态。例如,您可以 使用它来重新启动计时器或加速 OpenGL ES 帧速率。如果你的 应用程序之前在后台,你也可以用它来刷新 您应用的用户界面。

正在发生的事情完全正常,Facebook 广告应该可以正常工作。

请参阅以下文档以更深入地了解 iOS 应用生命周期和应用委托方法。

The App Life Cycle

UIApplicationDelegate

【讨论】:

感谢您解释 applicationDidBecomeActive 应该做什么。在Facebook FAQ 中声明,一旦使用 applicationDidBecomeActive 代码打开应用程序,就应该记录正在安装的应用程序。当我将该代码移动到 applicationDidFinishLaunching 时,我得到了一个安装记录,但我不确定这是否是鼓励偏离 facebook 文档。 我还没有开始任何活动,因为我想为每次下载付费,并且用于跟踪应用程序是否已下载的代码运行不正常。 您可以测试您的广告。 link。我希望你觉得它有用。

以上是关于applicationDidBecomeActive 未在 Cordova 应用程序中触发的主要内容,如果未能解决你的问题,请参考以下文章