ios - 使用 didReceiveRemoteNotification 打开时如何跳过 applicationWillBecomeActive

标签 ios swift

我在这里遇到了一个小问题,因为我试图在用户返回应用程序时(在后台时)在我的 WKWebView 中运行一些 javascript 代码。

所以,基本上,有两种可能性:

  1. 用户从后台进入应用程序(多任务,无论什么)。这里发生的是,在 applicationWillResignActive 上,我保存了一个 var App.resignTime = NSDate().timeIntervalSince1970,我检查了当前的 NSDate().timeIntervalSince1970 applicationWillEnterForeground 上。因此,如果差异大于 25 秒(你知道 iOS 会在 30 秒后停止应用程序使用内存,因此断开 WKWebView 与我的套接字服务器的连接,无法接收新消息。所以,如果是这样,我运行一些 JS 代码,以获取新消息。

  2. didReceiveRemoteNotification方法执行时,UIApplicationState.Inactive.Background,这意味着用户通过推送通知从后台状态“打开”了应用程序,我运行的代码几乎相同,但还添加了一些东西(因为我也想打开那个对话室,而不是只刷新所有对话)。

现在的问题是 applicationWillBecomeActive 在这两种情况下都在运行,我想在用户从推送通知打开应用程序时跳过它。因为我最终有两个异步请求冲突。

我会保存一个变量,说明用户从推送通知打开,跳过 applicationWillBecomeActiveapplicationWillBecomeActivedidReceiveRemoteNotification 之前运行,所以我真的不能这样跳过它。

我不知道我是否解释正确..但希望我做到了。一定要问,我会尝试进一步解释。

最佳答案

这里有几种可能性:

1) 如果在 applicationWillBecomeActive 中开始的请求与在 didReceiveRemoteNotification 中开始的请求相同 - 为什么要在 didReceiveRemoteNotification 中发送它?或者:检查didReceiveRemoteNotification请求是否已经完成,然后不再执行。

2) 不要在 applicationWillBecomeActive 中发送有问题的请求,而是在稍后的状态下(当你知道你是否来自推送通知时,例如在 View Controller 中,在计时器中你在 applicationWillBecomeActive 中开始,或者可能在 applicationDidFinishLaunchingWithOptions 中开始)

3) 查看在两种情况下做同样的事情会产生什么影响 - 它发生的频率、产生的数据负载量以及用户体验如何。如果答案不经常不多并且用户不会注意到,则执行相同的操作。

关于ios - 使用 didReceiveRemoteNotification 打开时如何跳过 applicationWillBecomeActive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34020569/

相关文章:

ios - 从选项卡栏 Controller 以模态方式呈现 View

swift - Cocoapods pod repo 推送 git

ios - 委托(delegate)未收到数据

ios - 在不破坏 xcodebuild 存档的情况下将 os x 工具构建为 iOS 项目的一部分?

iOS:模态 viewController 如何记住它的属性?

ios - 使用 Swift for iOS 实现 Google Classroom API 时遇到问题 : Possible missing bridging header file

ios - 将传入的 NSStream 转换为 View

ios - 以编程方式创建的 Animate NSLayoutConstraint

xcode - 无法在设备上运行 Swift iOS 应用程序

ios - 如何减少应用程序导航栏中的“backButton”图像尺寸?