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