我正在创建一个iOS应用程序,对于推送通知,我们使用的是Amazon的简单通知服务(SNS)。
SNS很好,但是文档非常稀少。我使用的是亚马逊的Python库boto,我已经知道如何发送纯文本推送通知:
device_arn = 'MY ENDPOINT ARN GOES HERE'
plain_text_message = 'a plaintext message'
sns.publish(message=plain_text_message,target_arn=device_arn)
然而,文档中不清楚的是如何创建Apple推送通知服务(APNS)消息。我需要发送一个声音和一个徽章以及推送通知,但是我不知道如何为消息格式化JSON。
到目前为止,我最好的猜测是:
message = {'default':'default message', 'message':{'APNS_SANDBOX':{'aps':{'alert':'inner message','sound':'mySound.caf'}}}}
messageJSON = json.dumps(message,ensure_ascii=False)
sns.publish(message=messageJSON,target_arn=device_arn,message_structure='json')
不过,当我运行这段代码时,我在通知中看到的只是“默认消息”,这意味着Amazon SNS拒绝了我的消息格式,而是显示了default
。
如何正确格式化此JSON?
当我使用SNS发布工具时,它会自动生成如下所示的JSON:
这看起来更接近苹果在“Notification Payload”一节中讨论的规范。他们说信息应该是
你有没有试过提供一个更接近那个规格的信息?比如说:
或者遵循发布SNS发布工具中的示例:
也可能用反斜杠转义。
我想出来了! 结果是,APNS有效载荷必须被编码为更大有效载荷内的字符串-并且它完全工作。
这是最终的工作代码:
下面是这段代码的详细介绍:
首先,为APNS创建python字典:
其次,把字典转换成JSON格式的字符串:
第三,将该字符串放入更大的负载中:
接下来,我们将编码成它自己的JSON格式的字符串:
然后可以使用boto发布结果字符串:
相关问题 更多 >
编程相关推荐