

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración de una aplicación móvil en Amazon SNS
<a name="mobile-push-send"></a>

En esta sección se describe cómo configurar aplicaciones móviles en la Consola de administración de AWS con la información descrita en [Requisitos previos para las notificaciones de usuario de Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Requisitos previos para las notificaciones de usuario de Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Para empezar a utilizar las notificaciones push para móvil de Amazon SNS, necesita lo siguiente:
+ Un conjunto de credenciales para conectarse a uno de los servicios de notificaciones push compatibles: ADM, Baidu APNs, FCM, MPNS o WNS.
+ Un token de dispositivo o ID de registro para la aplicación y el dispositivo móviles.
+ Amazon SNS configurado para enviar mensajes de notificaciones de inserción a los puntos de enlace móviles.
+ Una aplicación móvil que esté registrada y configurada para utilizar uno de los servicios de notificaciones de inserción compatibles.

Para registrar su aplicación a un servicio de notificaciones push, tiene que seguir varios pasos. Amazon SNS necesita parte de la información que proporciona al servicio de notificaciones push para poder enviar mensajes de notificaciones push al punto de enlace móvil. En general, necesita las credenciales necesarias para establecer una conexión con el servicio de notificaciones de inserción, un token de dispositivo o ID de registro (que represente el dispositivo y la aplicación móviles) que haya recibido del servicio de notificaciones de inserción y la aplicación móvil registrada en el servicio de notificaciones de inserción. 

La forma exacta que las credenciales adoptan varía según la plataforma móvil, pero, en todos los casos, estas credenciales se deben enviar mientras se establece conexión con la plataforma. Se genera un conjunto de credenciales para cada aplicación móvil, que debe utilizarse para enviar un mensaje a cualquier instancia de dicha aplicación. 

Los nombres específicos variarán según el servicio de notificaciones de inserción que se utilice. *Por ejemplo, si se utiliza APNs como servicio de notificaciones push, se necesita un token de dispositivo.* O bien, cuando utilice FCM, el token de dispositivo equivalente se denomina *ID de registro*. El *token de dispositivo* o el *ID de registro* es una cadena que el sistema operativo del dispositivo móvil envía a la aplicación. Sirve para identificar de forma exclusiva una instancia de una aplicación móvil que se ejecuta en un determinado dispositivo móvil y puede considerarse un identificador único de este par concreto de aplicación y dispositivo. 

Amazon SNS almacena las credenciales (además de otras configuraciones) como recurso de aplicación de una plataforma. Los tokens de dispositivo (de nuevo con algunos parámetros adicionales) se representan como objetos denominados *puntos de conexión de la plataforma*. Cada punto de enlace de la plataforma pertenece a una aplicación de plataforma específica y es posible comunicarse con cada uno de ellos usando las credenciales que se almacenan en su correspondiente aplicación de plataforma.

En las secciones siguientes se incluyen los requisitos previos de cada uno de los servicios de notificaciones push compatibles. Una vez que hayas obtenido la información necesaria, puedes enviar un mensaje de notificación push mediante la Consola de administración de AWS función push móvil de Amazon SNS. APIs Para obtener más información, consulte [Configuración de notificaciones push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Creación de una aplicación de plataforma de Amazon SNS
<a name="mobile-push-send-register"></a>

Para que Amazon SNS envíe notificaciones a puntos de conexión móviles, ya sea directamente o mediante suscripciones a un tema, primero debe crear una aplicación de plataforma. Después de registrar la aplicación en AWS, tendrá que crear un punto de conexión tanto para la aplicación como para el dispositivo móvil. Este punto de conexión permite a Amazon SNS enviar mensajes al dispositivo.

**Para crear una aplicación de plataforma, siga estos pasos:**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Platform applications** (Aplicaciones de plataforma), elija **Create platform application** (Crear aplicación de plataforma).

1. Elija su **Región de AWS**. Para obtener una lista de las regiones de AWS en las que puede crear aplicaciones móviles, consulte [Regiones compatibles con aplicaciones móviles de Amazon SNS](sns-mobile-push-supported-regions.md).

1. Introduzca los siguientes **detalles de la aplicación**:
   + **Nombre de la aplicación**: escriba un **nombre** de la aplicación de plataforma. El nombre puede contener entre 1 y 256 caracteres y puede incluir mayúsculas y minúsculas, números, guiones, guiones bajos y puntos.
   + **Plataforma de notificaciones push**: seleccione el **servicio de notificaciones** adecuado en el que esté registrada la aplicación (por ejemplo, Apple Push Notification service (APNs) o Firebase Cloud Messaging (FCM)).

1. Según la plataforma que haya seleccionado, tendrá que proporcionar credenciales específicas:
   + Para **APNs** (servicio de notificaciones push de Apple): elija entre la autenticación **basada en tokens** o la **basada en certificados**.
     + Para la autenticación basada en tokens, cargue un **archivo.p8** (generado mediante Keychain Access).
     + Para la autenticación basada en certificados, cargue un **archivo.p12** (también exportado desde Keychain Access).
   + Para **FCM** (Firebase Cloud Messaging): introduzca la **clave de servidor** desde la consola de Firebase.
   + Para **otras plataformas** (como ADM o GCM): introduzca las **claves de API** o **credenciales** correspondientes.

1. Tras introducir los detalles necesarios, elija **Crear aplicación de plataforma**. Esta acción registra la aplicación en Amazon SNS y crea el objeto de aplicación de plataforma correspondiente.

1. Tras la creación, Amazon SNS genera y devuelve un [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) (nombre de recurso de Amazon). Este ARN identifica de forma exclusiva la aplicación de su plataforma y se utiliza al crear puntos de conexión para dispositivos móviles.

# Configuración de un punto de conexión de plataforma de Amazon SNS para notificaciones móviles
<a name="mobile-platform-endpoint"></a>

Cuando una aplicación y un dispositivo móvil se registran en un servicio de notificaciones push (como APNs Firebase Cloud Messaging), el servicio de notificaciones push devuelve un token de dispositivo. Amazon SNS utiliza este token de dispositivo para crear un punto de conexión de plataforma, que actúa como destino para enviar mensajes de notificación push directos a la aplicación del dispositivo. El punto de conexión de la plataforma actúa como puente y enruta los mensajes enviados por Amazon SNS al servicio de notificaciones push para su entrega al dispositivo móvil correspondiente. Para obtener más información, consulte [Requisitos previos para las notificaciones de usuario de Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) y [Configuración de notificaciones push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Descripción de los tokens de dispositivo y los puntos de conexión de plataforma
<a name="device-token-platform-endpoint"></a>

Un token de dispositivo identifica de forma exclusiva un dispositivo móvil registrado en un servicio de notificaciones push (por ejemplo APNs, Firebase Cloud Messaging). Cuando una aplicación se registra en el servicio de notificaciones push, genera un token de dispositivo específico para esa aplicación y ese dispositivo. Amazon SNS utiliza este token de dispositivo para crear un punto de conexión de plataforma dentro de la aplicación de plataforma correspondiente.

El punto de conexión de la plataforma permite a Amazon SNS enviar mensajes de notificación push al dispositivo a través del servicio de notificaciones push, de forma que mantiene la conexión entre la aplicación y el dispositivo del usuario.

## Creación de un punto de enlace de plataforma
<a name="mobile-platform-endpoint-create"></a>

Para insertar notificaciones push en una aplicación con Amazon SNS, primero debe registrarse el token de dispositivo de la aplicación en Amazon SNS llamando a la acción de creación del punto de enlace de plataforma. Esta acción toma el nombre de recurso de Amazon (ARN) de la aplicación de plataforma y el token de dispositivo como parámetros y devuelve el ARN del punto de enlace de plataforma creado.

La acción [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) hace lo siguiente:
+ Si el punto de conexión de plataforma ya existe, no lo vuelve a crear. Devuelva al intermediario el ARN del punto de enlace de plataforma existente.
+ Si ya existe el punto de conexión de plataforma con el mismo token de dispositivo pero diferentes opciones, no lo vuelve a crear. Envíe una excepción al intermediario.
+ Si el punto de conexión de plataforma no existe, lo crea. Devuelva al intermediario el ARN del punto de enlace de plataforma que acaba de crear.

No debe llamar a la acción de creación de un punto de enlace de plataforma inmediatamente cada vez que se inicie una aplicación; este enfoque no siempre proporciona un punto de enlace que funcione. Esto puede ocurrir, por ejemplo, cuando una aplicación se desinstala y se vuelve a instalar en el mismo dispositivo, y su punto de enlace que ya existe, pero está deshabilitado. Un proceso de registro correcto debe realizar las operaciones siguientes:

1. Asegurarse de que exista un punto de enlace de plataforma para esta combinación de aplicación y dispositivo.

1. Asegurarse de que el token de dispositivo del punto de enlace de plataforma es el último token de dispositivo válido.

1. Asegurarse de que el punto de enlace de plataforma esté habilitado y listo para ser utilizado.

## Pseudocódigo
<a name="mobile-platform-endpoint-pseudo-code"></a>

El siguiente pseudocódigo describe una práctica recomendada para crear un punto de enlace de plataforma que funcione, sea actual y esté habilitado en una amplia variedad de condiciones de partida. Este enfoque funciona tanto si se trata de la primera vez que la aplicación se registra o no, como si el punto de enlace de plataforma de esta aplicación ya existe, o si el punto de enlace de plataforma está habilitado, tiene el token de dispositivo correcto, etc. Es seguro llamarlo varias veces seguidas, ya que no creará puntos de enlace de plataforma duplicados ni cambiará un punto de enlace de plataforma si ya está actualizado y activado.

```
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
```

Este enfoque se puede utilizar siempre que la aplicación quiera registrarse o volver a registrarse. También se puede utilizar para notificar a Amazon SNS un cambio en el token del dispositivo. En este caso, solo tiene que llamar a la acción con el valor de token del último dispositivo. Tenga en cuenta los elementos siguientes de este enfoque:
+ Hay dos casos en los que puede llamar a la acción de crear un punto de enlace de plataforma. Puede llamarse justo al principio, cuando la aplicación no conoce su propio ARN de punto de enlace de plataforma, como es el caso durante un primer registro. También se puede llamar si la llamada inicial a la acción `GetEndpointAttributes` genera un error con una excepción “no encontrado”, como ocurriría si la aplicación conoce su ARN de punto de conexión, pero este se ha eliminado.
+ Se llama a la acción `GetEndpointAttributes` para verificar el estado del punto de conexión de plataforma, aunque dicho punto de conexión se acabe de crear. Esto ocurre cuando el punto de enlace de plataforma ya existe, pero está deshabilitado. En este caso, la acción de creación del punto de enlace de plataforma se realiza correctamente, pero no habilita el punto de enlace de plataforma, por lo que debe comprobar el estado del punto de enlace de plataforma antes de devolver el resultado correcto.

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

En el siguiente código se muestra cómo implementar el pseudocódigo anterior mediante los clientes de Amazon SNS proporcionados por. AWS SDKs

Para usar un AWS SDK, debe configurarlo con sus credenciales. Para obtener más información, consulte [Los archivos de configuración y credenciales compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

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

**AWS CLI**  
**Creación de un punto de conexión de aplicación de plataforma**  
En el siguiente ejemplo de `create-platform-endpoint`, se crea un punto de conexión para la aplicación de plataforma especificada mediante el token especificado.  

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

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

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

**SDK para Java 2.x**  
 Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de 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());
        }
    }
}
```

------

 Para obtener más información, consulte [Acciones de la API de inserción móvil](mobile-push-api.md).

## Resolución de problemas
<a name="mobile-platform-endpoint-problems"></a>

### Llamar repetidamente a la acción de creación de un punto de enlace de plataforma con un token de dispositivo obsoleto
<a name="mobile-platform-endpoint-problems-outdated"></a>

En especial para los puntos de conexión de FCM, puede que piense que es mejor almacenar el primer token de dispositivo generado por la aplicación y llamar a la acción de creación de punto de conexión de plataforma con dicho token de dispositivo cada vez que se inicia la aplicación. Esto puede parecer correcto, dado que la aplicación no tiene que administrar el estado del token de dispositivo y Amazon SNS actualizará automáticamente el token de dispositivo a su valor más reciente. Sin embargo, esta solución presenta una serie de problemas graves:
+ Amazon SNS depende de los comentarios de FCM para actualizar los tokens de dispositivo vencidos en tokens de dispositivo nuevos. FCM retiene información en tokens de dispositivo antiguos durante un tiempo, aunque no de forma indefinida. Cuando FCM se olvide de la conexión entre el token de dispositivo antiguo y el nuevo, Amazon SNS ya no podrá actualizar el token de dispositivo almacenado en el punto de enlace de plataforma a su valor correcto; en su lugar, desactivará el punto de enlace de plataforma.
+ La aplicación de plataforma contendrá varios puntos de enlace de plataforma correspondientes al mismo token de dispositivo.
+ Amazon SNS impone una cuota a la cantidad de puntos de enlace de plataforma que se pueden crear empezando por el mismo token de dispositivo. Al final, la creación de los nuevos puntos de enlace generará un error con la excepción de parámetro no válido y el siguiente mensaje de error: "This endpoint is already registered with a different token".

Para obtener más información acerca de la administración de puntos de conexión de FCM, consulte [Administración de los puntos de conexión de Firebase Cloud Messaging en Amazon SNS](sns-fcm-endpoint-management.md).

### Reactivación de un punto de enlace de plataforma asociado a un token de dispositivo no válido
<a name="mobile-platform-endpoint-problems-invalid"></a>

Cuando una plataforma móvil (como APNs FCM) informa a Amazon SNS de que el token de dispositivo utilizado en la solicitud de publicación no es válido, Amazon SNS deshabilita el punto de enlace de la plataforma asociado a ese token de dispositivo. A continuación, Amazon SNS rechaza las publicaciones posteriores que se efectúen en ese token de dispositivo. Aunque le parezca que es mejor volver a activar el punto de enlace de plataforma y seguir publicando, en la mayoría de los casos esta solución no funciona: los mensajes que se publican no se entregan y el punto de enlace de plataforma se vuelve a desactivar poco después.

Esto se debe a que el token de dispositivo asociado al punto de enlace de plataforma en realidad no es válido. Las entregas que se le hacen no pueden realizarse correctamente, puesto que el token ya no corresponde a ninguna aplicación instalada. La próxima vez que se publique en ella, la plataforma móvil volverá a informar a Amazon SNS que el token de dispositivo no es válido y Amazon SNS volverá a desactivar el punto de enlace de plataforma.

Para volver a habilitar un punto de enlace de plataforma desactivado, debe asociarlo a un token de dispositivo válido (con una llamada de acción de definición de los atributos del punto de enlace) y después habilitarlo. Solo entonces las entregas a dicho punto de enlace de plataforma se realizarán correctamente. La única vez en que volver a habilitar un punto de enlace de plataforma sin actualizar su token de dispositivo funcione será cuando un token de dispositivo que no era válido y estaba asociado a dicho punto de enlace vuelva a ser válido. Esto puede ocurrir, por ejemplo, cuando se desinstala una aplicación y se vuelve a instalar en el mismo dispositivo móvil y recibe el mismo token de dispositivo. El enfoque que acabamos de presentar realiza esta operación asegurándose de volver a habilitar un punto de enlace de plataforma solo después de comprobar que el token de dispositivo que tiene asociado es el más actual disponible.

# Integración de tokens de dispositivo con Amazon SNS para las notificaciones móviles
<a name="mobile-push-send-devicetoken"></a>

La primera vez que registras una aplicación y un dispositivo móvil en un servicio de notificaciones, como el Servicio de Notificaciones Push de Apple (APNs) y Firebase Cloud Messaging (FCM), el servicio devuelve IDs los identificadores del dispositivo o el registro. Se tokens/IDs añaden a Amazon SNS para crear un punto final para la aplicación y el dispositivo mediante la [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)API. Una vez creado el punto de conexión, se devuelve un [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html), que Amazon SNS utiliza para dirigir las notificaciones a la aplicación o dispositivo correctos.

Puede añadir los identificadores de dispositivo o el registro IDs a Amazon SNS de las siguientes maneras:
+ Añada manualmente un único token a través del Consola de administración de AWS
+ Cargue varios tokens utilizando la API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Registre los tokens para dispositivos futuros

****Para añadir manualmente un identificador de dispositivo o un identificador de registro****

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la aplicación y, a continuación, elija **Editar**. Si aún no ha creado una aplicación de plataforma, siga la guía de [Creación de una aplicación de plataforma de Amazon SNS](mobile-push-send-register.md) para hacerlo ahora.

1. Seleccione **Crear punto de conexión**.

1. En el cuadro **Token de punto de conexión**, introduzca el **token** o el **ID de registro**, en función del servicio de notificaciones que utilice (por ejemplo, el ID de registro de FCM).

1. (Opcional) Introduzca datos adicionales en el campo **Datos de usuario**. Estos datos deben estar codificados en UTF-8 y ocupar menos de 2 KB.

1. Seleccione **Crear punto de conexión**.

Una vez creado el punto de conexión, puede enviar mensajes directamente al dispositivo móvil o a dispositivos móviles que estén suscritos a un tema de Amazon SNS.

****Cómo cargar varios tokens utilizando la API `CreatePlatformEndpoint`****

En los siguientes pasos se muestra cómo utilizar la aplicación Java (`bulkupload`paquete) de ejemplo proporcionada por AWS para cargar varios tokens (tokens de dispositivo o registro IDs) a Amazon SNS. Puede utilizar esta aplicación de muestra como ayuda para comenzar a cargar sus tokens. 
**nota**  
Los siguientes pasos utilizan el IDE de Eclipse Java. En los pasos se da por sentado que ha instalado AWS SDK para Java y dispone de las credenciales AWS de seguridad correspondientes. Cuenta de AWS Para obtener más información, consulte [AWS SDK para Java](https://aws.amazon.com/sdkforjava/). Para obtener más información sobre credenciales, consulte [Credenciales de seguridad de AWS](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) en la *Guía del usuario de IAM*. 

1. Descargue y descomprima el archivo [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Cree un nuevo **Proyecto de Java** en Eclipse e importe la carpeta `SNSSamples` al proyecto. 

1. Descargue la [Biblioteca OpenCSV](http://sourceforge.net/projects/opencsv/) y añádala a la ruta de compilación.

1. En el archivo `BulkUpload.properties`, especifique lo siguiente: 
   + Su `ApplicationArn` (ARN de la aplicación de plataforma).
   + La ruta completa del archivo CSV que contiene los tokens.
   + Nombres de los archivos de registro de los tokens correctos y fallidos. Por ejemplo, `goodTokens.csv` y `badTokens.csv`.
   + (Opcional) Una configuración para el delimitador, el carácter de comilla y el número de subprocesos que se van a utilizar.

   El `BulkUpload.properties` finalizado ha de tener un aspecto similar al siguiente:

   ```
   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.  Ejecute la aplicación **BatchCreatePlatformEndpointSample.java** para cargar los tokens en Amazon SNS. Los tokens que se carguen correctamente se registrarán en `goodTokens.csv`, mientras que los que tengan un formato incorrecto se registrarán en `badTokens.csv`.

