为什么 iOS 静默推送触发器 application:didFinishLaunchingWithOptions:当应用程序处于后台时
Why iOS silent push triggers application:didFinishLaunchingWithOptions: when app is in background
我在 application:didFinishLaunchingWithOptions:
方法中有一些超时为 15 秒的网络请求。我发现了以下奇怪的情况。
T1:应用程序通过按主页按钮进入后台
T2:应用收到静默推送并执行didFinishLaunchingWithOptions:
方法,然后发送请求
T3(> T2 + 15s):用户点击应用程序图标。 T2 中的所有请求立即超时。
我的问题是为什么在那种情况下会触发didFinishLaunchingWithOptions
以及如何调试(重现这种情况,因为以上都在日志中)。
您可以检查应用状态以确定应用在收到通知时是否从后台启动:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground ) {
//opened from a push notification when the app was on background
}
}
编辑::
这里没有什么可调试的,这是预期的功能。
如果想做不同的处理,可以找
UIApplicationLaunchOptionsLocalNotificationKey
在启动选项内部,并在应用程序从通知启动时执行您需要的任何操作。
didFinishLaunchingWithOptions
如果您的应用程序被挂起或终止并且您收到通知,则会调用。您的应用程序可能已在后台崩溃,这就是调用 didFinishLaunchingWithOptions
的方式。
要调试该场景,请执行以下操作。
点击目标然后selectEdit Scheme
Select 发射到 Wait for executable to be launched
运行 应用程序。
现在您可以在 didFinishLaunchingWithOptions
中添加断点并向您的设备发送通知。一旦设备收到通知,您就可以进行调试。
静默推送可以将暂停的应用程序(由于内存紧张已被 iOS 系统正确终止,而不是用户手动终止)启动到后台。在这种情况下,应用程序的生命周期变为:
application:willFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:
applicationDidEnterBackground:
我在 application:didFinishLaunchingWithOptions:
方法中有一些超时为 15 秒的网络请求。我发现了以下奇怪的情况。
T1:应用程序通过按主页按钮进入后台
T2:应用收到静默推送并执行didFinishLaunchingWithOptions:
方法,然后发送请求
T3(> T2 + 15s):用户点击应用程序图标。 T2 中的所有请求立即超时。
我的问题是为什么在那种情况下会触发didFinishLaunchingWithOptions
以及如何调试(重现这种情况,因为以上都在日志中)。
您可以检查应用状态以确定应用在收到通知时是否从后台启动:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground ) {
//opened from a push notification when the app was on background
}
}
编辑::
这里没有什么可调试的,这是预期的功能。
如果想做不同的处理,可以找
UIApplicationLaunchOptionsLocalNotificationKey
在启动选项内部,并在应用程序从通知启动时执行您需要的任何操作。
didFinishLaunchingWithOptions
如果您的应用程序被挂起或终止并且您收到通知,则会调用。您的应用程序可能已在后台崩溃,这就是调用 didFinishLaunchingWithOptions
的方式。
要调试该场景,请执行以下操作。
点击目标然后select
Edit Scheme
Select 发射到
Wait for executable to be launched
运行 应用程序。
现在您可以在 didFinishLaunchingWithOptions
中添加断点并向您的设备发送通知。一旦设备收到通知,您就可以进行调试。
静默推送可以将暂停的应用程序(由于内存紧张已被 iOS 系统正确终止,而不是用户手动终止)启动到后台。在这种情况下,应用程序的生命周期变为:
application:willFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:
applicationDidEnterBackground: