

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon SNS에서 모바일 앱 설정
<a name="mobile-push-send"></a>

이 주제에서는 [Amazon SNS 사용자 알림에 대한 사전 조건](sns-prerequisites-for-mobile-push-notifications.md) 페이지에 설명된 정보를 사용하여 AWS Management Console에서 모바일 애플리케이션을 설정하는 방법에 대해 설명합니다.

# Amazon SNS 사용자 알림에 대한 사전 조건
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Amazon SNS 모바일 푸시 알림을 사용하려면 다음과 같이 하세요.
+ 지원되는 푸시 알림 서비스(ADM, APN, Baidu, FCM, MPNS 또는 WNS) 중 하나에 연결하기 위한 자격 증명 집합
+ 모바일 앱 및 디바이스를 위한 디바이스 토큰 또는 등록 ID
+ 모바일 엔드포인트에 알림 메시지를 보내도록 구성된 Amazon SNS
+ 지원되는 푸시 알림 서비스 중 하나를 사용하도록 등록 및 구성된 모바일 앱

애플리케이션을 푸시 알림 서비스에 등록하려면 여러 단계를 수행해야 합니다. Amazon SNS가 모바일 엔드포인트로 직접 푸시 알림 메시지를 보내도록 하려면 푸시 알림 서비스에 몇 가지 정보를 제공해야 합니다. 일반적으로 푸시 알림 서비스에 연결하기 위한 자격 증명, 푸시 알림 서비스로부터 받은 디바이스 토큰 또는 등록 ID(해당 모바일 디바이스 및 모바일 앱의 ID) 및 푸시 알림 서비스에 등록된 모바일 앱이 필요합니다.

자격 증명이 취하는 정확한 형식은 모바일 플랫폼 간에 다르지만, 모든 경우에 플랫폼에 연결하는 동안에는 이 자격 증명을 제출해야 합니다. 모바일 앱마다 자격 증명 집합 하나가 발급되며, 이는 해당 앱의 인스턴스에 메시지를 보내는 데 사용해야 합니다.

구체적인 이름은 사용하는 푸시 알림 서비스에 따라 다릅니다. 예를 들어, APN을 푸시 알림 서비스로 사용할 경우 *디바이스 토큰*이 필요합니다. 또는 FCM을 사용할 때에는 디바이스 토큰에 해당하는 것을 *등록 ID*라고 합니다. *디바이스 토큰* 또는 *등록 ID*는 모바일 디바이스의 운영 체제에서 애플리케이션에 보내는 문자열입니다. 특정 모바일 디바이스에서 실행되는 모바일 앱의 인스턴스를 고유하게 식별하며, 이 앱-디바이스 쌍의 고유한 식별자라고 생각하면 됩니다.

Amazon SNS는 플랫폼 애플리케이션 리소스로 다른 몇 개의 설정과 함께 자격 증명을 저장합니다. 몇 가지 추가 설정이 있는 디바이스 토큰이 *플랫폼 엔드포인트*라는 객체로 표시됩니다. 각 플랫폼 엔드포인트는 한 개의 특정 플랫폼 애플리케이션에 속하며, 모든 플랫폼 엔드포인트는 해당 플랫폼 애플리케이션에 저장된 자격 증명을 사용해 통신할 수 있습니다.

다음 섹션에서는 지원되는 각각의 푸시 알림 서비스에 대한 필수 조건을 설명합니다. 필수 정보를 가져온 후에는 AWS Management Console 또는 Amazon SNS 모바일 푸시 APIs. 자세한 내용은 [Amazon SNS를 이용한 푸시 알림 설정하기](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview) 단원을 참조하십시오.

# Amazon SNS 플랫폼 애플리케이션 만들기
<a name="mobile-push-send-register"></a>

Amazon SNS가 모바일 엔드포인트에 알림 메시지를 보내려면 직접 전송인지 주제 구독을 통한 것인지에 관계없이 반드시 플랫폼 애플리케이션을 먼저 생성해야 합니다. 앱이 AWS에 등록되면 앱과 모바일 디바이스의 엔드포인트를 만들어야 합니다. 이 엔드포인트를 사용하면 Amazon SNS가 디바이스에 메시지를 보낼 수 있습니다.

**플랫폼 애플리케이션을 생성하려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **푸시 알림**을 선택합니다.

1. **Platform applications**(플랫폼 애플리케이션) 섹션에서 **Create platform application**(플랫폼 애플리케이션 생성)을 선택합니다.

1. 를 선택합니다..**AWS 리전** 모바일 애플리케이션을 생성할 수 있는 AWS 리전 목록은 [Amazon SNS 모바일 애플리케이션 지원 리전](sns-mobile-push-supported-regions.md)에서 확인하세요.

1. 다음 **애플리케이션 세부 정보**를 입력합니다.
   + **애플리케이션 이름** - 플랫폼 애플리케이션의 **이름**을 제공합니다. 작업 이름은 최대 256자까지 포함할 수 있으며, 대문자와 소문자, 숫자, 하이픈, 밑줄을 포함할 수 있습니다.
   + **푸시 알림 플랫폼** - 앱이 등록된 적절한 **알림 서비스**(예: Apple 푸시 알림 서비스(APN), Firebase Cloud Messaging(FCM))를 선택합니다.

