Amazon SNS Apple 推送通知教程中的错误(空指针异常)

Posted

技术标签:

【中文标题】Amazon SNS Apple 推送通知教程中的错误(空指针异常)【英文标题】:Bug in the Amazon SNS Apple Push Notification Tutorial (Null Pointer Exception) 【发布时间】:2014-07-21 21:49:27 【问题描述】:

我的最终目标是通过 SNS 向 ios 应用发送推送通知。我正在逐步完成本教程:http://docs.aws.amazon.com/sns/latest/dg/mobile-push-apns.html

我已经添加了我的 AWS 凭证,并为我的开发密钥、证书、私钥和我的应用程序的当前推送令牌添加了相应的 apns 凭证。当我运行教程时,我得到:

Exception in thread "main" java.lang.NullPointerException
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.getValidNotificationAttributes(AmazonSNSClientWrapper.java:162)
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.publish(AmazonSNSClientWrapper.java:80)
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.demoNotification(AmazonSNSClientWrapper.java:131)
at com.amazonaws.sns.samples.mobilepush.SNSMobilePush.demoAppleSandboxAppNotification(SNSMobilePush.java:438)
at com.amazonaws.sns.samples.mobilepush.SNSMobilePush.main(SNSMobilePush.java:68)

在 SNSMobilePush.java 的顶部有一个名为 attributesMap 的 Map。它最初将键 Platform.APNS 和 Platform.APNS_SANDBOX 的值设置为 null。这些值在代码中的任何地方都不会更改,并且会导致空指针异常。本教程并未指示更改这些值。

我没有做任何超出教程说明的事情。

我知道我的凭据是正确的,因为我确实通过亚马逊管理控制台使用这些相同的凭据向我的 iOS 应用程序发送了一条消息。

谁能指出来

如果教程不完整 与 Platform.APNS_SANDBOX 关联的值应该是什么才能使其正常工作 任何帮助我解决此问题的提示

更新我在 getValidNotificationAttributes() 中添加了一个空检查,现在我可以使用本教程使用 sns 和 apns 发送推送通知。

【问题讨论】:

因此,部分问题在于 AmazonSNSClientWrapper.java 中的“getValidNotificationAttributes”方法在启动时没有进行空值检查。 嗨,我有 certificate.pem 和私钥,用于向我的应用程序发送 apns 通知。是否应该在使用之前对其进行验证,因为我无法发送通知。我遵循了aws教程。你能帮帮我吗? 【参考方案1】:

我能够通过在 AmazonSNSClientWrapper 类中的 getValidNotificationAttributes() 中添加一个空检查来使教程正常工作。我确信这是在使用 Platform APNS_SANDBOX 和 APNS(可能还有 ADM 和 GCM)时暴露的代码中的一个缺陷。

public static Map<String, MessageAttributeValue> getValidNotificationAttributes(
Map<String, MessageAttributeValue> notificationAttributes) 
if (notificationAttributes != null) 

Map<String, MessageAttributeValue> validAttributes = new HashMap<String, MessageAttributeValue>();
for (Map.Entry<String, MessageAttributeValue> entry : notificationAttributes.entrySet()) 
if (!StringUtils.isBlank(entry.getValue().getStringValue())) 
validAttributes.put(entry.getKey(), entry.getValue());


return validAttributes;
 else 
return new HashMap<String, MessageAttributeValue>();


我希望这对正在学习本在线教程的其他人有所帮助。

【讨论】:

您是否通过编程代码向 Ios 应用发送通知?

以上是关于Amazon SNS Apple 推送通知教程中的错误(空指针异常)的主要内容,如果未能解决你的问题,请参考以下文章

Amazon SNS 推送通知特殊字符

用于 Apple 推送通知 AWS-SNS 或 Heroku 的更好的服务器是啥?

Amazon SNS 推送通知服务

使用 Amazon SNS 时无法接收到 iOS 设备的推送通知

使用 Amazon SNS 服务发送推送通知

未收到来自 Amazon SNS 的 GCM 推送通知