專案需要,最近花了些時間學習了下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。
雖然推送功能實作了,但是這個問題還是沒弄明白。 求解!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/108591.html
標籤:AWS