1. 선택한 플랫폼에 따라 특정 자격 증명을 제공해야 합니다.
   + Apple 푸시 알림 서비스(**APN**)의 경우 - **토큰 기반** 인증 또는 **인증서 기반** 인증 중에서 선택합니다.
     + 토큰 기반 인증의 경우 **.p8 파일**(키체인 액세스를 통해 생성됨)을 업로드합니다.
     + 인증서 기반 인증의 경우 **.p12 파일**(키체인 액세스에서도 내보냄)을 업로드합니다.
   + Firebase Cloud Messaging(**FCM**)의 경우 - Firebase 콘솔에서 **서버 키**를 입력합니다.
   + **다른 플랫폼**(예: ADM 또는 GCM)의 경우 - 해당 **API 키** 또는 **자격 증명**을 입력합니다.

1. 필요한 세부 정보를 입력한 후 **플랫폼 애플리케이션 생성**을 선택합니다. 이 작업은 Amazon SNS에 앱을 등록하고 해당 플랫폼 애플리케이션 객체를 생성합니다.

1. 생성 시 Amazon SNS는 [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)(Amazon 리소스 이름)을 생성하고 반환합니다. 이 ARN은 플랫폼 애플리케이션을 고유하게 식별하며 모바일 디바이스용 엔드포인트를 생성할 때 사용됩니다.

# 모바일 알림용 Amazon SNS 플랫폼 엔드포인트 설정
<a name="mobile-platform-endpoint"></a>

앱과 모바일 디바이스가 푸시 알림 서비스(예: APN, Firebase Cloud Messaging)에 등록되면 푸시 알림 서비스는 디바이스 토큰을 반환합니다. Amazon SNS는 이 디바이스 토큰을 사용하여 디바이스의 앱에 직접 푸시 알림 메시지를 보내는 대상 역할을 하는 플랫폼 엔드포인트를 생성합니다. 플랫폼 엔드포인트는 브리지 역할을 하여 Amazon SNS가 해당 모바일 디바이스로 전송하기 위해 푸시 알림 서비스로 보낸 메시지를 라우팅합니다. 자세한 내용은 [Amazon SNS 사용자 알림에 대한 사전 조건](sns-prerequisites-for-mobile-push-notifications.md) 및 [Amazon SNS를 이용한 푸시 알림 설정하기](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview) 섹션을 참조하세요.

## 디바이스 토큰 및 플랫폼 엔드포인트 이해
<a name="device-token-platform-endpoint"></a>

디바이스 토큰은 푸시 알림 서비스(예: APN, Firebase Cloud Messaging)에 등록된 모바일 디바이스를 식별합니다. 앱이 푸시 알림 서비스에 등록되면 해당 앱과 디바이스에 고유한 디바이스 토큰이 생성됩니다. Amazon SNS는 이 디바이스 토큰을 사용하여 해당 플랫폼 애플리케이션 내에 플랫폼 엔드포인트를 생성합니다.

플랫폼 엔드포인트를 사용하면 Amazon SNS가 푸시 알림 서비스를 통해 디바이스에 푸시 알림 메시지를 전송하여 앱과 사용자 디바이스 간의 연결을 유지할 수 있습니다.

## 플랫폼 엔드포인트 생성
<a name="mobile-platform-endpoint-create"></a>

Amazon SNS로 앱에 알림을 푸시하려면 먼저 플랫폼 엔드포인트 생성 작업을 호출해 Amazon SNS에 해당 앱의 디바이스 토큰을 등록해야 합니다. 이 작업은 플랫폼 애플리케이션의 Amazon 리소스 이름(ARN)과 디바이스 토큰을 파라미터로 취하고 생성된 플랫폼 엔드포인트의 ARN을 반환합니다.

[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) 작업에서는 다음과 같이 합니다.
+ 플랫폼 엔드포인트가 이미 있는 경우 다시 생성하지 않습니다. 기존 플랫폼 엔드포인트의 ARN 호출자로 돌아가세요.
+ 동일한 디바이스 토큰이지만 설정이 다른 플랫폼 엔드포인트가 이미 있는 경우 다시 생성하지 않습니다. 호출자에 예외를 발생시키세요.
+ 플랫폼 엔드포인트가 없으면 생성하세요. 새로 생성한 플랫폼 엔드포인트의 ARN 호출자로 돌아가세요.

앱이 시작할 때마다 바로 플랫폼 엔드포인트 생성 작업을 호출해서는 안 됩니다. 이 방법이 항상 작동하는 엔드포인트를 제공하는 것은 아니기 때문입니다. 이러한 상황은 예를 들면 같은 디바이스에서 앱을 제거했다가 다시 설치하고, 이에 대한 엔드포인트가 이미 있지만 비활성화된 경우에 발생할 수 있습니다. 성공적으로 등록하면 다음과 같은 결과를 얻을 수 있어야 합니다.

1. 이 앱-디바이스 조합에 대해 플랫폼 엔드포인트가 있는지 확인합니다.

1. 플랫폼 엔드포인트의 디바이스 토큰이 유효한 최신 디바이스 토큰인지 확인합니다.

1. 플랫폼 엔드포인트가 활성화되어 있고 사용할 준비가 되어 있는지 확인합니다.

## 의사 코드
<a name="mobile-platform-endpoint-pseudo-code"></a>

다음 의사(pseudo) 코드는 다양한 시작 조건에서 작동하고 활성화된 현재 플랫폼 엔드포인트를 생성하는 데 권장되는 사례를 설명합니다. 이 방법은 앱을 처음 등록하는지 아닌지, 이 앱의 플랫폼 엔드포인트가 이미 있는지, 플랫폼 엔드포인트가 활성화되어 있는지, 올바른 디바이스 토큰이 있는지 여부에 상관없이 효과가 있습니다. 연이어 여러 번 호출해도 중복 플랫폼 엔드포인트가 생성되거나, 이미 최신 상태이고 활성화된 경우에 기존 플랫폼 엔드포인트가 변경되지 않으므로 무관합니다.

