收到推送通知时 iOS 13 崩溃?

Posted

技术标签:

【中文标题】收到推送通知时 iOS 13 崩溃?【英文标题】:iOS 13 crash when receiving push notification? 【发布时间】:2019-09-23 09:10:17 【问题描述】:

我们在 ios 13 上遇到了很多以下崩溃:

Crashed: com.twitter.crashlytics.ios.exception
0  MyApp                         0x1029626ac CLSProcessRecordAllThreads + 376 (CLSProcess.c:376)
1  MyApp                         0x102962a94 CLSProcessRecordAllThreads + 407 (CLSProcess.c:407)
2  MyApp                         0x102952798 CLSHandler + 26 (CLSHandler.m:26)
3  MyApp                         0x102960cc0 __CLSExceptionRecord_block_invoke + 199 (CLSException.mm:199)
4  libdispatch.dylib              0x1994911cc _dispatch_client_callout + 16
5  libdispatch.dylib              0x199443d04 _dispatch_lane_barrier_sync_invoke_and_complete + 56
6  MyApp                         0x102960768 CLSExceptionRecord + 206 (CLSException.mm:206)
7  MyApp                         0x10296059c CLSExceptionRecordNSException + 102 (CLSException.mm:102)
8  MyApp                         0x1029601c0 CLSTerminateHandler() + 259 (CLSException.mm:259)
9  libc++abi.dylib                0x199591304 std::__terminate(void (*)()) + 16
10 libc++abi.dylib                0x19959129c std::terminate() + 44
11 libobjc.A.dylib                0x1994ec2dc _objc_terminate() + 10
12 libdispatch.dylib              0x1994911e0 _dispatch_client_callout + 36
13 libdispatch.dylib              0x199443d04 _dispatch_lane_barrier_sync_invoke_and_complete + 56
14 BaseBoard                      0x19c307ccc -[BSAction sendResponse:withCompletion:] + 116
15 UIKitCore                      0x19d341558 -[UIHandleRemoteNotificationAction sendResponse:] + 128
16 UIKitCore                      0x19d7bb250 __91-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]_block_invoke_3.2661 + 72
17 UIKitCore                      0x19d7af014 _runAfterCACommitDeferredBlocks + 316
18 UIKitCore                      0x19d79f064 _cleanUpAfterCAFlushAndRunDeferredBlocks + 232
19 UIKitCore                      0x19d7ce80c _afterCACommitHandler + 76
20 CoreFoundation                 0x1997404f8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
21 CoreFoundation                 0x19973b3e4 __CFRunLoopDoObservers + 416
22 CoreFoundation                 0x19973b9b0 __CFRunLoopRun + 1308
23 CoreFoundation                 0x19973b16c CFRunLoopRunSpecific + 464
24 GraphicsServices               0x1a3573328 GSEventRunModal + 104
25 UIKitCore                      0x19d7a5d0c UIApplicationMain + 1936
26 MyApp                         0x1021fa41c main + 22 (main.m:22)
27 libdyld.dylib                  0x1995c6424 start + 4

带有以下信息:

Fatal Exception: NSInternalInconsistencyException this request has been neutered - you can't call -sendResponse: twice nor after encoding it +[_CFXNotificationTokenRegistration keyCallbacks]

有人知道是什么导致了这次崩溃吗?以下 line15 UIKitCore 0x19d341558 -[UIHandleRemoteNotificationAction sendResponse:] + 128 表示我猜是在收到远程通知时发生这种情况,但不确定。这与接收远程通知时未正确调用fetchCompletionHandlercallback 有关吗?感谢您的任何建议,谢谢 :)

【问题讨论】:

请分享您目前如何处理推送通知。 【参考方案1】:

我认为你应该实现fetchCompletionHandler,即使它是一个可选方法。 正如苹果提到的in the documentation:

如果您没有及时调用完成处理程序,您的应用将被终止

快速修复:正确实现此委托... iOS 13 应该让你离开。

旁注:iOS 13 对所有历史背景的东西都非常挑剔,如果看起来你在学术上没有使用背景功能,Apple 添加了那种看门狗来杀了你……对于许多使用 VoIP 的应用来说,同样的悲惨故事推 ;-)

【讨论】:

【参考方案2】:

虽然我不知道 Crashlytics 的实现细节,但 iOS 13 不再支持以前众所周知的使用 Data 对象注册远程通知的模式,这可能会导致崩溃。

这个答案解释了不同之处:

Does iOS 13 has new way of getting device notification token?

【讨论】:

谢谢你的答案。我们不使用描述来解析设备令牌......所以我想我可以排除这一点。收到远程通知时,stacktace 似乎正在发生这种情况。但不确定这个...

以上是关于收到推送通知时 iOS 13 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

WatchOS 3 在收到推送通知时崩溃

Worklight 应用程序在收到推送通知时崩溃

iOS 13 在后台没有收到 VoIP 推送通知

应用程序被杀死时未收到 IOS 13 VOIP 推送通知

当收到 IOS 13 SDK 的通知时,啥是推送工具包的替代方案来处理终止状态

iPhone 应用程序在收到推送通知时崩溃