Amazon SNS:MessageAttributes TTL

时间:2014-09-23 12:48:49

标签: ruby-on-rails-3 amazon-web-services push-notification amazon-sns

我们正在使用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>

1 个答案:

答案 0 :(得分:0)

由于缺少字典键和值而出现错误。

在消息属性中有两个键

1.DataType
2.StringValue

创建一个字典,并在字典中添加这两个键,并带有值。

肯定会起作用。