```
retrieve the latest device token from the mobile operating system
if (the platform endpoint ARN is not stored)
  # this is a first-time registration
  call create platform endpoint
  store the returned platform endpoint ARN
endif

call get endpoint attributes on the platform endpoint ARN 

if (while getting the attributes a not-found exception is thrown)
  # the platform endpoint was deleted 
  call create platform endpoint with the latest device token
  store the returned platform endpoint ARN
else 
  if (the device token in the endpoint does not match the latest one) or 
      (GetEndpointAttributes shows the endpoint as disabled)
    call set endpoint attributes to set the latest device token and then enable the platform endpoint
  endif
endif
```

이 방법은 앱에서 자체적으로 등록하거나 다시 등록하려 할 때마다 사용할 수 있습니다. Amazon SNS에 디바이스 토큰 변경을 알리는 데에도 사용됩니다. 이 경우 최신 디바이스 토큰 값으로 작업을 호출하면 됩니다. 이 방법에 대해 유의해야 할 몇 가지 사항은 다음과 같습니다.
+ 플랫폼 엔드포인트 생성 작업을 호출할 수도 있는 두 가지 경우가 있습니다. 최초 등록 중에서와 같이 앱에서 자신의 고유한 플랫폼 엔드포인트 ARN을 인식하지 못하는 맨 처음에 호출할 수 있습니다. 또한 애플리케이션에서 해당 엔드포인트 ARN을 인식하지만 삭제된 경우와 같이 초기 `GetEndpointAttributes` 작업 직접 호출이 찾을 수 없음 예외와 함께 실패할 경우에도 직접적으로 호출될 수 있습니다.
+ 방금 플랫폼 엔드포인트를 생성했더라도 플랫폼 엔드포인트의 상태를 확인하기 위해 `GetEndpointAttributes` 작업이 직접적으로 호출됩니다. 이러한 상황은 플랫폼 엔드포인트가 이미 있지만 비활성화되어 있는 경우에 발생합니다. 이 경우 플랫폼 엔드포인트 생성 작업이 성공하지만 플랫폼 엔드포인트가 활성화되지 않기 때문에 성공을 반환하기 전에 플랫폼 엔드포인트의 상태를 다시 한 번 확인해야 합니다.

## AWS SDK 예제
<a name="mobile-platform-endpoint-sdk-examples"></a>

다음 코드는 AWS SDKs에서 제공하는 Amazon SNS 클라이언트를 사용하여 이전 의사 코드를 구현하는 방법을 보여줍니다.

 AWS SDK를 사용하려면 자격 증명으로 구성해야 합니다. [자세한 정보는 *AWS SDK 및 도구 참조 가이드*의 공유 구성 및 자격 증명 파일](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)을 참조하세요.

------
#### [ CLI ]

**AWS CLI**  
**플랫폼 애플리케이션 엔드포인트를 생성하려면**  
다음 `create-platform-endpoint` 예제에서는 지정된 토큰을 사용하여 지정된 플랫폼 애플리케이션의 엔드포인트를 생성합니다.  

```
aws sns create-platform-endpoint \
    --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \
    --token EXAMPLE12345...
```
출력:  

```
{
      "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234"
}
```

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * In addition, create a platform application using the AWS Management Console.
 * See this doc topic:
 *
 * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html
 *
 * Without the values created by following the previous link, this code examples
 * does not work.
 */

public class RegistrationExample {
    public static void main(String[] args) {
        final String usage = """

            Usage:     <token> <platformApplicationArn>

            Where:
               token - The device token or registration ID of the mobile device. This is a unique 
               identifier provided by the device platform (e.g., Apple Push Notification Service (APNS) for iOS devices, Firebase Cloud Messaging (FCM) 
               for Android devices) when the mobile app is registered to receive push notifications.

               platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s

            """;

        if (args.length != 2) {
            System.out.println(usage);
            return;
        }

        String token = args[0];
        String platformApplicationArn = args[1];
        SnsClient snsClient = SnsClient.builder()
            .region(Region.US_EAST_1)
            .build();

        createEndpoint(snsClient, token, platformApplicationArn);
    }
    public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) {
        System.out.println("Creating platform endpoint with token " + token);
        try {
            CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder()
                .token(token)
                .platformApplicationArn(platformApplicationArn)
                .build();

            CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest);
            System.out.println("The ARN of the endpoint is " + response.endpointArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
        }
    }
}
```

------

 자세한 내용은 [모바일 푸시 API 작업](mobile-push-api.md) 섹션을 참조하세요.

## 문제 해결
<a name="mobile-platform-endpoint-problems"></a>

### 오래된 디바이스 토큰으로 플랫폼 엔드포인트 생성 반복 호출
<a name="mobile-platform-endpoint-problems-outdated"></a>

FCM 엔드포인트의 경우 특히 애플리케이션이 발급된 첫 번째 디바이스 토큰을 먼저 저장한 후 애플리케이션을 시작할 때마다 해당 디바이스 토큰으로 플랫폼 엔드포인트 생성을 직접적으로 호출하는 것이 가장 적합하다고 생각할 수 있습니다. 이렇게 하면 앱에서 디바이스 토큰의 상태를 관리하지 않아도 되고 Amazon SNS에서 디바이스 토큰을 최신 값으로 자동 업데이트하기 때문에 올바르게 보일 수도 있습니다. 하지만 이 해결 방법에는 여러 가지 심각한 문제가 있습니다.
+ Amazon SNS는 만료된 디바이스 토큰을 새 디바이스 토큰으로 업데이트하기 위해 FCM의 피드백에 의존합니다. FCM은 일정 기간 동안 이전 디바이스 토큰에 대한 정보를 유지하지만 무기한은 아닙니다. FCM에서 이전 디바이스 토큰과 새 디바이스 토큰 사이의 연결에 대해 잊어버리면 Amazon SNS가 플랫폼 엔드포인트에 저장된 디바이스 토큰을 올바른 값으로 더 이상 업데이트하지 않고, 대신 플랫폼 엔드포인트를 비활성화합니다.
+ 플랫폼 애플리케이션에는 동일한 디바이스 토큰에 해당하는 여러 플랫폼 엔드포인트가 포함되어 있습니다.
+ Amazon SNS는 동일한 디바이스 토큰으로 시작해서 플랫폼 엔드포인트를 몇 개나 생성할 수 있는지에 대한 할당량을 둡니다. 결국 유효하지 않은 파라미터 예외 및 "이 엔드포인트가 이미 다른 토큰으로 등록되었습니다." 오류 메시지와 함께 새 엔드포인트 생성이 실패합니다.

FCM 엔드포인트에 대한 자세한 내용은 [Firebase Cloud Messaging 엔드포인트의 Amazon SNS 관리](sns-fcm-endpoint-management.md) 섹션을 참조하세요.

### 유효하지 않은 디바이스 토큰과 연결된 플랫폼 엔드포인트 다시 활성화
<a name="mobile-platform-endpoint-problems-invalid"></a>

모바일 플랫폼(예: APN 또는 FCM)에서 Amazon SNS에 게시 요청에 사용된 디바이스 토큰이 유효하지 않다고 알리면 Amazon SNS에서 해당 디바이스 토큰과 연결된 플랫폼 엔드포인트를 비활성화합니다. 그리고 나서 Amazon SNS는 해당 디바이스 토큰에 대한 후속 게시를 거부합니다. 플랫폼 엔드포인트를 다시 활성화하고 계속 게시하는 것이 최선이라고 생각할지도 모르겠지만, 대부분의 경우에서 이렇게 하면 아무 효과가 없습니다. 즉, 게시되는 메시지가 전송되지 않고 플랫폼 엔드포인트가 이후에 곧 다시 비활성화됩니다.

플랫폼 엔드포인트와 연결된 디바이스 토큰이 실제로 유효하지 않기 때문입니다. 더 이상 설치된 앱에 해당하지 않기 때문에 여기에 전송해도 실패하는 것입니다. 다음에 게시되면 모바일 플랫폼에서 다시 한 번 Amazon SNS에 디바이스 토큰이 유효하지 않다고 알려 주고, Amazon SNS가 또 다시 플랫폼 엔드포인트를 비활성화합니다.

비활성화된 플랫폼 엔드포인트를 다시 활성화하려면 설정된 엔드포인트 속성 작업 호출과 함께 유효한 디바이스 토큰과 연결한 후에 활성화해야 합니다. 그래야만 해당 플랫폼 엔드포인트에 전송해도 성공할 수 있습니다. 해당 장치 토큰을 업데이트하지 않고 플랫폼 엔드포인트를 다시 활성화해도 효과가 있는 유일한 경우는 해당 엔드포인트와 연결된 장치 토큰이 이전에는 유효하지 않았다가 다시 유효해진 경우입니다. 이러한 상황은 예를 들면 같은 모바일 디바이스에서 앱을 제거했다가 다시 설치하고, 같은 디바이스 토큰을 받을 경우에 발생할 수 있습니다. 위에 소개한 방법은 이와 같이 연결된 디바이스 토큰이 제공되는 가장 최신 디바이스 토큰임을 확인한 후에만 플랫폼 엔드포인트를 다시 활성화하도록 합니다.

# 모바일 알림을 위해 Amazon SNS와 디바이스 토큰 통합
<a name="mobile-push-send-devicetoken"></a>

앱과 모바일 디바이스를 Apple 푸시 알림 서비스(APN) 및 Firebase Cloud Messaging(FCM)과 같은 알림 서비스에 처음 등록할 때 디바이스 토큰 또는 등록 ID가 해당 서비스에서 반환됩니다. 이러한 토큰/ID는 [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) API를 사용하여 앱 및 디바이스에 대한 엔드포인트를 생성하기 위해 Amazon SNS에 추가됩니다. 엔드포인트가 생성되면 Amazon SNS가 올바른 앱/디바이스로 알림을 보내는 데 사용하는 [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)이 반환됩니다.

다음 방법을 사용하여 디바이스 토큰 또는 등록 ID를 Amazon SNS에 추가할 수 있습니다.
+ 를 통해 수동으로 단일 토큰 추가 AWS Management Console
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) API를 사용하여 여러 토큰을 업로드
+ 향후 디바이스에 토큰 등록

****디바이스 토큰 또는 등록 ID를 수동으로 추가하려면****

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **푸시 알림**을 선택합니다.

1. **플랫폼 애플리케이션** 섹션에서 애플리케이션을 선택한 다음 **편집**을 선택합니다. 플랫폼 애플리케이션을 아직 생성하지 않은 경우 [Amazon SNS 플랫폼 애플리케이션 만들기](mobile-push-send-register.md) 가이드에 따라 지금 생성하세요.

1. **엔드포인트 생성**을 선택합니다.

1. **엔드포인트 토큰** 상자에 사용 중인 알림 서비스(예: FCM 등록 ID)에 따라 **토큰** 또는 **등록 ID**를 입력합니다.

1. (선택 사항) **사용자 데이터** 필드에 추가 데이터를 입력합니다. 이 데이터는 UTF-8로 인코딩되고 2KB 미만이어야 합니다.

1. **엔드포인트 생성**을 선택합니다.

엔드포인트가 만들어졌으므로 모바일 디바이스에 메시지를 직접 전송하거나 Amazon SNS 주제를 구독하는 모바일 디바이스에 메시지를 전송할 수 있습니다.

****`CreatePlatformEndpoint` API를 사용하여 여러 토큰을 업로드하는 방법****

다음 단계에서는에서 제공하는 샘플 Java 앱(`bulkupload` 패키지)을 사용하여 Amazon SNS AWS 에 여러 토큰(디바이스 토큰 또는 등록 IDs)을 업로드하는 방법을 보여줍니다. 이 샘플 앱을 사용하여 기존 토큰 업로드를 시작할 수 있습니다.
**참고**  
다음 단계에서는 Eclipse Java IDE를 사용합니다. 이 단계에서는를 설치했고에 대한 AWS 보안 자격 증명 AWS SDK for Java 이 있다고 가정합니다 AWS 계정. 자세한 내용은 [AWS SDK for Java](https://aws.amazon.com/sdkforjava/) 단원을 참조하십시오. 자격 증명에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 보안 자격 증명](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) 섹션을 참조하세요.

1. [snsmobilepush.zip](samples/snsmobilepush.zip) 파일을 다운로드하여 압축을 풉니다.

1. Eclipse에서 새 **Java 프로젝트**를 생성하고 `SNSSamples` 폴더를 프로젝트로 가져옵니다.

1. [OpenCSV 라이브러리](http://sourceforge.net/projects/opencsv/)를 다운로드하여 빌드 경로에 추가합니다.

1. `BulkUpload.properties` 파일에서 다음을 지정합니다.
   + `ApplicationArn`(플랫폼 애플리케이션 ARN).
   + 토큰이 포함된 CSV 파일의 절대 경로.
   + 성공 및 실패한 토큰에 대한 파일 이름 로깅. 예: `goodTokens.csv` 및 `badTokens.csv`.
   + (선택 사항) 구분 기호, 따옴표 및 사용할 스레드 수에 대한 구성입니다.

   완성된 `BulkUpload.properties`는 다음과 같습니다.

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  **BatchCreatePlatformEndpointSample.java** 애플리케이션을 실행하여 토큰을 Amazon SNS에 업로드합니다. 성공적으로 업로드된 토큰은 `goodTokens.csv`에 로깅되고 잘못된 형식의 토큰은 `badTokens.csv`에 로깅됩니다.

**향후 앱 설치를 위해 디바이스의 토큰을 등록하는 방법**

이 프로세스에는 두 가지 옵션이 있습니다.

**Amazon Cognito 서비스 사용**  
모바일 앱은 임시 보안 자격 증명을 사용하여 엔드포인트를 생성할 수 있습니다. 임시 자격 증명을 생성하려면 Amazon Cognito를 사용하는 것이 좋습니다. 자세한 정보는 *[Amazon Cognito 개발자 안내서](https://docs.aws.amazon.com/cognito/latest/developerguide/)*를 참조하세요.  
앱 [등록](application-event-notifications.md)을 추적하려면 새 엔드포인트 ARN이 생성될 때 Amazon SNS 이벤트를 사용하여 알림을 받으세요.  
또는 [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html) API를 사용하여 등록된 엔드포인트 목록을 검색할 수 있습니다.

**프록시 서버 사용**  
앱 인프라가 설치 시 디바이스 등록을 이미 지원하는 경우 서버를 프록시로 사용할 수 있습니다. [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) API를 통해 Amazon SNS로 디바이스 토큰을 전달합니다.  
Amazon SNS에서 생성한 엔드포인트 ARN이 반환되며 향후 메시지 게시를 위해 서버에서 저장할 수 있습니다.

# Amazon SNS Apple 푸시 알림 인증 방법
<a name="sns-apple-authentication-methods"></a>

앱 개발자임을 식별하는 정보를 제공하여 Amazon SNS가 iOS나 macOS 앱에 푸시 알림을 보낼 수 있는 권한을 부여할 수 있습니다. 인증하려면 [플랫폼 애플리케이션을 생성할 때](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html) *키* 또는 *인증서*를 제공하세요. 두 가지 모두 Apple 개발자 계정에서 얻을 수 있습니다.

**토큰 서명 키**  
Amazon SNS가 Apple 푸시 알림 서비스(APNS) 인증 토큰에 서명하는 데 사용하는 프라이빗 서명 키입니다.  
서명 키를 입력하면 Amazon SNS는 사용자가 푸시 알림을 보낼 때마다 토큰을 사용하여 APNS에 인증합니다. 이 서명 키로 APNS 프로덕션 환경 및 샌드박스 환경에 푸시 알림을 보낼 수 있습니다.  
서명 키는 만료되지 않으며 여러 앱에 대해 동일한 서명 키를 사용할 수 있습니다. 자세한 내용은 Apple 웹 사이트의 **개발자 계정 도움말** 섹션의 [인증 토큰을 사용하여 APNS와 커뮤니케이션하기](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns)를 참조하세요.

**Certificate**  
푸시 알림을 보낼 때 Amazon SNS가 APNS에 인증하기 위해 사용하는 TLS 인증서입니다. 이 인증서는 Apple 개발자 계정에서 얻을 수 있습니다.  
인증서는 1년 후에 만료됩니다. 만료되는 경우, 새 인증서를 생성하고 이를 Amazon SNS에 제공해야 합니다. 자세한 내용은 Apple 개발자 웹 사이트에서 [APNS에 대한 인증서 기반 연결 설정](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns)을 참조하세요.

**AWS 관리 콘솔APNs 설정을 관리하려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **푸시 알림**을 선택합니다.

1. **플랫폼 애플리케이션** 섹션에서 편집하려는 APN 설정이 있는 **애플리케이션**을 선택한 다음 **편집**을 선택합니다. 플랫폼 애플리케이션을 아직 생성하지 않은 경우 [Amazon SNS 플랫폼 애플리케이션 만들기](mobile-push-send-register.md) 가이드에 따라 지금 생성하세요.

1. **편집**을 선택하여 플랫폼 애플리케이션의 설정을 수정합니다.

1. **인증 유형** 섹션에서 다음 옵션 중 하나를 선택합니다.
   + **토큰 기반 인증**(최신 APN 통합에 권장됨)
   + **인증서 기반 인증**(이전 메서드)

1. 인증 유형에 따라 **자격 증명**을 구성합니다.
   + **토큰 기반 인증:**
     + Apple Developer 계정에서 다운로드한 인증 토큰 서명 키인 **.p8 파일**을 업로드합니다.
     + Apple 개발자 계정에서 찾은 **서명 키 ID**를 입력합니다. **인증서**, **ID 및 프로필**, **키**로 이동하여 사용하려는 **키**를 선택합니다.
     + Apple 개발자 계정의 **팀 식별자**를 제공합니다. 이는 멤버십 페이지에서 확인할 수 있습니다.
     + 앱에 할당된 **번들 식별자**를 입력합니다. 인증서, ID 및 프로필, 앱 ID에서 찾을 수 있습니다.
   + **인증서 기반 인증의 경우:**
     + TLS 인증서에 대한 **.p12 파일**을 업로드합니다. Apple 개발자 계정에서 인증서를 다운로드한 다음 macOS의 키체인 액세스에서 이 파일을 내보낼 수 있습니다.
     + .p12 인증서에 **암호**를 할당했으면 여기에 입력합니다.

1. 필요한 자격 증명을 입력한 후 **변경 사항 저장**을 선택하여 설정을 업데이트합니다.

# Amazon SNS를 Firebase Cloud Messaging 인증 설정과 통합
<a name="sns-fcm-authentication-methods"></a>

이 주제에서는 API AWS AWS CLI 및와 함께 사용하는 데 필요한 FCM API(HTTP v1) 자격 증명을 Google에서 가져오는 방법을 설명합니다 AWS Management Console.

**중요**  
2024년 3월 26일 - Amazon SNS는 Apple 디바이스 및 웹푸시 대상에 대한 FCM HTTP v1 API를 지원합니다. 애플리케이션 중단을 방지하려면 2024년 6월 1일 또는 그 이전까지 기존 모바일 푸시 애플리케이션을 최신 FCM HTTP v1 API로 마이그레이션하는 것을 권장합니다.  
2024년 1월 18일 - Amazon SNS는 Android 디바이스로 모바일 푸시 알림을 전송하는 FCM HTTP v1 API에 대한 지원을 도입했습니다.  
2023년 6월 20일 - Google은 자체 Firebase Cloud Messaging(FCM) 레거시 HTTP API 지원을 중단했습니다. 이제 Amazon SNS는 FCM HTTP v1 API를 사용하여 모든 디바이스 유형에 전송 기능을 지원합니다. 중단을 방지하려면 2024년 6월 1일 또는 그 이전까지 기존 모바일 푸시 애플리케이션을 최신 FCM HTTP v1 API로 마이그레이션하는 것을 권장합니다.

앱 개발자임을 식별하는 정보를 제공하여 Amazon SNS가 애플리케이션에 푸시 알림을 보낼 수 있는 권한을 부여할 수 있습니다. 인증하려면 [플랫폼 애플리케이션을 만들 때](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html) **API 키** 또는 **토큰**을 제공하세요. [Firebase 애플리케이션 콘솔](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds)에서 다음 정보를 가져올 수 있습니다.

**API 키**  
API 키는 Firebase의 레거시 API를 직접 호출할 때 사용되는 보안 인증 정보입니다. Google은 2024년 6월 20일에 FCM 레거시 API를 삭제할 예정입니다. 현재 API 키를 플랫폼 보안 인증 정보로 사용하고 있다면 **토큰**을 옵션으로 선택하고 Firebase 애플리케이션용 관련 JSON 파일을 업로드하여 플랫폼 보안 인증 정보를 업데이트할 수 있습니다.

**토큰**  
HTTP v1 API를 직접 호출할 경우 수명이 짧은 액세스 토큰이 사용됩니다. 이것은 푸시 알림 전송을 위한 Firebase의 추천 API입니다. 액세스 토큰을 생성하기 위해 Firebase는 개발자에게 프라이빗 키 파일(service.json 파일이라고도 함) 형태의 보안 인증 정보 세트를 제공합니다.

## 사전 조건
<a name="sns-fcm-authentication-prerequisite"></a>

Amazon SNS에서 FCM 설정을 관리하기 시작하려면 먼저 FCM service.json 보안 인증 정보를 받아야 합니다. service.json 보안 인증 정보를 얻으려면 Google Firebase 설명서에서 [레거시 FCM API에서 HTTP v1으로 마이그레이션](https://firebase.google.com/docs/cloud-messaging/migrate-v1) 섹션을 참조하세요.

## CLI를 사용한 FCM 설정 관리
<a name="sns-fcm-authentication-api"></a>

 AWS API를 사용하여 FCM 푸시 알림을 생성할 수 있습니다. AWS 계정의 Amazon SNS 리소스 수와 크기는 제한됩니다. 자세한 내용은 *AWS 일반 참조 가이드*의 [Amazon Simple Notification Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/sns.html)를 참조하세요.

**Amazon SNS 주제와 함께 FCM 푸시 알림을 생성하려면(AWS API)**  
**키** 보안 인증을 사용하는 경우, `PlatformCredential`은 `API key`입니다. **토큰** 보안 인증을 사용하는 경우, `PlatformCredential`은 JSON 형식의 프라이빗 키 파일입니다.
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**기존 Amazon SNS 주제에 대한 FCM 자격 증명 유형을 검색하려면(AWS API)**  
다음 보안 인증 유형 `"AuthenticationMethod": "Token"` 또는 ` "AuthenticationMethod": "Key"`를 검색합니다.
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**기존 Amazon SNS 주제에 대한 FCM 속성을 설정하려면(AWS API)**  
FCM 속성을 설정합니다.
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## 콘솔을 사용한 FCM 설정 관리
<a name="sns-fcm-authentication-cli"></a>

 AWS Command Line Interface (CLI)를 사용하여 FCM 푸시 알림을 생성할 수 있습니다. AWS 계정의 Amazon SNS 리소스 수와 크기는 제한됩니다. 자세한 내용은 [Amazon Simple Notification Service 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sns.html)을 참조하세요.

**Amazon SNS 주제와 함께 FCM 푸시 알림 생성(AWS CLI)**  
**키** 보안 인증을 사용하는 경우, `PlatformCredential`은 `API key`입니다. **토큰** 보안 인증을 사용하는 경우, `PlatformCredential`은 JSON 형식의 프라이빗 키 파일입니다. AWS CLI를 사용하는 경우 파일은 문자열 형식이어야 하며 특수 문자는 무시해야 합니다. Amazon SNS는 파일 형식을 올바르게 지정하기 위해 다음 명령을 사용할 것을 권장합니다: `SERVICE_JSON=`jq @json <<< cat service.json``:
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**기존 Amazon SNS 주제에 대한 FCM 보안 인증 유형 검색(AWS CLI)**  
다음 보안 인증 유형 `"AuthenticationMethod": "Token"` 또는 ` "AuthenticationMethod": "Key"`를 검색합니다.
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**기존 Amazon SNS 주제에 대한 FCM 속성 설정(AWS CLI)**  
FCM 속성을 설정합니다.
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## FCM 설정 관리(콘솔)
<a name="sns-fcm-authentication-console"></a>

다음 단계에 따라 Amazon SNS에서 Firebase Cloud Messaging(FCM) 자격 증명을 입력하고 관리합니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **푸시 알림**을 선택합니다.

1. **플랫폼 애플리케이션** 섹션에서 자격 증명을 편집하려는 **FCM 플랫폼 애플리케이션**을 선택한 다음 **편집**을 선택합니다.

1. **Firebase Cloud Messaging 자격 증명** 섹션에서 다음 옵션 중 하나를 선택합니다.
   + **토큰 기반 인증**(권장 방법) - Firebase 콘솔에서 다운로드한 **프라이빗 키 파일**(JSON)을 업로드합니다. 이 파일에는 FCM 알림을 위한 수명이 짧은 액세스 토큰을 생성하는 데 필요한 자격 증명이 포함되어 있습니다. 이 파일을 가져오는 방법:

     1. [Firebase 애플리케이션 콘솔](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds)로 이동합니다.

     1. **프로젝트 설정**에서 **클라우드 메시징**을 선택합니다.

     1. **프라이빗 키** JSON 파일(토큰 기반 인증 방법에 사용)을 다운로드합니다.
   + **API 키 인증** - 이전 API 키 인증 방법을 사용하려면 제공된 필드에 **Google API 키를** 입력합니다. 이 파일을 가져오는 방법:

     1. [Firebase 애플리케이션 콘솔](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds)로 이동합니다.

     1. **프로젝트 설정**에서 **클라우드 메시징**을 선택합니다.

     1. 알림 전송에 사용할 **서버 키**(API 키)를 복사합니다.

1. 변경 작업을 마치면 **변경 사항 저장**을 선택합니다.

**관련 주제**
+ [Amazon SNS에서 Google Firebase Cloud Messaging v1 페이로드 사용](sns-fcm-v1-payloads.md)

# Firebase Cloud Messaging 엔드포인트의 Amazon SNS 관리
<a name="sns-fcm-endpoint-management"></a>

## 디바이스 토큰 관리 및 유지 관리
<a name="sns-managing-device-tokens"></a>

다음 단계에 따라 모바일 애플리케이션의 푸시 알림을 전달할 수 있습니다.

1. 모든 디바이스 토큰, 해당 Amazon SNS 엔드포인트 ARN 및 타임스탬프를 애플리케이션 서버에 저장합니다.

1. 모든 기한 경과 토큰을 제거하고 해당 Amazon SNS 엔드포인트 ARN을 삭제합니다.

앱이 처음 시작되면 디바이스에 대한 디바이스 토큰(등록 토큰이라고도 함)을 받게 됩니다. 이 디바이스 토큰은 디바이스의 운영 체제에 의해 민팅되며 FCM 애플리케이션에 연결됩니다. 이 디바이스 토큰을 받으면 Amazon SNS에 플랫폼 엔드포인트로 등록할 수 있습니다. 디바이스 토큰, Amazon SNS 플랫폼 엔드포인트 ARN 및 타임스탬프를 애플리케이션 서버 또는 다른 영구 스토어에 저장하여 저장하는 것이 좋습니다. 디바이스 토큰을 검색하고 저장하도록 FCM 애플리케이션을 설정하려면 Google *Firebase* 설명서의 [등록 토큰 검색 및 저장](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens)을 참조하세요.

최신 토큰을 유지하는 것이 중요합니다. 사용자의 디바이스 토큰은 다음 조건에서 변경될 수 있습니다.

1. 모바일 애플리케이션이 새 디바이스에 복원됩니다.

1. 사용자가 애플리케이션을 제거하거나 업데이트합니다.

1. 사용자가 애플리케이션 데이터를 지웁니다.

디바이스 토큰이 변경되면 해당 Amazon SNS 엔드포인트를 새 토큰으로 업데이트하는 것이 좋습니다. 이렇게 하면 Amazon SNS가 등록된 디바이스와의 통신을 계속할 수 있습니다. 모바일 애플리케이션 내에서 다음 의사 코드를 구현하여 이 작업을 수행할 수 있습니다. 활성화된 플랫폼 엔드포인트를 생성하고 유지 관리하는 권장 방법을 설명합니다. 이 접근 방식은 모바일 애플리케이션이 시작될 때마다 또는 백그라운드에서 예약된 작업으로 실행할 수 있습니다.

### 의사 코드
<a name="sns-device-token-pseudo-code"></a>

다음 FCM 의사 코드를 사용하여 디바이스 토큰을 관리하고 유지 관리합니다.

```
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
    # first time registration
    call CreatePlatformEndpoint
    store returned endpoint arn
