我们正在使用Amazon SNS进行推送通知服务。它曾经工作正常,直到我认为在MessageAttributes中包含一个TTL。基本上为了测试目的,我希望将TTL时间保持为60秒。
我使用RestClient。我不使用亚马逊SDK。
def publish(endpoint_arn, message,message_attribute)
params = {
:TargetArn => endpoint_arn,
:Message => JSON.dump(message),
:MessageStructure => 'json',
:MessageAttributes => {
message_attribute => {
:DataType => 'String',
:StringValue => '60'
}
}
}
post(:Publish, params)
end
message_attribute是一个字符串,包含' AWS.SNS.MOBILE.GCM.TTL'
def post(command, params)
params.merge!(default_post_params(command))
params[:Signature] = calculate_signature(params, 'POST')
response = RestClient.post(SNS_URL, params)
end
上述代码中的错误,亚马逊文档说我所做的是正确的。
Amazon SDK API参考:http://docs.aws.amazon.com/sns/latest/dg/sns-ttl.html
PS:default_post_params,会有一个广义的post params,比如Access Key,SNS Url。它工作正常。只有在包含MessageAttributes键后才会说,
<Error>
<Type>Sender</Type>
<Code>MalformedQueryString</Code>
<Message>Keys may not contain [</Message>
</Error>
答案 0 :(得分:0)
由于缺少字典键和值而出现错误。
在消息属性中有两个键
1.DataType
2.StringValue
创建一个字典,并在字典中添加这两个键,并带有值。
肯定会起作用。