通过移动优先平台发送 Apple 推送通知时出现无效的十六进制字符错误

Posted

技术标签:

【中文标题】通过移动优先平台发送 Apple 推送通知时出现无效的十六进制字符错误【英文标题】:Getting Invalid hex character error while sending Apple push notification via Mobile First Platform 【发布时间】:2016-09-29 06:11:43 【问题描述】:

我正在尝试通过 Mobile First Server 发送 Apple 推送通知。三个月前我做了那个设置,一切正常。我在 4-5 天前开始遇到问题,指出 java.lang.RuntimeException: Invalid hex character: y 每当我尝试调用推送通知时。 服务器日志如下所示。

000004ed com.ibm.pushworks.server.notification.Mediator               E FPWSE1081E: Failed sending notification. Please refer to the server log file for more details.
java.lang.RuntimeException: Invalid hex character: y
    at com.notnoop.apns.internal.Utilities.charval(Utilities.java:132)
    at com.notnoop.apns.internal.Utilities.decodeHex(Utilities.java:119)
    at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:85)
    at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
    at com.ibm.pushworks.server.notification.apns.ApplicationConnection.sendNotification(ApplicationConnection.java:141)
    at com.ibm.pushworks.server.notification.apns.APNSMediator.sendNotification(APNSMediator.java:106)
    at com.ibm.pushworks.server.notification.Mediator$2.run(Mediator.java:89)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:483)
    at java.util.concurrent.FutureTask.run(FutureTask.java:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
    at java.lang.Thread.run(Thread.java:809)

请提出一些建议以消除此错误。

【问题讨论】:

【参考方案1】:

如果您使用的令牌包含无效的十六进制字符,则可能会发生此问题。

检查您是否传递了有效的 APNS 令牌。

使用以下 REST API: http://www.ibm.com/support/knowledgecenter/SSHS8R_7.0.0/com.ibm.worklight.apiref.doc/apiref/r_restapi_push_device_registration_get.html

检查您订阅的 APNS 令牌。如果 APNS 令牌正确,请验证您是否可以使用 REST API 发送推送通知。

【讨论】:

我们找到了问题的主要原因。这是因为 ios10 升级而发生的。在 Xcode 中,MFP 在升级更改后没有获得正确的 deviceId。我希望问题能得到解决,我们会得到正确的设备ID。 @AkashKesarwani,您指的是 APNS 设备令牌吗?还是 MFP SDK 生成的设备 ID?如果您指的是 APNS 令牌,请注意 APNS 提供的是令牌,而不是 MFP。 @VivinK 我指的是 APNS 生成的令牌,Xcode 用它来将自己注册到 MFP。 @AkashKesarwani,XCode 未注册到 MFP。 iOS 设备从 APNS 获取令牌,这将通过“didRegisterForRemoteNotificationsWithDeviceToken”方法访问。 MFP 将到达此方法的令牌传递给 MFP 服务器。在我们的测试中,我们从未发现在 iOS 10 上获得的 APNS 令牌出现问题。此外,这将是 APNS 的重大故障,并且没有关于 iOS 10 上的 APNS 令牌问题的报告。重新访问您的代码,看看您是否是在任何地方更改、修改或硬编码令牌。 @AkashKesarwani,如果问题的原因是由于无效的 APNS 令牌,请接受答案。【参考方案2】:

我们在 7.0 版中遇到了同样的问题。由于某种原因,PUSH_DEVICES 表中有一个无效的令牌,其字符串为“32bytes”

我们删除了该寄存器以及 PUSH_NOTIFICATIONS 表中的相关寄存器,之后一切正常。

【讨论】:

这个问题与以下问题有关:***.com/questions/39495391/…***.com/questions/9372815/…

以上是关于通过移动优先平台发送 Apple 推送通知时出现无效的十六进制字符错误的主要内容,如果未能解决你的问题,请参考以下文章

实现移动推送通知服务器

在 GCM 中发送推送通知时出现未经授权的错误

Azure 移动服务的一些 Apple 推送通知未到达

向 iOS 测试设备发送推送通知时出现 PHP 错误

通过 PushSharp.Core 发送 Apple 推送通知停止工作

独立于移动设备平台的推送服务器的实现