endif

call GetEndpointAttributes on the endpoint arn 

if (getting attributes encountered NotFound exception)
    #endpoint was deleted 
    call CreatePlatformEndpoint
    store returned endpoint arn
else 
    if (token in endpoint does not match latest) or 
        (GetEndpointAttributes shows endpoint as disabled)
        call SetEndpointAttributes to set the 
                     latest token and enable the endpoint
    endif
endif
```

토큰 업데이트 요구 사항에 대한 자세한 내용은 Google의 *Firebase* 설명서의 [정규 기준으로 토큰 업데이트](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis)를 참조하세요.

## 잘못된 토큰 감지
<a name="sns-detecting-invalid-tokens"></a>

메시지가 잘못된 디바이스 토큰을 사용하여 FCM v1 엔드포인트로 전송되면 Amazon SNS는 다음 예외 중 하나를 수신합니다.
+ `UNREGISTERED`(HTTP 404) - Amazon SNS가 이 예외를 수신하면 `InvalidPlatformToken`의 `FailureType`와 함께 전송 실패 이벤트를 수신하며 *엔드포인트와 연결된 플랫폼 토큰의 `FailureMessage`가 유효하지 않습니다*. 이 예외를 제외하고 전송에 실패하면 Amazon SNS가 플랫폼 엔드포인트를 비활성화합니다.
+ `INVALID_ARGUMENT`(HTTP 400) - Amazon SNS가 이 예외를 수신하면 디바이스 토큰 또는 메시지 페이로드가 유효하지 않음을 의미합니다. 자세한 내용은 Google *Firebase* 설명서의 [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)를 참조하세요.

이러한 경우 중 하나에서 `INVALID_ARGUMENT`를 반환할 수 있으므로 Amazon SNS는 `InvalidNotification`의 `FailureType`을 반환하고 *알림 본문의 `FailureMessage`는 유효하지 않습니다*. 이 오류가 발생하면 페이로드가 올바른지 확인합니다. 올바른 경우 디바이스 토큰이 최신 상태인지 확인합니다. 이 예외를 제외하고 전송에 실패해도 Amazon SNS는 플랫폼 엔드포인트를 비활성화하지 않습니다.

`InvalidPlatformToken` 전송 실패 이벤트가 발생하는 또 다른 경우는 등록된 디바이스 토큰이 해당 메시지를 전송하려는 애플리케이션에 속하지 않는 경우입니다. 이 경우 Google은 *SENDER\$1ID\$1MISMATCH* 오류를 반환합니다. 이 예외를 제외하고 전송에 실패하면 Amazon SNS가 플랫폼 엔드포인트를 비활성화합니다.

애플리케이션에 대한 [전송 상태 로깅](topics-attrib.md)을 설정할 때 FCM v1 API에서 수신한 모든 관찰된 오류 코드를 CloudWatch에서 사용할 수 있습니다.

애플리케이션에 대한 전송 이벤트를 수신하려면 [사용 가능한 애플리케이션 이벤트](application-event-notifications.md#application-event-notifications-events) 섹션을 참조하세요.

## 기한 경과 토큰 제거
<a name="sns-removing-stale-tokens"></a>

엔드포인트 디바이스로의 메시지 전송이 실패하기 시작하면 토큰은 오래된 것으로 간주됩니다. Amazon SNS는 이러한 기한 경과 토큰을 플랫폼 애플리케이션의 비활성화된 엔드포인트로 설정합니다. 비활성화된 엔드포인트에 게시하면 Amazon SNS는 `EndpointDisabled`의 `FailureType`을 사용하여 `EventDeliveryFailure` 이벤트를 반환하고 *엔드포인트의 `FailureMessage`는 비활성화됩니다*. 애플리케이션의 전송 이벤트를 수신하려면 [사용 가능한 애플리케이션 이벤트](application-event-notifications.md#application-event-notifications-events) 섹션을 참조하세요.

Amazon SNS에서 이 오류가 발생하면 플랫폼 애플리케이션에서 기한 경과 토큰을 제거하거나 업데이트해야 합니다.