**Cómo registrar tokens de dispositivo para futuras instalaciones de aplicaciones**

Dispone de dos opciones para realizar este proceso:

**Uso del servicio de Amazon Cognito**  
Su aplicación móvil puede utilizar credenciales de seguridad temporales para crear puntos de conexión. Para generar credenciales temporales se recomienda utilizar Amazon Cognito. Para obtener más información, consulte la *[Guía para desarrolladores de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*.   
Para realizar un seguimiento de los [registros](application-event-notifications.md) de aplicaciones, utilice los eventos de Amazon SNS para recibir notificaciones cuando se cree un nuevo ARNs punto final.  
Como alternativa, puede utilizar la API [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html) para recuperar la lista de puntos de conexión registrados.

**Uso de un servidor proxy**  
Si la infraestructura de la aplicación ya admite el registro de dispositivos en el momento de la instalación, puede usar el servidor como proxy. Reenviará los tokens de dispositivo a Amazon SNS a través de la API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html).  
El ARN del punto de conexión creado por Amazon SNS se devolverá y el servidor podrá almacenarlo para la publicación de mensajes futuros.

# Métodos de autenticación de notificaciones push de Amazon SNS Apple
<a name="sns-apple-authentication-methods"></a>

Puede autorizar a Amazon SNS a enviar notificaciones push a su aplicación de iOS o macOS proporcionando información que le identifique como desarrollador de esa aplicación. Para autenticarse, proporcione una *clave* o un *certificado* [al crear una aplicación de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html); ambas cosas puede obtenerlas en su cuenta de Apple Developer.

**Clave de firma de token**  
Clave de firma privada que Amazon SNS utiliza para firmar los tokens de autenticación del Servicio de Notificaciones Push de Apple (APNs).  
Si proporciona una clave de firma, Amazon SNS utiliza un token para autenticarse en cada notificación push que envíe. APNs Con su clave de firma, puede enviar notificaciones automáticas a entornos de APNs producción y entornos aislados.  
La clave de firma no caduca, y se puede utilizar la misma clave de firma para varias aplicaciones. Para obtener más información, consulta Cómo [comunicarse APNs mediante el uso de tokens de autenticación](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) en la sección de **ayuda de la cuenta de desarrollador** del sitio web de Apple.

**Certificate**  
Un certificado TLS que Amazon SNS utiliza para autenticarse cuando envías APNs notificaciones push. Puede obtener este certificado en su cuenta de Apple Developer.  
Los certificados caducan al cabo de un año. Cuando eso sucede, se debe crear un nuevo certificado y proporcionárselo a Amazon SNS. Para obtener más información, consulte [Establecer una conexión basada en certificados en el APNs sitio web para desarrolladores de Apple](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns).

**Para administrar la APNs configuración mediante la consola de AWS administración**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la **aplicación** cuya APNs configuración desee editar y, a continuación, elija **Editar**. Si aún no ha creado una aplicación de plataforma, siga la guía de [Creación de una aplicación de plataforma de Amazon SNS](mobile-push-send-register.md) para hacerlo ahora.

