UNUserNotificationCenter didReceive执行网络请求

时间:2018-07-26 11:53:18

标签: ios swift push-notification appdelegate nsoperationqueue

当用户点击远程推送通知以启动不在前台或后台(即已卸载)的应用程序时。 AppDelegate调用func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

此功能使用OperationQueue发出网络请求。这是一段代码:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
{
   let queue = OperationQueue()
   let network = BlockOperation
   {
      // Execute network request where the response may take 20 seconds or longer.
   }
   let display = BlockOperation
   {
      // Display a view controller that is not the initiating view controller.
   }

   display.addDependency(network)

   queue.addOperations([network, display], waitUntilFinished: true)
}

当网络请求未返回或有机会超时时,iOS观察程序服务将终止应用程序,例如URL或IP无法解析。 OperationQueue是否应作为QoS background队列运行?

这是崩溃报告的一部分,建议OperationQueue位于主线程上:

  

异常类型:EXC_CRASH(SIGKILL)
  异常代码:0x0000000000000000、0x0000000000000000
  异常说明:EXC_CORPSE_NOTIFY
  终止原因:命名空间SPRINGBOARD,代码0x8badf00d
  终止说明:SPRINGBOARD,场景创建看门狗越界:com.sample.myapp用尽了19.93秒的实际(墙上时钟)时间余量| |已耗用的总CPU时间(秒):7.730(用户7.730,系统0.000),6%的CPU |应用程序经过的CPU时间(秒):0.180,0%CPU |
  由线程触发:0

     

线程0名称:调度队列:com.apple.main-thread
  线程0崩溃:
  0 libsystem_kernel.dylib 0x00000001830cd150 __psynch_cvwait + 8
  1 libsystem_pthread.dylib 0x00000001831e6fc0 _pthread_cond_wait $ VARIANT $ armv81 + 624
  2 Foundation 0x0000000183f7ed20-[__ NSOperationInternal _waitUntilFinished:] + 776
  3 Foundation 0x0000000183f82194-[NSOperationQueue addOperations:waitUntilFinished:] + 184   ...

是否有关于操作失败的应用程序继续启动启动视图控制器的最佳方法的想法?

非常感谢

0 个答案:

没有答案