项目需要,最近花了些时间学习了下AWS SNS。在ios平台上写了个Demo,就是在程序起来后,创建Endpoint,然后去订阅一个事先在SNS 后台创建好的Topic。各种准备就绪后,调用AmazonSNSClient的subscribe方法去订阅Topic,到此为止调用都正常。看了下subscribe方法的说明,文档中提到调用这个方法后要调用confirmSubscription确认订阅:
但是在调用confirmSubscription方法时,出现一个异常,意思是说Token不对:
从代码看,前后给的device token都一样。为嘛这里会抛异常,或者说我对这里的Token理解有误,这里的Token不是指device token?
更奇怪的是,虽然程序在最后一步抛异常,但是SNS控制台中能看到创建的Endpoint,并且订阅也成功了,SNS控制台推送的消息也能收到。
subscribe方法的返回值是SNSSubscribeResponse,查了下SNSSubscribeResponse的文档描述,在这里有个 subscriptionArn属性,从这个属性的说明来看,貌似在调用subscribe方法后不是非要调用confirmSubscription:
最后总结下问题:
1、subscribe方法说明中明确指出调用该方法后一定要调用confirmSubscription方法进行确认;
2、调用confirmSubscription方法,传的token与调用subscribe中的token相同(都是device token)时,程序异常,大概是说token不对;
3、第2个问题虽然发生了,但是SNS后台的endpoint创建成功,并且也订阅Topic成功了,而且推送功能正常;
4、由第3个问题发现,不调用confirmSubscription也能达到目的;
5、从subscribe方法的返回值SNSSubscribeResponse的说明中发现,调用 subscribe后有可能不需要调用confirmSubscription。
虽然推送功能实现了,但是这个问题还是没弄明白。 求解!