1. Seleccione **Editar** para modificar la configuración de la aplicación de su plataforma.

1. En la sección **Tipo de autenticación**, elija una de las siguientes opciones:
   + **Autenticación basada en fichas** (recomendada para integraciones modernas APNs )
   + **Autenticación basada en certificados** (método anterior)

1. Configure sus **credenciales** en función del tipo de autenticación:
   + **Para la autenticación basada en token:**
     + Cargue el **archivo .p8**, que es la clave de firma del token que ha descargado de su cuenta de Apple Developer.
     + Introduzca el **ID de clave de firma** que encontrará en la cuenta de Apple Developer. Vaya a **Certificados**, **perfiles IDs y** **claves** y seleccione la **clave** que desee usar.
     + Proporcione el **Identificador del equipo** de su cuenta de Apple Developer. Puede encontrarlo en la página Membresía.
     + Introduzca el **Identificador de paquete** asignado a su aplicación. Puede encontrarlo en Certificados IDs y perfiles, aplicación IDs.
   + **Para la autenticación basada en certificados:**
     + Cargue el **archivo .p12** del certificado TLS. Puede exportar este archivo desde Acceso a Llaveros en macOS después de descargar el certificado desde su cuenta de Apple Developer.
     + Si ha asignado una **contraseña** al certificado .p12, introdúzcala aquí.

