【发布时间】:2018-01-08 16:43:16
【问题描述】:
我正在使用 firebase 进行推送通知,一切都在推送通知端运行。我正在使用通知来推送视图控制器,但是在进行此调用之前,我需要知道应用程序是否已加载。
我已经了解了如何确定应用程序的状态,但这对我没有用处。我需要确定该应用程序之前是否已加载,因为如果它已加载并关闭(并变为非活动状态),我可以毫无问题地推送我的新视图控制器。但是,如果应用程序被终止并加载,我会遇到一些我进行的 API 调用的问题。我想确定应用程序的状态,以便我可以适当地处理对非活动(但已加载)应用程序或死(非活动,未打开)应用程序的通知。
我尝试了两种方法:
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground) {
NSLog(@"app is loaded in the background");
//perform segue immediately to notification screen
}
if (state == UIApplicationStateInactive) {
NSLog(@"app is completely inactive")
//perform segue to loading screen (where it will then segue to notification screen)
}
不幸的是,UIApplicationStateBackground 似乎与后台服务有关,而我的应用程序没有。在我目前的情况下,当我收到 FCM 通知时,总是会调用 UIApplicationStateInactive 的代码。
我尝试的另一种方法是将boolean 添加到我的应用程序的 plist 中,并在应用程序变为非活动状态时将其设置为 false。然后在应用程序收到通知时检查布尔值,然后将其激活。然而,这似乎也永远不会奏效。
是否有我可以访问的属性来确定应用程序是已加载但处于非活动状态,还是完全死机且未加载任何内容?
【问题讨论】:
-
您是说安装后需要知道这是第一次运行应用程序还是以后运行?或者,如果应用在收到通知时处于“打开”状态,您现在想要这样做吗?
-
@UpholderOfTruth 我想知道应用程序当前是否打开,而不是是否是第一次运行应用程序。想象一下 3 个场景: 1,应用程序打开并收到通知。 2、应用已经打开并且已经加载了一个页面(双击home可以访问)。 3,应用程序已完全关闭,正在重新启动。 2 & 3 影响我如何进入我的应用程序,目前我似乎无法调试它,因为当您关闭应用程序时,您会断开调试器。
-
所以 1 表示在前台运行,2 表示当前在后台但未终止,3 表示终止不运行?
-
@UpholderOfTruth 是的。我目前通过创建一个应用程序状态枚举来构建一个解决方案,并将其保存到应用程序的 plist 中,然后根据存储的枚举值执行代码。然而,我的解决方案相当复杂,我相信一定有比我正在做的更简单的方法!
-
@UpholderOfTruth 对于 1 和 2,3,firebase 调用了不同的方法,因此当应用程序在前台运行时显示通知我没有任何问题。问题在于区分打开但不活动的应用和关闭的应用。
标签: ios objective-c iphone push-notification