使用didReceiveRemoteNotification打开时如何跳过applicationWillBecomeActive

时间:2015-12-01 12:34:27

标签: ios swift

我在这里面临一个小问题,因为每当用户回到应用程序时(我在后台),我都会尝试将一些javascript代码运行到我的WKWebView中。

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

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

  2. 执行方法didReceiveRemoteNotificationUIApplicationState.Inactive.Background时,表示用户通过推送通知从后台状态“打开”了应用,运行几乎相同的代码,但另外还有一些东西(因为我想打开那个会话室而不是只刷新所有会话)。

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

    我保存一个变量,说用户从推送通知中打开,跳过applicationWillBecomeActiveapplicationWillBecomeActive正在didReceiveRemoteNotification之前运行,所以我不能以这种方式跳过它。

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

1 个答案:

答案 0 :(得分:0)

这里有几种可能性:

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

2)不要在applicationWillBecomeActive中发送有问题的请求,但是在稍后的状态下(当您知道是否来自推送通知时,例如在视图控制器中,您启动的计时器中)在applicationWillBecomeActive,或可能在applicationDidFinishLaunchingWithOptions

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