1. Tras introducir las credenciales necesarias, seleccione **Guardar cambios** para actualizar la configuración.

# Configuración de autenticación en la integración de Amazon SNS con Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

En este tema se describe cómo obtener las credenciales de la API de FCM (HTTP v1) necesarias de Google para utilizarlas con la AWS API, AWS CLI y la. Consola de administración de AWS

**importante**  
26 de marzo de 2024: Amazon SNS admite la API de HTTP v1 de FCM para dispositivos Apple y destinos de Webpush. Le recomendamos que migre sus aplicaciones de notificaciones push para el móvil existentes a la última API de HTTP v1 de FCM el 1 de junio de 2024 o antes para evitar que se interrumpan las aplicaciones.  
18 de enero de 2024: Amazon SNS introdujo la compatibilidad con la API de HTTP v1 de FCM para la entrega de notificaciones push para móvil a dispositivos Android.  
20 de junio de 2023: Google dejó de utilizar su API de HTTP antigua de Firebase Cloud Messaging (FCM). Amazon SNS ahora admite la entrega a todos los tipos de dispositivos mediante la API de HTTP v1 de FCM. Le recomendamos que migre sus aplicaciones de notificaciones push para el móvil existentes a la última API de HTTP v1 de FCM el 1 de junio de 2024 o antes para evitar que se interrumpa el servicio.

