Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么iOS静默推送触发应用程序:didFinishLaunchingWithOptions:当应用程序处于后台时_Ios_Background_Timeout_Launch_Silentpush - Fatal编程技术网

为什么iOS静默推送触发应用程序:didFinishLaunchingWithOptions:当应用程序处于后台时

为什么iOS静默推送触发应用程序:didFinishLaunchingWithOptions:当应用程序处于后台时,ios,background,timeout,launch,silentpush,Ios,Background,Timeout,Launch,Silentpush,我在应用程序:didFinishLaunchingWithOptions:方法中有一些网络请求超时15秒。我发现了以下奇怪的情况 T1:应用程序通过按下主页按钮进入后台 T2:应用程序收到静默推送,并执行didfishlaunchingwithoptions:method,然后发送请求 T3(>T2+15s):用户点击应用程序图标。T2中的所有请求立即超时 我的问题是为什么在这种情况下触发了didfishlaunchingwithoptions,以及如何调试(重现这种情况,因为以上所有内容都在日

我在
应用程序:didFinishLaunchingWithOptions:
方法中有一些网络请求超时15秒。我发现了以下奇怪的情况

T1:应用程序通过按下主页按钮进入后台
T2:应用程序收到静默推送,并执行
didfishlaunchingwithoptions:
method,然后发送请求
T3(>T2+15s):用户点击应用程序图标。T2中的所有请求立即超时


我的问题是为什么在这种情况下触发了
didfishlaunchingwithoptions
,以及如何调试(重现这种情况,因为以上所有内容都在日志中)。

您可以检查应用程序状态,以确定在收到通知时应用程序是否从后台启动:

- (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
     } 
}
编辑::

这里没有什么可调试的,它是预期的功能

如果你想以不同的方式处理它,你可以寻找

UIApplicationAunChoptionSlocalNotificationKey


在启动选项中,并在从通知启动应用程序时执行任何需要的操作

如果您的应用程序被挂起或终止,并且您收到通知,则调用didfishlaunchingwithoptions。您的应用程序可能在后台崩溃,这就是调用
didfishlaunchwithoptions
的方式

要调试该场景,请执行以下操作

  • 单击目标并选择
    编辑方案

  • 选择启动以
    等待可执行文件启动

  • 运行应用程序


  • 现在,您可以在
    didfishlaunchingwithoptions
    中添加断点,并向设备发送通知。一旦设备收到通知,您就可以进行调试

    静默推送可以将暂停的应用程序(由于内存紧张,已被iOS系统正确关闭,而不是用户手动关闭)启动到后台。在这种情况下,应用程序的生命周期变为:

  • 应用程序:将使用选项完成启动:
  • 应用程序:使用选项完成启动:
  • ApplicationIdentinterBackground:

  • 苹果文档:

    谢谢,但您可能需要理解我的问题。谢谢。我尝试过,但在收到静默通知时未执行断点。