Amazon Simple Notification Service
開発者ガイド (API バージョン 2010-03-31)

モバイルプッシュ通知サービスの Amazon SNS 有効期限 (TTL) メッセージ属性の使用

Amazon Simple Notification Service(Amazon SNS)では、モバイルプッシュ通知サービスの有効期限(TTL)メッセージ属性の設定がサポートされています。この属性は、モバイルプッシュ通知サービス (Amazon Device Messaging (ADM)、Android 用 Google クラウドメッセージング (GCM) など) の Amazon SNS メッセージ本文内に TTL を設定する既存の機能に追加されたものです。

TTL メッセージ属性は、メッセージの有効期限メタデータを指定するために使用します。この属性を使用して、Apple Push Notification Service(APNS)や GCM などのプッシュ通知サービスによってエンドポイントにメッセージが配信される時間を指定できます。何らかの理由(モバイルデバイスがオフになっているなど)で、指定した TTL 内にメッセージが配信されなかった場合、そのメッセージは破棄され、以降その配信は試みられません。メッセージ属性に TTL を指定するには、AWS マネジメントコンソール、AWS Software Development Kit (SDK)、またはクエリ API を使用します。

プッシュ通知サービスの TTL メッセージ属性

以下に示しているのは、AWS SDK またはクエリ API の使用時に設定できるプッシュ通知サービスの TTL メッセージ属性の一覧です。

プッシュ通知サービス TTL メッセージ属性
Amazon Device Messaging (ADM) AWS.SNS.MOBILE.ADM.TTL
Apple Push Notification Service (APNS) AWS.SNS.MOBILE.APNS.TTL
Apple Push Notification Service Sandbox(APNS_SANDBOX) AWS.SNS.MOBILE.APNS_SANDBOX.TTL
Baidu Cloud Push (Baidu) AWS.SNS.MOBILE.BAIDU.TTL
Android 用 Google クラウドメッセージング (GCM) AWS.SNS.MOBILE.GCM.TTL
Windows プッシュ通知サービス (WNS) AWS.SNS.MOBILE.WNS.TTL

各プッシュ通知サービスはそれぞれ個別に TTL を処理します。Amazon SNS は、すべてのプッシュ通知サービスにまたがって TTL の要約ビューが表示されるため、TTL の指定がより簡単になります。AWS マネジメントコンソール を使用して TTL(秒単位)を指定するとき、TTL 値を一度入力するだけで、Amazon SNS はメッセージの発行時に、選択されたプッシュ通知サービスごとに TTL を計算します。

TTL は発行時間を基準にします。特定のプッシュ通知サービスにプッシュ通知メッセージを発行する前に、Amazon SNS はプッシュ通知のドウェル時間(発行のタイムスタンプからプッシュ通知サービスへの発行直前までの時間)を計算し、残りの TTL をそのプッシュ通知サービスに渡します。TTL がドウェル時間よりも短い場合、Amazon SNS はプッシュ通知メッセージの発行を試みません。

プッシュ通知メッセージの TTL を指定する場合、TTL 値は正の整数であることが必要です。ただし、APNS や GCM などのプッシュ通知サービスに対して 0 の値に特定の意味がある場合は除きます。—TTL 値を 0 に設定した場合、プッシュ通知サービスに対して 0 に特定の意味がないと、Amazon SNS はメッセージを破棄します。APNS を使用する場合に TTL パラメータを 0 に設定する方法の詳細については、Binary Provider API ドキュメントの「Table A-3 Item identifiers for remote notifications」を参照してください。 GCM の使用時に 0 に設定する TTL パラメーターの詳細については、「メッセージの有効期間」を参照してください。

TTL を決定するための優先順位

Amazon SNS がプッシュ通知メッセージの TTL を決定するための優先順位は以下の順序に基づきます。最も小さい番号が最も高い優先順位を表しています。

  1. メッセージ属性の TTL

  2. メッセージ本文の TTL

  3. プッシュ通知サービスのデフォルト TTL (サービスごとに異なる)

  4. Amazon SNS のデフォルト TTL (4 週間)

同じメッセージに対して(メッセージ属性とメッセージ本文で)異なる TTL 値を設定した場合、Amazon SNS はメッセージ属性の TTL に一致するようにメッセージ本文の TTL を変更します。

AWS マネジメントコンソール による TTL の指定

AWS マネジメントコンソール を使用して TTL を指定できます。

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. 左側のナビゲーションペインで、[Apps (アプリ)] を選択してから、メッセージを発行するときの TTL の設定対象になるエンドポイントを含むアプリを選択します。

  3. メッセージを発行するエンドポイントを選択してから、[Endpoint Actions (エンドポイントのアクション)]、[Publish (発行)] の順に選択します。

  4. [Publish (発行)] ダイアログボックスで、[有効期限 (TTL)] に秒数を入力し、[メッセージの発行] を選択します。

AWS SDK による TTL の指定

AWS SDK には、Amazon SNS で TTL を使用するための API がいくつかの言語で用意されています。

SDK for Java の詳細については、「AWS SDK for Java の使用開始」を参照してください。

以下の Java の例で示しているのは、TTL メッセージ属性を設定し、Baidu Cloud Push に登録されたエンドポイントにメッセージを発行する方法です。

Map<String, MessageAttributeValue> messageAttributes = new HashMap<String, MessageAttributeValue>(); // Insert your desired value (in seconds) of TTL here. For example, a TTL of 1 day would be 86,400 seconds. messageAttributes.put("AWS.SNS.MOBILE.BAIDU.TTL", new MessageAttributeValue().withDataType("String").withStringValue("86400")); PublishRequest publishRequest = new PublishRequest(); publishRequest.setMessageAttributes(messageAttributes); String message = "{\"title\":\"Test_Title\",\"description\":\"Test_Description\"}"; publishRequest.setMessage(message); publishRequest.setMessageStructure("json"); publishRequest.setTargetArn("arn:aws:sns:us-east-1:999999999999:endpoint/BAIDU/TestApp/318fc7b3-bc53-3d63-ac42-e359468ac730"); PublishResult publishResult = snsClient.publish(publishRequest);

Amazon SNS でのメッセージ属性の使用の詳細については、「Amazon SNS メッセージ属性」を参照してください。