Мы используем систему Amazon SNS для нашего сервиса push-уведомлений. Он работал нормально, пока я не подумал включить TTL - в MessageAttributes. В принципе Для целей тестирования я хочу сохранить время TTL как 60 секунд.Amazon SNS: MessageAttributes TTL
Я использую RestClient. Я не использую SDK Amazon.
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 документ говорит, что я сделал правильно.
Amazon SDK API Reference: http://docs.aws.amazon.com/sns/latest/dg/sns-ttl.html
PS: default_post_params, будет иметь обобщенный пост Params, как ключ доступа, SNS URL. И он отлично работает. Только после включения ключа MessageAttributes он говорит:
<Error>
<Type>Sender</Type>
<Code>MalformedQueryString</Code>
<Message>Keys may not contain [</Message>
</Error>