

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# プラットフォーム固有のペイロードを使用した Amazon SNS 通知の発行
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

 AWS マネジメントコンソール または Amazon SNS API を使用して、プラットフォーム固有のペイロードを含むカスタムメッセージをモバイルデバイスに送信できます。 APIs Amazon SNS API の使用については、[モバイルプッシュ API アクション](mobile-push-api.md) および `[snsmobilepush.zip](samples/snsmobilepush.zip)` の `SNSMobilePush.java` ファイルを参照してください。

## JSON 形式のメッセージの送信
<a name="mobile-push-send-json"></a>

プラットフォーム固有のペイロードを送信する場合、データは引用符をエスケープした、JSON キーと値のペア文字列である必要があります。

次の例では、FCM プラットフォーム用のカスタムメッセージを示します。

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## プラットフォーム固有のメッセージを送信する
<a name="mobile-push-send-platform"></a>

カスタムデータをキーと値のペアとして送信することに加えて、プラットフォーム固有のキーと値のペアを送信できます。

次の例では、FCM `data` パラメータのカスタムデータのキーと値のペアの後に、FCM パラメータ `time_to_live` および `collapse_key` を含めています。

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Amazon SNS でサポートされている各プッシュ通知サービスでサポートされているキーと値のペアのリストについては次を参照してください。

**重要**  
Amazon SNS は、Android デバイスにモバイルプッシュ通知を送信するために、Firebase Cloud Messaging (FCM) HTTP v1 API をサポートするようになりました。  
2024 年 3 月 26 日、Amazon SNS は、Apple デバイスと Webpush 送信先用の FCM HTTP v1 API をサポートします。アプリケーションの中断を避けるため、2024 年 6 月 1 日またはそれ以前に、既存のモバイルプッシュアプリケーションを最新の FCM HTTP v1 API に移行することをお勧めします。
+ APN ドキュメントの[ペイロードキーのリファレンス](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1)
+ FCM ドキュメントの[Firebase Cloud Messaging HTTP プロトコル](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
+ ADM ドキュメントの[メッセージの送信](https://developer.amazon.com/sdk/adm/sending-message.html)

## 複数プラットフォーム上のアプリケーションへのメッセージ送信
<a name="mobile-push-send-multiplatform"></a>

FCM や APN など、複数プラットフォーム向けのデバイスにインストールされたアプリケーションにメッセージを送信するには、Amazon SNS のトピックにモバイルエンドポイントをサブスクリプションしてから、トピックにメッセージを発行します。

次の例は、APN、FCM、および ADM でサブスクリプションしたモバイルエンドポイントに送信するメッセージを示しています。

```
{ 
  "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for 
one of the notification platforms.",     
  "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }",
  "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}",
  "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" 
}
```

## アラートまたはバックグラウンド通知としてのメッセージを APN に送信する
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS は APN にメッセージを `alert` または `background` 通知 (詳細については、APN のドキュメントの「[バックグラウンド更新をアプリケーションにプッシュする](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app)」を参照してください)。
+ `alert` APN 通知では、ユーザーに通知する方法として、アラートメッセージを表示するか、サウンドを鳴らすか、アプリケーションのアイコンにバッジを追加します。
+ `background` APN 通知は、ユーザーに通知することなく、ウェイクアップするか、通知の内容に基づいて動作するようにアプリケーションに指示します。

### APN ヘッダーのカスタム値を指定する
<a name="specify-custom-header-value"></a>

Amazon SNS `Publish` API アクション、 AWS SDKs、または を使用して、`AWS.SNS.MOBILE.APNS.PUSH_TYPE`[予約済みメッセージ属性](sns-message-attributes.md#sns-attrib-mobile-reserved)のカスタム値を指定することをお勧めします AWS CLI。次の CLI の例では、指定したトピックの `content-available` を `1` に設定し、`apns-push-type` を `background` に設定します。

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**注記**  
JSON 構造が有効であることを確認します。キーと値の各ペアの後 (最後のペア以外) にカンマを追加します。

### ペイロードからの APN プッシュタイプヘッダーを推測する
<a name="inferring-push-type-header-from-payload"></a>

`apns-push-type` APNヘッダーを設定しないと、JSON 形式の APN ペイロードに設定されている `aps` ディクショナリ内の `content-available` キーに応じて、Amazon SNS がヘッダーを `alert` または `background` に設定します。

**注記**  
`apns-push-type` ヘッダーは他の値に設定できますが、Amazon SNS が推測できるのは `alert` ヘッダーまたは `background` ヘッダーのみです。
+ `apns-push-type` は、`alert` に設定されます。
  + `aps` ディクショナリで `content-available` が `1` に設定されていて、ユーザーの操作をトリガーする *1 つ以上のキー*が含まれている場合。
  + `aps` ディクショナリで `content-available` が `0` に設定されているか、*または* `content-available` キーが存在しない場合。
  + `content-available` キーの値が整数またはブール値でない場合。
+ `apns-push-type` は、`background` に設定されます。
  + `aps` ディクショナリに `1` に設定された `content-available` *のみ*が含まれ、ユーザーの操作をトリガーする*他のキーが含まれていない*場合。
**重要**  
Amazon SNSが APN の raw 設定オブジェクトをバックグラウンドのみの通知として送信する場合は、`content-available` を `1` に設定して `aps` ディクショナリに含める必要があります。カスタムキーを含めることもできますが、ユーザー操作をトリガーするキー (アラート、バッジ、サウンドなど) を `aps` ディクショナリに含めることはできません。

raw 設定オブジェクトの例を次に示します。

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

この例の場合、Amazon SNS はメッセージの `apns-push-type` APN ヘッダーを `background` に設定します。Amazon SNS が `apn` ディクショナリが `1` に設定された `content-available` キーを含み、ユーザー操作をトリガーする他のキーを含まないことを検出すると、Amazon SNS はヘッダーを `background` に設定します。