Puede autorizar a Amazon SNS a enviar notificaciones push a sus aplicaciones proporcionando información que le identifique como desarrollador de esa aplicación. Para autenticarse, proporcione una **clave de API** o un **token** [al crear una aplicación de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Puede obtener la siguiente información desde la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds):

**Clave de API**  
La clave de API es una credencial que se utiliza al llamar a la API heredada de Firebase. Google eliminará el legado APIs de FCM el 20 de junio de 2024. Si utiliza actualmente una clave de API como credencial de plataforma, puede actualizar la credencial de plataforma seleccionando **Token** como opción y subiendo el archivo JSON asociado a su aplicación de Firebase.

**Token**  
Al llamar a la API de HTTP v1, se utiliza un token de acceso de corta duración. Esta es la API sugerida de Firebase para enviar notificaciones push. Para generar los tokens de acceso, Firebase proporciona a los desarrolladores un conjunto de credenciales en forma de archivo de clave privada (también denominado archivo service.json).

## Requisito previo
<a name="sns-fcm-authentication-prerequisite"></a>

Debe obtener sus credenciales service.json de FCM para poder empezar a administrar la configuración de FCM en Amazon SNS. Para obtener tus credenciales de service.json, consulta Cómo [migrar de una versión antigua de FCM APIs a HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) en la documentación de Google Firebase.

## Administración de la configuración de FCM mediante la CLI
<a name="sns-fcm-authentication-api"></a>

