推送通知导致应用程序崩溃

Posted

技术标签:

【中文标题】推送通知导致应用程序崩溃【英文标题】:push notification causes app to crash 【发布时间】:2015-08-08 03:23:18 【问题描述】:

我正在使用支持推送通知的 IBM MobileFirst Platform Foundation 7.0 创建应用程序。此时,ios 设备可以在应用未运行时成功接收通知。但是,如果我触摸通知中的横幅消息,应用程序将启动,然后立即崩溃。同样,如果应用程序已经在运行并且推送通知到达,应用程序将立即崩溃。

奇怪的是,我最初并不总是看到这种行为。但是,现在每次在提到的情况下都会发生。

我该如何纠正这个问题?有我需要安装的补丁吗?我已经卸载/重新安装了该应用程序,但没有成功。

这是我通过 Worklight REST API 发送消息发送的有效负载:


  "message" : 
    "alert" : "Test message",
  ,
  "settings" : 
    "apns" : 
      "badge" : 1,
      "iosActionKey" : "Ok",
      "payload" : "",
      "sound" : "song.mp3"
    
  ,
  "target" : 
    "consumerIds" : [],
    "deviceIds" : [ ],
    "platforms" : [ "A"],
    "tagNames" : [],
  ,

这是我设备的错误报告:

> apsd[93] <Error>: Property list invalid for format: 200 (property lists cannot contain objects of type 'CFNull')   [209] <Warning>:
> [DEBUG] [WL_PUSH] -[Push processRemotePushNotification:] in Push.m:426
> :: Push: didReceive Remote notification   [209] <Warning>: [FATAL]
> [WORKLIGHT] Uncaught Exception: *** -[__NSArrayI objectAtIndex:]:
> index 1 beyond bounds [0 .. 0]   [209] <Error>: *** Terminating app
> due to uncaught exception 'NSRangeException', reason: '***
>     -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'     *** First throw call stack:     (0x1863cc2d8 0x1980980e4 0x1862afb34
> 0x1002a5afc 0x1002a558c 0x1872c0180 0x18638412c 0x186383ddc
> 0x186381828 0x1862ad2d4 0x18fd036fc 0x18aeaaf40 0x1000ac0e0
> 0x198742a08)   ReportCrash[210] <Error>: task_set_exception_ports(B07,
> 400, D03, 0, 0) failed with error (4: (os/kern) invalid argument)  
> ReportCrash[210] <Notice>: ReportCrash acting against PID 209  
> ReportCrash[210] <Notice>: Formulating crash report for process [209] 
> com.apple.xpc.launchd[1]
> (UIKitApplication:com.companyname.appname.qa[0xc100][209]) <Notice>:
> Service exited due to signal: Abort trap: 6   ReportCrash[210]
> <Notice>: Saved report to
> /var/mobile/Library/Logs/CrashReporter/_2015-08-07-231518_.ips  
> SpringBoard[54] <Warning>: Application
> 'UIKitApplication:com.companyname.appname.qa[0xc100]' crashed.

【问题讨论】:

尾随,在target之后,并且没有apn键。 文档还列出了“actionKey”而不是“isActionKey”:www-01.ibm.com/support/knowledgecenter/SSHS8R_7.0.0/… 处理推送通知有效负载的代码是什么样的? Could you set a breakpoint on all exceptions?这样,当异常被抛出时,您就可以确切地知道它来自哪一行。 我仍然遇到同样的错误。我检查了 json,现在我有了以下内容: "message": "alert": "Test message" , "settings": "apns": "actionKey": "Ok", "payload": "" , "target": "consumerIds": [], "deviceIds": [], "platforms": [ "A" ], "tagNames": [] 我不确定你所说的“没有 apn 密钥”是什么意思……我有我的 apns 证书,并生成了 .p12 文件。我需要在 json 中指定另一个字段吗? 哇,我能够通过更正有效负载来修复它。尽管我看到的许多示例都表明您可以使用空字符串,但它实际上需要是一个 javascript 对象,或者根本不存在,否则会导致应用程序崩溃。我现在在应用程序运行时收到通知而不会崩溃。 @IdanAdar,您知道我如何在应用程序中对此消息做出某种类型的响应,例如警报吗?我可以在控制台中看到它收到了消息,但默认情况下没有任何反应。我需要在应用程序委托中定义正确的方法吗?感谢您的帮助! 【参考方案1】:

如果客户端接收到的有效负载格式不正确,则会出现预期行为。 第一步,确保有效负载的格式正确,如下面的链接中所述-

WL.Server.sendMessage

或 REST API

客户端处理程序已在框架中定义,您无需自行实现。要处理有效负载,请在客户端使用适当的 JS 回调函数。如果使用标签/广播通知,这将是WL.Client.Push.onMessage

【讨论】:

以上是关于推送通知导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

从通知托盘按下推送通知时,Android GCM 应用程序崩溃

注册推送通知期间的 Android 崩溃

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

使用推送通知启动时应用程序崩溃

关闭应用程序后解析推送通知崩溃

应用程序未运行时的远程推送通知崩溃