2014-01-29 47 views
1

我想訂閱Amazon SNS主題;我的訂戶使用協議「http」註冊。使用messageStructure json和指定的messageType爲消息創建Amazon SNS訂戶

amazonSNSClient.subscribe(new SubscribeRequest(topicArn, "http", callbackUrl); 

當一個消息發佈後,messageStructure設置爲「JSON」,消息內容包含了「默認」,「HTTP」和「https」開頭的條目。

JSONObject jsonMessage = new JSONObject(); 
jsonMessage.put(DEFAULT, "foo"); 
jsonMessage.put(HTTPS, someOtherJsonObject); 
jsonMessage.put(HTTP, someOtherJsonObject); 

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString()); 
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON); 
amazonSNSClient.publish(publishRequest); 

亞馬遜成功收到發佈的消息,並向訂閱服務器發送通知。 AWS控制檯中的驗證確認我的訂閱者訂閱了「http」協議。但是,用戶收到「默認」消息而不是「http」(json)消息。什麼可能是錯誤的,爲什麼亞馬遜推動'默認'通知給用戶而不是'http'通知?

回答

1

你能告訴我們發送的確切字符串嗎?我的猜測是,當你真的應該使用字符串時,你在消息中嵌入了JSON結構。

例如,我讓你送的東西是這樣的:

{ 
    "default": "foo", 
    "http": {"anotherThing":1}, 
} 

當在現實中你需要發送的是:

{ 
    "default": "foo", 
    "http": "{\"anotherThing\":1}", 
} 

我會嘗試的代碼更改爲:

JSONObject jsonMessage = new JSONObject(); 
jsonMessage.put(DEFAULT, "foo"); 
jsonMessage.put(HTTPS, someOtherJsonObject.toString()); 
jsonMessage.put(HTTP, someOtherJsonObject.toString()); 

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString()); 
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON); 
amazonSNSClient.publish(publishRequest);