Puedes crear notificaciones push de FCM mediante la AWS API. La cantidad y el tamaño de los recursos de Amazon SNS en una AWS cuenta son limitados. Para obtener más información, consulte [Puntos de conexión y cuotas de Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) en la *Guía de Referencia general de AWS *.

**Para crear una notificación push de FCM junto con un tema AWS (API) de Amazon SNS**  
Cuando se utilizan credenciales de **clave**, `PlatformCredential` es `API key`. Cuando se utilizan credenciales de **token**, `PlatformCredential` es un archivo de clave privada con formato JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Para recuperar un tipo de credencial de FCM para un tema (API) de Amazon SNS existente AWS**  
Recupera el tipo de credencial `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Para configurar un atributo de FCM para un tema AWS (API) de Amazon SNS existente**  
Establece el atributo de FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Administración de la configuración de FCM mediante la consola
<a name="sns-fcm-authentication-cli"></a>

Puedes crear notificaciones push de FCM mediante la AWS Command Line Interface (CLI). La cantidad y el tamaño de los recursos de Amazon SNS en una AWS cuenta son limitados. Para obtener más información, consulte [Amazon Simple Notification Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/sns.html) (Limitación y cuotas de Amazon Simple Notification Service). 

**Para crear una notificación push de FCM junto con un tema de Amazon SNS (AWS CLI)**  
Cuando se utilizan credenciales de **clave**, `PlatformCredential` es `API key`. Cuando se utilizan credenciales de **token**, `PlatformCredential` es un archivo de clave privada con formato JSON. Al utilizar la AWS CLI, el archivo debe estar en formato de cadena y se deben ignorar los caracteres especiales. Para formatear el archivo correctamente, Amazon SNS recomienda utilizar el siguiente comando: `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Para recuperar un tipo de credencial de FCM para un tema existente de Amazon SNS (AWS CLI)**  
Recupera el tipo de credencial `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Para establecer un atributo de FCM para un tema existente de Amazon SNS (AWS CLI)**  
Establece el atributo de FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Administración de la configuración de FCM (consola)
<a name="sns-fcm-authentication-console"></a>

Realice los siguientes pasos para introducir y administrar sus credenciales de Firebase Cloud Messaging (FCM) en Amazon SNS.

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Notificaciones push**.

1. En la sección **Aplicaciones de plataforma**, seleccione la **aplicación de plataforma FCM** cuyas credenciales desee editar y, a continuación, elija **Editar**.

1. En la sección **Credenciales de Firebase Cloud Messaging**, elija una de las siguientes opciones:
   + **Autenticación basada en tokens** (método recomendado): cargue el **archivo de clave privada** (JSON) que ha descargado de la consola de Firebase. Este archivo contiene las credenciales necesarias para generar tokens de acceso de corta duración para las notificaciones de FCM. Para obtener este archivo:

     1. Vaya a la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. En **Configuración del proyecto**, seleccione **Cloud Messaging**.

     1. Descargue el archivo JSON de **clave privada** (para usarlo en el método de autenticación basado en tokens).
   + **Autenticación con clave de API**: si prefiere utilizar el método de autenticación de clave de API anterior, introduzca la **clave de API de Google** en el campo proporcionado. Para obtener este archivo:

     1. Vaya a la [consola de aplicaciones de Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. En **Configuración de proyecto**, seleccione **Cloud Messaging**.

     1. Copie la **clave del servidor** (clave de API) que se utilizará para enviar notificaciones.

1. Cuando termine de realizar los cambios, seleccione **Save changes** (Guardar cambios).

**Temas relacionados**
+ [Uso de cargas útiles de Google Firebase Cloud Messaging v1 en Amazon SNS](sns-fcm-v1-payloads.md)

# Administración de los puntos de conexión de Firebase Cloud Messaging en Amazon SNS
<a name="sns-fcm-endpoint-management"></a>

## Administración y mantenimiento de los tokens de dispositivo
<a name="sns-managing-device-tokens"></a>

Puede garantizar la capacidad de entrega de las notificaciones push de su aplicación móvil siguiendo estos pasos:

1. Guarde todos los tokens del dispositivo, el punto final ARNs de Amazon SNS correspondiente y las marcas de tiempo en el servidor de aplicaciones.

1. Elimine todos los tokens obsoletos y elimine el punto de enlace de Amazon ARNs SNS correspondiente.

Cuando la aplicación se inicie por primera vez, recibirá un token de dispositivo (también llamado token de registro) para el dispositivo. Este token de dispositivo lo crea el sistema operativo del dispositivo y está vinculado a su aplicación de FCM. Una vez que reciba este token de dispositivo, podrá registrarlo en Amazon SNS como punto de conexión de la plataforma. Le recomendamos que almacene el token de dispositivo, el ARN del punto de conexión de la plataforma de Amazon SNS y la marca de tiempo guardándolos en su servidor de aplicaciones o en otro almacén persistente. Para configurar su aplicación de FCM para recuperar y almacenar tokens de dispositivos, consulte [Retrieve and store registration tokens](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) en la documentación de *Firebase* de Google.

Es importante que mantenga up-to-date los tokens. Los tokens de los dispositivos de sus usuarios pueden cambiar si se produce alguna de las circunstancias siguientes:

1. La aplicación móvil se restaura en un dispositivo nuevo.

1. El usuario desinstala o actualiza la aplicación.

1. El usuario borra los datos de la aplicación.

Cuando el token de su dispositivo cambie, le recomendamos que actualice el punto de conexión de Amazon SNS correspondiente con el nuevo token. Esto permite a Amazon SNS seguir comunicándose con el dispositivo registrado. Puede hacerlo implementando el siguiente pseudocódigo en su aplicación móvil. Describe una práctica recomendada para crear y mantener puntos de conexión de plataforma habilitados. Este enfoque se puede utilizar cada vez que se inician las aplicaciones móviles o como un trabajo programado en segundo plano.

### Pseudocódigo
<a name="sns-device-token-pseudo-code"></a>

Use el siguiente pseudocódigo de FCM para administrar y mantener los tokens de dispositivo.

```
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
```

Para obtener más información sobre los requisitos de actualización de los tokens, consulte [Update Tokens on a Regular Basis](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) en la documentación de *Firebase* de Google.

## Detección de tokens no válidos
<a name="sns-detecting-invalid-tokens"></a>

Cuando se envíe un mensaje a un punto de conexión de FCM v1 con un token de dispositivo no válido, Amazon SNS recibirá una de las siguientes excepciones:
+ `UNREGISTERED` (HTTP 404): cuando Amazon SNS reciba esta excepción, usted recibirá un error en la entrega con un `FailureType` de `InvalidPlatformToken` y un `FailureMessage` de *Platform token associated with the endpoint is not valid*. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.
+ `INVALID_ARGUMENT` (HTTP 400): cuando Amazon SNS recibe esta excepción, significa que el token del dispositivo o la carga útil del mensaje no son válidos. Para obtener más información, consulta [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentación de *Firebase* de Google.

Como `INVALID_ARGUMENT` se puede devolver en cualquiera de estos casos, Amazon SNS devolverá un `FailureType` de `InvalidNotification` y un `FailureMessage` de *Notification body is invalid*. Cuando reciba este error, compruebe que la carga útil es correcta. Si es correcto, verifica que el token del dispositivo lo sea up-to-date. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.

Otro caso en el que se producirá un evento de error de entrega `InvalidPlatformToken` es cuando el token de dispositivo registrado no pertenezca a la aplicación que intenta enviar ese mensaje. En este caso, Google devolverá un error *SENDER\$1ID\$1MISMATCH*. Amazon SNS deshabilitará el punto de conexión de la plataforma cuando se produzca un error en una entrega con esta excepción.

Todos los códigos de error observados recibidos de la API v1 de FCM están disponibles CloudWatch cuando configuras el [registro del estado de entrega](topics-attrib.md) de tu aplicación. 

Para recibir los eventos de entrega de su aplicación, consulte [Eventos de aplicaciones disponibles](application-event-notifications.md#application-event-notifications-events).

## Eliminación de tokens obsoletos
<a name="sns-removing-stale-tokens"></a>

Los tokens se consideran obsoletos una vez que la entrega de mensajes al dispositivo de punto de conexión comienza a fallar. Amazon SNS establece estos tokens obsoletos como puntos de conexión deshabilitados para su aplicación de plataforma. Cuando publique en un punto de conexión deshabilitado, Amazon SNS devolverá un evento `EventDeliveryFailure` con el `FailureType` de `EndpointDisabled` y un `FailureMessage` de *Endpoint is disabled*. Para recibir los eventos de entrega de su aplicación, consulte [Eventos de aplicaciones disponibles](application-event-notifications.md#application-event-notifications-events).

Cuando reciba este error de Amazon SNS, tendrá que eliminar o actualizar el token obsoleto de su aplicación de plataforma.