【问题标题】:Why iOS silent push triggers application:didFinishLaunchingWithOptions: when app is in background为什么iOS静默推送触发应用程序:didFinishLaunchingWithOptions:当应用程序在后台时
【发布时间】:2017-08-21 04:14:39
【问题描述】:

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

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

我的问题是为什么didFinishLaunchingWithOptions在那种情况下被触发以及如何调试(重现这种情况,因为以上都在日志中)。

【问题讨论】:

    标签: ios background timeout launch silentpush


    【解决方案1】:

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

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

    1. 点击目标并选择Edit Scheme

    2. 选择启动到Wait for executable to be launched

    3. 运行应用程序。

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

    【讨论】:

    • 谢谢。我试过了,但是收到静默通知时没有执行断点。
    【解决方案2】:

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

    - (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

    在启动选项中,并在应用从通知启动时执行您需要的任何工作。

    【讨论】:

    • 谢谢,但您可能需要了解我的问题。
    【解决方案3】:

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

    1. application:willFinishLaunchingWithOptions:
    2. application:didFinishLaunchingWithOptions:
    3. applicationDidEnterBackground:

    苹果文档:About the Background Execution Sequence

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多