

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Invio di notifiche push per dispositivi mobili con Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Puoi usare Amazon SNS per inviare messaggi di notifica push direttamente alle app sui dispositivi mobili. I messaggi di notifica push inviati a un dispositivo mobile possono apparire nell'app mobile come avvisi di messaggi, aggiornamenti di badge o avvisi sonori. 

![\[Panoramica delle notifiche push per dispositivi mobili di Amazon SNS\]](http://docs.aws.amazon.com/it_it/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Come funzionano le notifiche utente di Amazon SNS](#sns-how-user-notifications-work)
+ [Configurazione delle notifiche push con Amazon SNS](#sns-user-notifications-process-overview)
+ [Configurazione di un'app mobile in Amazon SNS](mobile-push-send.md)
+ [Utilizzo di Amazon SNS per notifiche push su dispositivi mobili](mobile-push-notifications.md)
+ [Attributi dell'app mobile Amazon SNS](sns-msg-status.md)
+ [Notifiche degli eventi delle applicazioni Amazon SNS per applicazioni mobili](application-event-notifications.md)
+ [Operazioni API push per dispositivi mobili](mobile-push-api.md)
+ [Errori comuni dell'API push mobile di Amazon SNS](mobile-push-api-error.md)
+ [Utilizzo dell'attributo time to live message di Amazon SNS per le notifiche push mobili](sns-ttl.md)
+ [Regioni supportate dall'applicazione mobile Amazon SNS](sns-mobile-push-supported-regions.md)
+ [Best practice per la gestione delle notifiche push mobili di Amazon SNS](mobile-push-notifications-best-practices.md)

## Come funzionano le notifiche utente di Amazon SNS
<a name="sns-how-user-notifications-work"></a>

L'invio di messaggi di notifica push a desktop e dispositivi mobili viene eseguito mediante uno dei seguenti servizi di notifica push supportati: 
+ Amazon Device Messaging (ADM)
+ Servizio Apple Push Notification (APNs) per iOS e Mac OS X
+ Baidu Cloud Push (Baidu)
+ Firebase Cloud Messaging (FCM)
+ Servizio di notifica push Microsoft per Windows Phone (MPNS)
+ Windows Push Notification Services (WNS)

I servizi di notifica push, come APNs FCM, mantengono una connessione con ogni app e dispositivo mobile associato registrato per utilizzare il loro servizio. Quando si registra un'app e un dispositivo mobile, la notifica push restituisce un token di dispositivo. Amazon SNS utilizza il token di dispositivo per creare un endpoint mobile a cui può inviare direttamente messaggi di notifica push. Per consentire la comunicazione tra Amazon SNS e i differenti servizi di notifica push, devi inviare le tue credenziali del servizio di notifica push ad Amazon SNS affinché le utilizzi a tuo nome. Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](#sns-user-notifications-process-overview). 

 Oltre a inviare direttamente messaggi di notifica push, puoi anche utilizzare Amazon SNS per inviare messaggi a endpoint mobili che dispongono di una sottoscrizione a un argomento. Il concetto è lo stesso della sottoscrizione di altri tipi di endpoint, ad esempio Amazon SQS, HTTP/S, e-mail e SMS, a un argomento, come descritto in [Che cos'è Amazon SNS?](welcome.md). La differenza è che Amazon SNS comunica mediante i servizi di notifica push affinché gli endpoint mobili con sottoscrizione ricevano i messaggi di notifica push inviati all'argomento.

## Configurazione delle notifiche push con Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Ottenere le credenziali e il token del dispositivo](sns-prerequisites-for-mobile-push-notifications.md) per le piattaforme mobili che si desidera supportare.

1. Utilizzare le credenziali per creare un oggetto application platform (`PlatformApplicationArn`) utilizzando Amazon SNS. Per ulteriori informazioni, consulta [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md).

1. Utilizza le credenziali ottenute per richiedere un token per il dispositivo mobile e l'app dal servizio di notifiche push. Il token che ottieni rappresenta il tuo dispositivo e la tua app per dispositivi mobili.

1. Utilizzare il token dispositivo e `PlatformApplicationArn` per creare un oggetto endpoint piattaforma (`EndpointArn`) utilizzando Amazon SNS. Per ulteriori informazioni, consulta [Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili](mobile-platform-endpoint.md).

1. `EndpointArn` viene quindi utilizzato per [pubblicare un messaggio in una app in un dispositivo mobile](mobile-push-send.md). Per ulteriori informazioni, consulta [Messaggistica diretta per dispositivi mobili Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) e API [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) (Pubblica) nella Guida API di Amazon Simple Notification Service.

# Configurazione di un'app mobile in Amazon SNS
<a name="mobile-push-send"></a>

Questo argomento descrive come configurare le applicazioni mobili Console di gestione AWS utilizzando le informazioni descritte in[Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Prerequisiti per le notifiche utente Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Per iniziare a utilizzare le notifiche push mobili di Amazon SNS, avrai bisogno di quanto segue:
+ Un set di credenziali per la connessione a uno dei servizi di notifica push supportati: ADM, Baidu, FCM APNs, MPNS o WNS.
+ Un token di dispositivo o un ID di registrazione per l'app per dispositivi mobili e il dispositivo.
+ Amazon SNS configurato per l'invio di messaggi di notifica push a endpoint mobili.
+ Un app per dispositivi mobili registrata e configurata per l'utilizzo di uno dei servizi di notifica push supportati.

La registrazione dell'applicazione a un servizio di notifica mobile comporta varie fasi. Amazon SNS necessita di alcune delle informazioni fornite al servizio di notifica push per inviare direttamente messaggi di notifica push all'endpoint mobile. In genere, hai bisogno delle credenziali necessarie per la connessione al servizio di notifica push, il token di dispositivo o l'ID di registrazione (che rappresenta il dispositivo mobile e l'app) ricevuti dal servizio di notifica push e l'app per dispositivi mobili registrata al servizio di notifica push. 

La forma esatta delle credenziali differisce a seconda della piattaforma mobile, ma in ogni caso, queste credenziali devono essere fornite durante una connessione alla piattaforma. Un set di credenziali viene generato per ogni app per dispositivi mobili e deve essere utilizzato per inviare un messaggio a qualsiasi istanza di quell'app. 

I nomi specifici variano a seconda del servizio di notifica push utilizzato. *Ad esempio, quando si utilizza APNs come servizio di notifica push, è necessario un token del dispositivo.* Quando invece utilizzi FCM, il token di dispositivo equivalente è denominato *ID di registrazione*. Il *token di dispositivo* o l'*ID di registrazione* è una stringa inviata all'applicazione dal sistema operativo del dispositivo mobile. Identifica in modo univoco un'istanza di un'app per dispositivi mobili eseguita su un determinato dispositivo mobile e può essere considerata come l'identificatore univoco di questa coppia app-dispositivo. 

Amazon SNS archivia le credenziali (e altre impostazioni) come risorsa di applicazione di piattaforma. I token del dispositivo (sempre con alcune impostazioni aggiuntive) sono rappresentati come oggetti chiamati *endpoint della piattaforma*. Ogni endpoint di piattaforma appartiene a una specifica applicazione di piattaforma ed è possibile comunicare con ognuno di questi endpoint utilizzando le credenziali archiviate nell'applicazione di piattaforma corrispondente.

Le sezioni seguenti includono i prerequisiti per ogni servizio di notifica push supportato. Una volta ottenute le informazioni sui prerequisiti, puoi inviare un messaggio di notifica push utilizzando il Console di gestione AWS o il push mobile di Amazon SNS. APIs Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Creazione di un'applicazione della piattaforma Amazon SNS
<a name="mobile-push-send-register"></a>

Per inviare notifiche da Amazon SNS agli endpoint mobili, direttamente o tramite abbonamenti a un argomento, devi prima creare un'applicazione di piattaforma. Dopo aver registrato l'app con AWS, devi creare un endpoint sia per l'app che per il dispositivo mobile. Questo endpoint consente ad Amazon SNS di inviare messaggi al dispositivo.

**Per creare un'applicazione della piattaforma**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona Notifiche **push**.

1. Nella sezione **Platform applications** (Applicazioni di piattaforma), scegli **Create platform application** (Crea applicazione di piattaforma).

1. Scegli il tuo **Regione AWS**. Per un elenco delle regioni AWS in cui è possibile creare applicazioni per dispositivi mobili, consulta [Regioni supportate dall'applicazione mobile Amazon SNS](sns-mobile-push-supported-regions.md).

1. Inserisci i seguenti **dettagli dell'applicazione**:
   + **Nome dell'applicazione**: fornite un **nome** per l'applicazione della piattaforma. Il nome deve contenere da 1 a 256 caratteri e può contenere lettere maiuscole e minuscole, numeri, caratteri di sottolineatura, trattini e punti.
   + **Piattaforma di notifica push**: seleziona il **servizio di notifica** appropriato con cui è registrata l'app (ad esempio, Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM)).

1. A seconda della piattaforma selezionata, dovrai fornire credenziali specifiche:
   + **Per **APNs**(Apple Push Notification Service): scegli tra l'autenticazione **basata su token o quella basata su certificati**.**
     + Per l'autenticazione basata su token, carica un **file.p8** (generato tramite Keychain Access).
     + Per l'autenticazione basata su certificati, carica un **file.p12** (anch'esso esportato da Keychain Access).
   + **Per **FCM** (Firebase Cloud Messaging): inserisci la chiave del server dalla console Firebase.**
   + ****Per **altre piattaforme** (come ADM o GCM): inserisci le rispettive chiavi o credenziali API.****

1. Dopo aver inserito i dettagli necessari, scegli **Crea** applicazione della piattaforma. Questa azione registra l'app con Amazon SNS e crea l'oggetto applicativo della piattaforma corrispondente.

1. Al momento della creazione, Amazon SNS genera e restituisce un ([https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)Amazon Resource Name). Questo ARN identifica in modo univoco l'applicazione della piattaforma e viene utilizzato per la creazione di endpoint per dispositivi mobili.

# Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili
<a name="mobile-platform-endpoint"></a>

Quando un'app e un dispositivo mobile si registrano con un servizio di notifica push (come APNs Firebase Cloud Messaging), il servizio di notifica push restituisce un token del dispositivo. Amazon SNS utilizza questo token del dispositivo per creare un endpoint della piattaforma, che funge da destinazione per l'invio di messaggi di notifica push diretti all'app sul dispositivo. L'endpoint della piattaforma funge da ponte, instradando i messaggi inviati da Amazon SNS al servizio di notifica push per la consegna al dispositivo mobile corrispondente. Per ulteriori informazioni, consultare [Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) e [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Comprendere i token dei dispositivi e gli endpoint della piattaforma
<a name="device-token-platform-endpoint"></a>

Un token del dispositivo identifica in modo univoco un dispositivo mobile registrato con un servizio di notifica push (ad esempio APNs, Firebase Cloud Messaging). Quando un'app si registra con il servizio di notifica push, genera un token di dispositivo specifico per quell'app e quel dispositivo. Amazon SNS utilizza questo token del dispositivo per creare un endpoint della piattaforma all'interno dell'applicazione della piattaforma corrispondente.

L'endpoint della piattaforma consente ad Amazon SNS di inviare messaggi di notifica push al dispositivo tramite il servizio di notifica push, mantenendo la connessione tra l'app e il dispositivo dell'utente.

## Creazione di un endpoint di piattaforma
<a name="mobile-platform-endpoint-create"></a>

Per inviare notifiche push a un'app con Amazon SNS, è necessario prima registrare il token di dispositivo di quell'app in Amazon SNS richiamando l'operazione di creazione di endpoint di piattaforma. Questa azione utilizza l'Amazon Resource Name (ARN) dell'applicazione di piattaforma e del token di dispositivo come parametri e restituisce l'ARN dell'endpoint di piattaforma creato.

L'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)azione esegue le seguenti operazioni:
+ Se l'endpoint della piattaforma esiste già, non crearlo di nuovo. Restituisce all'intermediario l'ARN dell'endpoint di piaffatorma esistente.
+ Se l'endpoint della piattaforma con lo stesso token del dispositivo ma impostazioni diverse esiste già, non crearlo di nuovo. Genera un'eccezione per l'intermediario.
+ Se l'endpoint della piattaforma non esiste, crealo. Restituisci all'intermediario l'ARN dell'endpoint di piattaforma appena creato.

Non devi chiamare immediatamente l'operazione di creazione di endpoint di piattaforma a ogni avvio di un'applicazione poiché questo approccio non fornisce sempre un endpoint funzionante. Ciò può verificarsi, ad esempio, quando un'app viene disinstallata e reinstallata nello stesso dispositivo e il relativo endpoint esiste ma è disattivato. Una procedura di registrazione corretta deve garantire quanto segue:

1. L'endpoint di piattaforma esiste già per la combinazione app-dispositivo.

1. Il token di dispositivo nell'endpoint di piattaforma è il token di dispositivo valido più recente.

1. L'endpoint di piattaforma è attivato e pronto all'uso.

## Pseudocodice
<a name="mobile-platform-endpoint-pseudo-code"></a>

Lo pseudocodice seguente descrive una pratica consigliata per la creazione di un endpoint di piattaforma funzionante, corrente e attivato in un'ampia gamma di condizioni di avvio. Questo approccio funziona indipendentemente se si tratta della prima registrazione dell'app, se l'endpoint di piattaforma per l'app esiste già, se l'endpoint di piattaforma è attivato, ha il token di dispositivo corretto e così via. Non è un problema chiamarlo più volte in successione, in quanto non creerà endpoint di piattaforma duplicati o modificherà l'endpoint di piattaforma esistente se è già aggiornato e attivato.

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

Questo approccio può essere utilizzato ogni volta che l'app vuole registrarsi o ripetere la registrazione e anche in caso di notifica della modifica di un token di dispositivo a Amazon SNS. In quest'ultimo caso, è sufficiente chiamare l'operazione con il valore di token di dispositivo più recente. Alcuni punti da considerare in relazione a questo approccio:
+ Esistono due casi in cui può chiamare l'operazione di creazione di endpoint di piattaforma. All'inizio, quando l'app non conosce il relativo ARN di endpoint di piattaforma, come avviene durante una prima registrazione, Viene chiamato anche se la chiamata all'`GetEndpointAttributes`azione iniziale fallisce con un'eccezione non trovata, come accadrebbe se l'applicazione conoscesse l'ARN dell'endpoint ma fosse stata eliminata.
+ L'`GetEndpointAttributes`azione viene richiamata per verificare lo stato dell'endpoint della piattaforma anche se l'endpoint della piattaforma è stato appena creato. Ciò avviene quando l'endpoint di piattaforma esiste già ma è disattivato. In tal caso, l'operazione di creazione di endpoint di piattaforma riesce ma non attiva l'endpoint di piattaforma, di conseguenza devi ricontrollare lo stato dell'endpoint di piattaforma prima di indicare l'operazione come riuscita.

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

Il codice seguente mostra come implementare lo pseudo codice precedente utilizzando i client Amazon SNS forniti da. AWS SDKs

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. *Per ulteriori informazioni, consulta [I file di configurazione e credenziali condivisi nella and](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) Tools Reference AWS SDKs Guide.*

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

**AWS CLI**  
**Creazione di un endpoint dell’applicazione della piattaforma**  
Nell’esempio `create-platform-endpoint` seguente viene creato un endpoint per l’applicazione della piattaforma indicata utilizzando il token specificato.  

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

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

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

**SDK per Java 2.x**  
 C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel [Repository di esempi di codice 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());
        }
    }
}
```

------

 Per ulteriori informazioni, consulta [Operazioni API push per dispositivi mobili](mobile-push-api.md).

## Risoluzione dei problemi
<a name="mobile-platform-endpoint-problems"></a>

### Chiamata ripetuta dell'operazione di creazione di endpoint di piattaforma con un token di dispositivo obsoleto
<a name="mobile-platform-endpoint-problems-outdated"></a>

Soprattutto per gli endpoint FCM, potreste pensare che sia meglio archiviare il primo token del dispositivo emesso dall'applicazione e quindi richiamare l'endpoint di creazione della piattaforma con quel token del dispositivo ogni volta all'avvio dell'applicazione. Ciò può sembrare corretto in quanto l'app non deve gestire lo stato del token di dispositivo e Amazon SNS aggiorna automaticamente il token di dispositivo al valore più recente. In verità, questa soluzione presenta alcuni seri inconvenienti:
+ Amazon SNS si basa sul feedback di FCM per aggiornare i token di dispositivo obsoleti a quelli nuovi. FCM conserva le informazioni sui token di dispositivo obsoleti per qualche tempo, ma non indefinitamente. Una volta che FCM dimentica la connessione tra il vecchio token di dispositivo e il nuovo, Amazon SNS non sarà più in grado di aggiornare il token archiviato nell'endpoint di piattaforma al valore corretto, ma disattiverà l'endpoint di piattaforma.
+ L'applicazione di piattaforma conterrà molteplici endpoint di piattaforma corrispondenti allo stesso token di dispositivo.
+ Amazon SNS impone una quota al numero di endpoint di piattaforma che è possibile creare a partire dallo stesso token di dispositivo. Alla fine, la creazione di nuovi endpoint non riuscirà con un'eccezione di parametro non valido e il messaggio di errore seguente: "This endpoint is already registered with a different token." (Questo endpoint è già registrato con un altro token.).

Per ulteriori informazioni sulla gestione degli endpoint FCM, consulta. [Gestione Amazon SNS degli endpoint Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

### Riattivazione di un endpoint di piattaforma associato a un token di dispositivo non valido
<a name="mobile-platform-endpoint-problems-invalid"></a>

Quando una piattaforma mobile (come APNs o FCM) informa Amazon SNS che il token del dispositivo utilizzato nella richiesta di pubblicazione non era valido, Amazon SNS disabilita l'endpoint della piattaforma associato a quel token del dispositivo. Amazon SNS rifiuterà quindi le pubblicazioni successive in quel token di dispositivo. Sebbene si possa ritenere che la soluzione migliore consista semplicemente nel riattivare l'endpoint di piattaforma e continuare a pubblicare, nella maggior parte dei casi ciò non funzionerà: i messaggi pubblicati non verranno consegnati e l'endpoint di piattaforma sarà di nuovo disattivato poco tempo dopo.

Questo perché il token di dispositivo associato all'endpoint di piattaforma è effettivamente non valido. Le consegne a tale endpoint non possono riuscire in quanto non corrisponde più ad alcuna app installata. Al momento della pubblicazione successiva, la piattaforma mobile indicherà di nuovo aD Amazon SNS che il token di dispositivo non è valido e Amazon SNS disattiverà di nuovo l'endpoint di piattaforma.

Per riattivare un endpoint di piattaforma disattivato, è necessario associarlo a un token di dispositivo valido (con la chiamata dell'operazione di impostazione degli attributi di endpoint) e quindi attivarlo. Le consegne all'endpoint di piattaforma riusciranno solo dal momento dell'attivazione. L'unico caso in cui la riattivazione di un endpoint di piattaforma funziona senza l'aggiornamento del relativo token di dispositivo è quando un token di dispositivo associato a quell'endpoint che non era valido ridiventa valido. Ciò può verificarsi, ad esempio, quando un'app è stata disinstallata e quindi reinstallata nello stesso dispositivo mobile e riceve lo stesso token di dispositivo. L'approccio descritto qui sopra effettua questa operazione, assicurandosi di riattivare un endpoint di piattaforma solo dopo aver verificato che il token di dispositivo ad esso associato è quello più recente disponibile.

# Integrazione dei token dei dispositivi con Amazon SNS per le notifiche mobili
<a name="mobile-push-send-devicetoken"></a>

Quando registri per la prima volta un'app e un dispositivo mobile con un servizio di notifica, come Apple Push Notification Service (APNs) e Firebase Cloud Messaging (FCM), i token del dispositivo o la registrazione IDs vengono restituiti dal servizio. Questi tokens/IDs vengono aggiunti ad Amazon SNS per creare un endpoint per l'app e il dispositivo utilizzando l'API. [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) Una volta creato l'endpoint, [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)viene restituito un messaggio che Amazon SNS utilizza per indirizzare le notifiche all'app/dispositivo corretto.

Puoi aggiungere i token del dispositivo o la registrazione IDs ad Amazon SNS nei seguenti modi:
+ Aggiungi manualmente un singolo token tramite Console di gestione AWS
+ Caricamento di diversi token usando l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Registra i token per i dispositivi futuri

****Per aggiungere manualmente un token del dispositivo o un ID di registrazione****

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona **Notifiche push**.

1. Nella sezione **Applicazioni della piattaforma**, seleziona l'applicazione, quindi scegli **Modifica**. Se non hai ancora creato un'applicazione di piattaforma, segui subito la [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md) guida per farlo.

1. Scegliere **Create Endpoint** (Crea endpoint).

1. Nella casella **Endpoint Token**, inserisci il **token** o l'**ID di registrazione**, a seconda del servizio di notifica che stai utilizzando (ad esempio, l'ID di registrazione FCM).

1. (Facoltativo) Inserisci dati aggiuntivi nel campo **Dati utente**. Questi dati devono essere codificati in UTF-8 e avere dimensioni inferiori a 2 KB.

1. Scegliere **Create Endpoint** (Crea endpoint).

Una volta creato l'endpoint, puoi inviare messaggi direttamente al dispositivo mobile o ai dispositivi mobili abbonati a un argomento di Amazon SNS.

****Per caricare diversi token utilizzando l'API `CreatePlatformEndpoint`****

I passaggi seguenti mostrano come utilizzare l'app Java di esempio (`bulkupload`pacchetto) fornita da AWS per caricare diversi token (token del dispositivo o registrazione IDs) su Amazon SNS. Puoi usare questa app di esempio per iniziare a caricare i token esistenti. 
**Nota**  
Nei passaggi seguenti viene utilizzata l'IDE Java Eclipse. I passaggi presuppongono che tu abbia installato AWS SDK per Java e che tu disponga delle credenziali AWS di sicurezza per il tuo. Account AWS Per ulteriori informazioni, consulta [AWS SDK per Java](https://aws.amazon.com/sdkforjava/). Per ulteriori informazioni sulle credenziali, consulta le [credenziali AWS di sicurezza](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) nella Guida per l'utente *IAM*. 

1. Download e decomprimi il file [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Crea un nuovo **progetto Java** in Eclipse e importa la `SNSSamples` cartella nel progetto. 

1. Scarica la libreria [OpenCSV e aggiungila al percorso](http://sourceforge.net/projects/opencsv/) di compilazione.

1. Nel `BulkUpload.properties` file, specifica quanto segue: 
   + Il tuo `ApplicationArn` (ARN dell'applicazione della piattaforma).
   + Il percorso assoluto del file CSV contenente i token.
   + Registrazione dei nomi di file per i token riusciti e non riusciti. Ad esempio `goodTokens.csv` e `badTokens.csv`.
   + (Facoltativo) Una configurazione per il delimitatore, il carattere di virgoletta e il numero di thread da utilizzare.

   L'elemento `BulkUpload.properties` completato si presenta in maniera analoga a quanto segue:

   ```
   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.  Esegui l'**BatchCreatePlatformEndpointSampleapplicazione.java** per caricare i token su Amazon SNS. I token caricati correttamente verranno registrati`goodTokens.csv`, mentre i token non validi verranno registrati. `badTokens.csv`

**Per registrare token dai dispositivi per future installazioni di app**

Sono disponibili due opzioni per questo processo:

**Usa il servizio Amazon Cognito**  
La tua app mobile può utilizzare credenziali di sicurezza temporanee per creare endpoint. Amazon Cognito è consigliato per generare credenziali temporanee. Per ulteriori informazioni, consulta la *[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)* Developer Guide   
Per tenere traccia [delle registrazioni delle](application-event-notifications.md) app, utilizza gli eventi Amazon SNS per ricevere notifiche quando vengono creati nuovi ARNs endpoint.  
In alternativa, puoi utilizzare l'[https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)API per recuperare l'elenco degli endpoint registrati.

**Utilizza un server proxy**  
Se l'infrastruttura dell'app supporta già la registrazione dei dispositivi al momento dell'installazione, puoi utilizzare il server come proxy. Inoltrerà i token del dispositivo ad Amazon SNS tramite [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)l'API.  
L'ARN dell'endpoint creato da Amazon SNS verrà restituito e potrà essere archiviato dal server per future pubblicazioni di messaggi.

# Amazon SNS: metodi di autenticazione delle notifiche push di Apple
<a name="sns-apple-authentication-methods"></a>

Puoi autorizzare Amazon SNS a inviare notifiche push all'app iOS o macOS fornendo informazioni che identificano l'utente come sviluppatore dell'app. Per autenticarsi, fornire una *chiave* o un *certificato* [durante la creazione di un'applicazione di piattaforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html), entrambi possono essere ottenuti dal tuo account Apple Developer.

**Chiave di firma dei token**  
Una chiave di firma privata che Amazon SNS utilizza per firmare i token di autenticazione Apple Push Notification Service (APNs).  
Se fornisci una chiave di firma, Amazon SNS utilizza un token con cui autenticarsi APNs per ogni notifica push inviata. Con la tua chiave di firma, puoi inviare notifiche push agli ambienti di APNs produzione e sandbox.  
La chiave di firma non ha scadenza e puoi utilizzare la stessa chiave di firma per più app. Per ulteriori informazioni, consulta [Comunicare APNs utilizzando i token di autenticazione](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) nella sezione **Aiuto per gli account sviluppatore** del sito web di Apple.

**Certificate**  
Un certificato TLS che Amazon SNS utilizza per l'autenticazione quando APNs invii notifiche push. Si può ottenere il certificato dal proprio account sviluppatore Apple.  
I certificati scadono dopo un anno. Alla scadenza, è necessario creare un nuovo certificato da fornire ad Amazon SNS. Per ulteriori informazioni, consulta [Stabilire una connessione basata su certificati](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) sul sito Web Apple Developer. APNs

**Per gestire le APNs impostazioni utilizzando la console di gestione AWS**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, seleziona **Notifiche push**.

1. Nella sezione **Applicazioni della piattaforma**, seleziona l'**applicazione** di cui desideri modificare APNs le impostazioni, quindi scegli **Modifica**. Se non hai ancora creato un'applicazione di piattaforma, segui subito la [Creazione di un'applicazione della piattaforma Amazon SNS](mobile-push-send-register.md) guida per farlo.

1. Scegliete **Modifica** per modificare le impostazioni dell'applicazione della piattaforma.

1. Nella sezione **Tipo di autenticazione**, scegli una delle seguenti opzioni:
   + **Autenticazione basata su token** (consigliata per le integrazioni moderne APNs )
   + **Autenticazione basata su certificati (metodo precedente)**

1. Configura le tue **credenziali** in base al tipo di autenticazione:
   + **Per l'autenticazione basata su token:**
     + Carica il **file.p8**, che è la chiave di firma del token di autenticazione che hai scaricato dal tuo account Apple Developer.
     + Inserisci l'**ID della chiave di firma** che trovi nel tuo account Apple Developer. Vai su **Certificati**, **IDsProfili**, **Chiavi** e seleziona la **chiave** che desideri utilizzare.
     + Fornisci il **Team Identifier** dal tuo account Apple Developer. Puoi trovarlo nella pagina di iscrizione.
     + Inserisci il **Bundle Identifier** assegnato alla tua app. Puoi trovarlo in Certificati IDs e Profili, App. IDs
   + **Per l'autenticazione basata su certificati:**
     + Carica il **file.p12 per il tuo certificato TLS**. Questo file può essere esportato da Keychain Access su macOS dopo aver scaricato il certificato dal tuo account Apple Developer.
     + Se hai assegnato una **password** al tuo certificato .p12, inseriscila qui.

1. Dopo aver inserito le credenziali necessarie, scegli **Salva modifiche** per aggiornare le impostazioni.

# Integrazione di Amazon SNS con la configurazione dell'autenticazione di Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Questo argomento descrive come ottenere le credenziali API FCM (HTTP v1) richieste da Google da utilizzare con l' AWS API e il. AWS CLI Console di gestione AWS

**Importante**  
26 marzo 2024 — Amazon SNS supporta l'API HTTP v1 FCM per dispositivi Apple e destinazioni Webpush. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni delle applicazioni.  
18 gennaio 2024 — Amazon SNS ha introdotto il supporto per l'API HTTP v1 di FCM per la consegna di notifiche push mobili ai dispositivi Android.  
20 giugno 2023 — Google ha reso obsoleta la propria API HTTP legacy di Firebase Cloud Messaging (FCM). Amazon SNS ora supporta la distribuzione a tutti i tipi di dispositivi utilizzando l'API HTTP v1 di FCM. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni.

Puoi autorizzare Amazon SNS a inviare notifiche push alle applicazioni fornendo informazioni che ti identificano come sviluppatore dell'app. Per l'autenticazione, fornisci una **chiave API** o un **token** [ durante la creazione di un'applicazione di piattaforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). [Puoi ottenere le seguenti informazioni dalla console dell'applicazione Firebase:](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds)

**Chiave API**  
La chiave API rappresenta le credenziali utilizzate per chiamare l'API Legacy di Firebase. FCM Legacy APIs verrà rimosso da Google il 20 giugno 2024. Se attualmente utilizzi una chiave API come credenziali della piattaforma, puoi aggiornare le credenziali della piattaforma selezionando **Token** come opzione e caricando il file JSON associato all'applicazione Firebase.

**Token**  
Quando si chiama l'API HTTP v1, viene utilizzato un token di accesso di breve durata. Questa è l'API consigliata da Firebase per l'invio di notifiche push. Per generare token di accesso, Firebase fornisce agli sviluppatori un set di credenziali sotto forma di file di chiave privata (noto anche come file service.json).

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

Prima di poter iniziare a gestire le impostazioni FCM in Amazon SNS, devi ottenere le credenziali FCM service.json. Per ottenere le tue credenziali service.json, consulta [Migrare dalla versione precedente di FCM APIs ](https://firebase.google.com/docs/cloud-messaging/migrate-v1) a HTTP v1 nella documentazione di Google Firebase.

## Gestione delle impostazioni FCM tramite la CLI
<a name="sns-fcm-authentication-api"></a>

Puoi creare notifiche push FCM utilizzando l' AWS API. Il numero e le dimensioni delle risorse Amazon SNS in un AWS account sono limitati. *Per ulteriori informazioni, consulta gli [endpoint e le quote di Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) nella Riferimenti generali di AWS Guida.*

**Per creare una notifica push FCM insieme a un argomento AWS (API) di Amazon SNS**  
Quando utilizzi le credenziali **chiave**, `PlatformCredential` è `API key`. Quando utilizzi le credenziali **token**, `PlatformCredential` è un file di chiavi private in formato JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Per recuperare un tipo di credenziale FCM per un argomento (API) di Amazon SNS esistente AWS**  
Recupera il tipo di credenziali, `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Per impostare un attributo FCM per un argomento AWS (API) di Amazon SNS esistente**  
Configura l'attributo FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Gestione delle impostazioni FCM tramite la console
<a name="sns-fcm-authentication-cli"></a>

È possibile creare notifiche push FCM utilizzando AWS Command Line Interface (CLI). Il numero e le dimensioni delle risorse Amazon SNS in un AWS account sono limitati. Per ulteriori informazioni, consulta [Endpoint e quote di Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

**Creazione di una notifica push FCM insieme a un argomento SNS (AWS CLI)**  
Quando utilizzi le credenziali **chiave**, `PlatformCredential` è `API key`. Quando utilizzi le credenziali **token**, `PlatformCredential` è un file di chiavi private in formato JSON. Quando si utilizza la AWS CLI, il file deve essere in formato stringa e i caratteri speciali devono essere ignorati. Per formattare correttamente il file, Amazon SNS consiglia di utilizzare il seguente comando: `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Recupero di un tipo di credenziali FCM per un argomento Amazon SNS esistente (AWS CLI)**  
Recupera il tipo di credenziali, `"AuthenticationMethod": "Token"` o ` "AuthenticationMethod": "Key"`:
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Configurazione di un attributo FCM per un argomento Amazon SNS esistente (AWS CLI)**  
Configura l'attributo FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Gestione delle impostazioni FCM (console)
<a name="sns-fcm-authentication-console"></a>

Utilizza i seguenti passaggi per inserire e gestire le tue credenziali Firebase Cloud Messaging (FCM) in Amazon SNS.

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. **Nel pannello di navigazione, seleziona Notifiche push.**

1. **Nella sezione **Applicazioni della piattaforma**, seleziona l'**applicazione della piattaforma FCM** di cui desideri modificare le credenziali, quindi scegli Modifica.**

1. Nella sezione **Firebase Cloud Messaging Credentials**, scegli una delle seguenti opzioni:
   + **Autenticazione basata su token** (metodo consigliato): carica il **file della chiave privata** (JSON) che hai scaricato dalla console Firebase. Questo file contiene le credenziali necessarie per generare token di accesso di breve durata per le notifiche FCM. Per ottenere questo file:

     1. Vai alla console dell'[applicazione Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Nelle **Impostazioni del progetto**, seleziona **Cloud** Messaging.

     1. Scarica il file JSON **con chiave privata** (da utilizzare nel metodo di autenticazione basato su token).
   + **Autenticazione con chiave API**: se preferisci utilizzare il vecchio metodo di autenticazione con chiave API, inserisci la **chiave API di Google** nel campo fornito. Per ottenere questo file:

     1. Vai alla console dell'[applicazione Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. In **Impostazioni del progetto**, seleziona **Cloud** Messaging.

     1. Copia la **chiave del server** (chiave API) da utilizzare per l'invio di notifiche.

1. Al termine, scegliere **Save changes (Salva modifiche)**.

**Argomenti correlati**
+ [Utilizzo dei payload di Google Firebase Cloud Messaging v1 in Amazon SNS](sns-fcm-v1-payloads.md)

# Gestione Amazon SNS degli endpoint Firebase Cloud Messaging
<a name="sns-fcm-endpoint-management"></a>

## Gestione e manutenzione dei token dei dispositivi
<a name="sns-managing-device-tokens"></a>

Puoi garantire la consegna delle notifiche push della tua applicazione mobile seguendo questi passaggi:

1. Archivia tutti i token del dispositivo, l' ARNsendpoint Amazon SNS corrispondente e i timestamp sul tuo server delle applicazioni.

1. Rimuovi tutti i token obsoleti ed elimina l'endpoint Amazon SNS corrispondente. ARNs

All'avvio iniziale dell'app, riceverai un token del dispositivo (noto anche come token di registrazione) per il dispositivo. Questo token del dispositivo viene coniato dal sistema operativo del dispositivo ed è collegato all'applicazione FCM. Una volta ricevuto questo token del dispositivo, puoi registrarlo con Amazon SNS come endpoint della piattaforma. Ti consigliamo di archiviare il token del dispositivo, l'ARN dell'endpoint della piattaforma Amazon SNS e il timestamp salvandoli sul tuo server delle applicazioni o su un altro archivio persistente. *Per configurare l'applicazione FCM per recuperare e archiviare i token del dispositivo, consulta [Recuperare e archiviare i token di registrazione nella documentazione di Google su Firebase](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens).*

È importante mantenere i token. up-to-date I token del dispositivo dell'utente possono cambiare nelle seguenti condizioni:

1. L'applicazione mobile viene ripristinata su un nuovo dispositivo.

1. L'utente disinstalla o aggiorna l'applicazione.

1. L'utente cancella i dati dell'applicazione.

Quando il token del dispositivo cambia, ti consigliamo di aggiornare l'endpoint Amazon SNS corrispondente con il nuovo token. Ciò consente ad Amazon SNS di continuare la comunicazione con il dispositivo registrato. Puoi farlo implementando il seguente pseudo codice all'interno della tua applicazione mobile. Descrive una pratica consigliata per la creazione e la manutenzione degli endpoint della piattaforma abilitati. Questo approccio può essere eseguito ogni volta che le applicazioni mobili vengono avviate o come processo pianificato in background.

### Pseudocodice
<a name="sns-device-token-pseudo-code"></a>

Utilizza il seguente pseudo codice FCM per gestire e mantenere i token dei dispositivi.

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

*Per ulteriori informazioni sui requisiti di aggiornamento dei token, consulta [Aggiornare i token regolarmente nella documentazione di Google su Firebase](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis).*

## Rilevamento di token non validi
<a name="sns-detecting-invalid-tokens"></a>

Quando un messaggio viene inviato a un endpoint FCM v1 con un token di dispositivo non valido, Amazon SNS riceverà una delle seguenti eccezioni:
+ `UNREGISTERED`(HTTP 404) — Quando Amazon SNS riceve questa eccezione, riceverai un evento di errore `FailureType` di `InvalidPlatformToken` consegna con un *token di piattaforma `FailureMessage` of e uno of associato all'endpoint non valido*. Amazon SNS disabiliterà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.
+ `INVALID_ARGUMENT`(HTTP 400) — Quando Amazon SNS riceve questa eccezione, significa che il token del dispositivo o il payload del messaggio non sono validi. *Per ulteriori informazioni, consulta la documentazione di Google su [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)Firebase.*

Poiché `INVALID_ARGUMENT` può essere restituito in entrambi i casi, Amazon SNS restituirà un *corpo `FailureType` di `InvalidNotification` notifica e uno `FailureMessage` di non è valido*. Quando ricevi questo errore, verifica che il payload sia corretto. Se è corretto, verifica che il token del dispositivo lo sia up-to-date. Amazon SNS non disattiverà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.

Un altro caso in cui si verificherà un errore di `InvalidPlatformToken` consegna è quando il token del dispositivo registrato non appartiene all'applicazione che tenta di inviare il messaggio. In questo caso, Google restituirà un errore *SENDER\$1ID\$1MISMATCH*. Amazon SNS disabiliterà l'endpoint della piattaforma quando una consegna fallisce, con questa eccezione.

Tutti i codici di errore rilevati ricevuti dall'API FCM v1 sono disponibili CloudWatch quando configuri la [registrazione dello stato di consegna](topics-attrib.md) per la tua applicazione. 

Per ricevere gli eventi di consegna della tua applicazione, consulta. [Eventi applicazione disponibili](application-event-notifications.md#application-event-notifications-events)

## Rimuovere i token obsoleti
<a name="sns-removing-stale-tokens"></a>

I token vengono considerati obsoleti una volta che il recapito dei messaggi al dispositivo endpoint inizia a fallire. Amazon SNS imposta questi token obsoleti come endpoint disabilitati per l'applicazione della tua piattaforma. Quando pubblichi su un endpoint disabilitato, Amazon SNS restituirà `EventDeliveryFailure` un evento con `FailureType` `EndpointDisabled` of e `FailureMessage` un *endpoint* disabilitato. Per ricevere eventi di consegna per la tua applicazione, consulta. [Eventi applicazione disponibili](application-event-notifications.md#application-event-notifications-events)

Quando ricevi questo errore da Amazon SNS, devi rimuovere o aggiornare il token obsoleto nell'applicazione della tua piattaforma.

# Utilizzo di Amazon SNS per notifiche push su dispositivi mobili
<a name="mobile-push-notifications"></a>

 Questa sezione descrive come inviare un messaggio di notifica push.

## Pubblicazione in un argomento
<a name="mobile-push-send-topicmobile"></a>

Puoi anche usare Amazon SNS per inviare i messaggi agli endpoint mobili che hanno effettuato la sottoscrizione a un argomento. Il concetto è lo stesso della sottoscrizione di altri tipi di endpoint, ad esempio Amazon SQS, HTTP/S, e-mail e SMS, a un argomento, come descritto in [Che cos'è Amazon SNS?](welcome.md). La differenza è che Amazon SNS comunica attraverso servizi di notifica come Apple Push Notification Service (APNS) e Google Firebase Cloud Messaging (FCM). Attraverso i servizi di notifica, gli endpoint mobili sottoscritti ricevano le notifiche inviate all'argomento. 

## Messaggistica diretta per dispositivi mobili Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Invia i messaggi di notifica push Amazon SNS direttamente a un endpoint che rappresenta un'applicazione su un dispositivo mobile. 

**Per inviare un messaggio diretto**

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Push notifications** (Notifiche push).

1. Nella pagina delle **notifiche push per dispositivi mobili**, nella sezione **Applicazioni della piattaforma**, scegli, ad esempio***MyApp***, il nome dell'applicazione.

1. Nella ***MyApp*** pagina, nella sezione **Endpoints**, scegli un endpoint, quindi scegli **Pubblica** messaggio.

1. Nella pagina **Publish message to endpoint** (Pubblica messaggio a un endpoint), inserisci il messaggio da visualizzare nell'applicazione sul dispositivo mobile e quindi scegli **Publish message** (Pubblica messaggio).

   Amazon SNS invia il messaggio di notifica al servizio di notifica della piattaforma che, a sua volta, invia il messaggio all'applicazione.

# Pubblicazione di notifiche Amazon SNS con payload specifici della piattaforma
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Puoi utilizzare Amazon SNS APIs per inviare messaggi personalizzati con payload specifici della piattaforma ai dispositivi mobili. Console di gestione AWS Per informazioni sull'uso di Amazon SNS APIs, consulta [Operazioni API push per dispositivi mobili](mobile-push-api.md) e inserisci il `SNSMobilePush.java` file. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Invio di messaggi in formato JSON
<a name="mobile-push-send-json"></a>

Quando si inviano payload specifici della piattaforma, i dati devono essere stringhe coppia chiave-valore in formato JSON, con virgolette doppie con carattere di escape.

I seguenti esempi mostrano un messaggio personalizzato per la piattaforma FCM .

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

## Invio di messaggi specifici della piattaforma
<a name="mobile-push-send-platform"></a>

Oltre a inviare dati personalizzati come coppie chiave-valore, è possibile inviare coppie chiave-valore specifiche per la piattaforma.

L'esempio seguente mostra l'inclusione dei parametri FCM `time_to_live` e `collapse_key` dopo le coppie chiave-valore dei dati personalizzate nel parametro FCM `data`.

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

Per l'elenco delle coppie chiave-valore supportate in ciascuno dei servizi di notifica push supportati in Amazon SNS, consulta i collegamenti seguenti: 

**Importante**  
Amazon SNS ora supporta l'API HTTP v1 Firebase Cloud Messaging (FCM) per l'invio di notifiche push mobili ai dispositivi Android.  
26 marzo 2024 — Amazon SNS supporta l'API HTTP v1 FCM per dispositivi Apple e destinazioni Webpush. Ti consigliamo di migrare le tue applicazioni push mobili esistenti all'ultima API HTTP v1 di FCM entro il 1° giugno 2024 per evitare interruzioni delle applicazioni.
+ [Riferimento chiave di Payload](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) nella documentazione APNs 
+ [Firebase Cloud Messaging HTTP Protocol (Protocollo HTTP di Firebase Cloud Messaging)](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) nella documentazione .
+ [Invio di un messaggio](https://developer.amazon.com/sdk/adm/sending-message.html) nella documentazione 

## Invio di messaggi a un'applicazione su più piattaforme
<a name="mobile-push-send-multiplatform"></a>

Per inviare un messaggio a un'applicazione installata su dispositivi per più piattaforme, come FCM e APNs, devi prima sottoscrivere gli endpoint mobili a un argomento in Amazon SNS e quindi pubblicare il messaggio sull'argomento.

L'esempio seguente mostra un messaggio da inviare agli endpoint mobili sottoscritti su APNs FCM e 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\"}}" 
}
```

## Invio di messaggi a notifiche di avviso o in APNs background
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS può inviare messaggi ad APNs annunci `alert` o `background` notifiche (per ulteriori informazioni, consulta [Pushing Background Updates to Your App nella APNs documentazione](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app)).
+ Una `alert` APNs notifica informa l'utente visualizzando un messaggio di avviso, riproducendo un suono o aggiungendo un badge all'icona dell'applicazione.
+ Una `background` APNs notifica si attiva o indica all'applicazione di agire in base al contenuto della notifica, senza informare l'utente.

### Specificazione di valori di intestazione personalizzati APNs
<a name="specify-custom-header-value"></a>

Ti consigliamo di specificare valori personalizzati per l'[attributo del messaggio `AWS.SNS.MOBILE.APNS.PUSH_TYPE` riservato](sns-message-attributes.md#sns-attrib-mobile-reserved) utilizzando l'azione dell'API Amazon `Publish` SNS o AWS SDKs il. AWS CLI Il seguente esempio di CLI imposta `content-available` su `1` e `apns-push-type` su `background` per l'argomento specificato. 

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

**Nota**  
Assicurati che la struttura JSON sia valida. Aggiungi una virgola dopo ogni coppia chiave-valore, tranne l'ultima.

### Dedurre l'intestazione del tipo di APNs push dal payload
<a name="inferring-push-type-header-from-payload"></a>

Se non imposti l'`apns-push-type` APNs intestazione, Amazon SNS imposta l'intestazione su `background` o in base `alert` alla chiave nel dizionario della configurazione `content-available` del payload in `aps` formato JSON. APNs 

**Nota**  
Amazon SNS è in grado di dedurre solo le intestazioni `alert` o `background`, anche se l'intestazione `apns-push-type` può essere impostata su altri valori.
+ `apns-push-type` è impostato su `alert`.
  + Se il dizionario `aps` contiene `content-available` impostato su `1` e *una o più chiavi* che attivano le interazioni dell'utente.
  + Se il dizionario `aps` contiene `content-available` impostato su `0` *o* se la chiave `content-available` è assente.
  + Se il valore della chiave `content-available` non è un numero intero o un valore booleano.
+ `apns-push-type` è impostato su `background`.
  + Se il dizionario `aps` contiene *solo* `content-available` impostato su `1` e *nessun'altra chiave* che attiva le interazioni dell'utente.
**Importante**  
Se Amazon SNS invia un oggetto di configurazione non elaborato APNs come notifica solo in background, devi includere `content-available` set to nel dizionario. `1` `aps` Sebbene sia possibile includere chiavi personalizzate, il dizionario `aps` non deve contenere chiavi che attivino interazioni dell'utente (ad esempio avvisi, badge o suoni).

Di seguito è riportato un esempio di oggetto configurazione non elaborato.

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

In questo esempio, Amazon SNS imposta l'`apns-push-type` APNs intestazione del messaggio su. `background` Quando Amazon SNS rileva che il dizionario `apn` contiene la chiave `content-available` impostata su `1` e non contiene altre chiavi che possono attivare interazioni utente imposta l'intestazione su `background`.

# Utilizzo dei payload di Google Firebase Cloud Messaging v1 in Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS supporta l'utilizzo dell'API HTTP v1 di FCM per inviare notifiche a destinazioni Android, iOS e Webpush. Questo argomento fornisce esempi della struttura del payload durante la pubblicazione di notifiche push per dispositivi mobili utilizzando la CLI o l'API Amazon SNS.

Puoi includere i seguenti tipi di messaggi nel tuo payload quando invii una notifica FCM:
+ **Messaggio di dati**: un messaggio di dati viene gestito dall'app client e contiene coppie chiave-valore personalizzate. Quando si crea un messaggio di dati, è necessario includere la `data` chiave con un oggetto JSON come valore, quindi inserire le coppie chiave-valore personalizzate.
+ Messaggio di **notifica o messaggio** **visualizzato: un messaggio** di notifica contiene un set predefinito di chiavi gestite da FCM SDK. Queste chiavi variano a seconda del tipo di dispositivo a cui vengono consegnate. Per ulteriori informazioni sui tasti di notifica specifici della piattaforma, consulta quanto segue:
  + [Tasti di notifica Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Chiavi di notifica APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Chiavi di notifica Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Per ulteriori informazioni sui tipi di messaggi FCM, consulta Tipi [di messaggio nella documentazione di](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) *Firebase* di Google.

## Utilizzo della struttura di payload FCM v1 per inviare messaggi
<a name="sending-messages-using-v1-payload"></a>

Se state creando un'applicazione FCM per la prima volta o desiderate sfruttare le funzionalità di FCM v1, potete scegliere di inviare un payload in formato FCM v1. A tale scopo, è necessario includere la chiave di primo livello. `fcmV1Message` *Per ulteriori informazioni sulla creazione di payload FCM v1, consulta [Migrazione da FCM legacy APIs a HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) e [Personalizzazione di un](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) messaggio tra piattaforme nella documentazione Firebase di Google.*

**Payload di esempio FCM v1 inviato ad Amazon SNS:**

**Nota**  
Il valore della `GCM` chiave utilizzato nell'esempio seguente deve essere codificato come stringa quando si pubblica una notifica tramite Amazon SNS. 

```
{
  "GCM": "{ 
    \"fcmV1Message\": { 
      \"validate_only\": false,
      \"message\": {
        \"notification\": {
          \"title\": \"string\",
          \"body\": \"string\"
        },
        \"data\": {
          \"dataGen\": \"priority message\"
        },
        \"android\": {
          \"priority\": \"high\",
          \"notification\": {
            \"body_loc_args\": [\"string\"],
            \"title_loc_args\": [\"string\"],
            \"sound\": \"string\",
            \"title_loc_key\": \"string\",
            \"title\": \"string\",
            \"body\": \"string\",
            \"click_action\": \"clicky_clacky\",
            \"body_loc_key\": \"string\"
          },
          \"data\": {
            \"dataAndroid\": \"priority message\"
          },
          \"ttl\": \"10023.32s\"
        },
        \"apns\": {
          \"payload\": {
            \"aps\": {
              \"alert\": {
                \"subtitle\": \"string\",
                \"title-loc-args\": [\"string\"],
                \"title-loc-key\": \"string\",
                \"loc-args\": [\"string\"],
                \"loc-key\": \"string\",
                \"title\": \"string\",
                \"body\": \"string\"
              },
              \"category\": \"Click\",
              \"content-available\": 0,
              \"sound\": \"string\",
              \"badge\": 5
            }
          }
        },
        \"webpush\": {
          \"notification\": {
            \"badge\": \"5\",
            \"title\": \"string\",
            \"body\": \"string\"
          },
          \"data\": {
            \"dataWeb\": \"priority message\"
          }
        }
      }
    }
  }"
}
```

Quando invii un payload JSON, assicurati di includere l'`message-structure`attributo nella richiesta e di impostarlo su. `json`

**Esempio di CLI:**

```
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
```

*Per ulteriori informazioni sull'invio di payload in formato FCM v1, consulta quanto segue nella documentazione di Firebase di Google:*
+ [Esegui la migrazione dalla versione precedente di FCM a HTTP v1 APIs ](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [Informazioni sui messaggi FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Risorsa REST: projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Utilizzo della struttura di payload legacy per inviare messaggi all'API FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Durante la migrazione a FCM v1, non è necessario modificare la struttura del payload utilizzata per le credenziali legacy. Amazon SNS trasforma il tuo payload nella nuova struttura di payload FCM v1 e lo invia a Google.

Formato del payload del messaggio di input:

```
{
  "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}"
}
```

Messaggio inviato a Google:

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Rischi potenziali**
+ La mappatura dalla versione precedente alla versione 1 non supporta l'Apple Push Notification Service (APNS) `headers` o le chiavi. `fcm_options` Se desideri utilizzare questi campi, invia un payload FCM v1.
+ In alcuni casi, le intestazioni dei messaggi sono necessarie da FCM v1 per inviare notifiche silenziose ai tuoi dispositivi. APNs Se attualmente invii notifiche silenziose ai tuoi APNs dispositivi, queste non funzioneranno con l'approccio precedente. Consigliamo invece di utilizzare il payload FCM v1 per evitare problemi imprevisti. *Per un elenco delle APNs intestazioni e per cosa vengono utilizzate, consulta [Communicating with APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) nella Apple Developer Guide.*
+ Se utilizzi l'attributo `TTL` Amazon SNS per inviare la notifica, questo verrà aggiornato solo sul `android` campo. Se desideri impostare l'attributo `TTL` APNS, utilizza il payload FCM v1.
+ Le `webpush` chiavi `android``apns`, e verranno mappate e compilate con tutte le chiavi pertinenti fornite. Ad esempio, se fornisci `title` una chiave condivisa tra tutte e tre le piattaforme, la mappatura FCM v1 popolerà tutte e tre le piattaforme con il titolo che hai fornito.
+ Alcune chiavi condivise tra piattaforme prevedono tipi di valori diversi. Ad esempio, la `badge` chiave passata a `apns` prevede un valore intero, mentre la `badge` chiave passata a `webpush` prevede un valore String. Nei casi in cui si fornisce la `badge` chiave, la mappatura FCM v1 popolerà solo la chiave per la quale è stato fornito un valore valido.

## Eventi di mancata consegna da parte di FCM
<a name="sns-fcm-delivery-failure-events"></a>

La tabella seguente fornisce il tipo di errore di Amazon SNS che corrisponde ai codici di errore/stato ricevuti da Google per le richieste di notifica FCM v1. [Tutti i codici di errore osservati ricevuti dall'API FCM v1 sono disponibili CloudWatch quando configuri la registrazione dello stato di consegna per la tua applicazione.](topics-attrib.md)


|  error/status Codice FCM | Tipo di errore Amazon SNS | Messaggio di errore | Causa e mitigazione | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  Il token di piattaforma associato all'endpoint non è valido.  |  Il token del dispositivo collegato all'endpoint è obsoleto o non valido. Amazon SNS ha disabilitato il tuo endpoint. Aggiorna l'endpoint Amazon SNS al token del dispositivo più recente.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  Il corpo della notifica non è valido.  |  Il token del dispositivo o il payload del messaggio potrebbero non essere validi. Verifica che il payload del messaggio sia valido. Se il payload del messaggio è valido, aggiorna l'endpoint Amazon SNS al token del dispositivo più recente.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  Il token della piattaforma associato all'endpoint non è valido.  |  L'applicazione della piattaforma associata al token del dispositivo non dispone dell'autorizzazione per l'invio al token del dispositivo. Verifica di utilizzare le credenziali FCM corrette nell'applicazione della piattaforma Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  La dipendenza non è disponibile.  |  FCM non è riuscito a elaborare la richiesta in tempo. Tutti i nuovi tentativi eseguiti da Amazon SNS non sono riusciti. Puoi archiviare questi messaggi in una coda di lettere morte (DLQ) e reindirizzarli in un secondo momento.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Errore imprevisto; contatta Amazon. Frase di errore [Errore interno].  |  Il server FCM ha riscontrato un errore durante il tentativo di elaborare la richiesta. Tutti i nuovi tentativi eseguiti da Amazon SNS non sono riusciti. Puoi archiviare questi messaggi in una coda di lettere morte (DLQ) e reindirizzarli in un secondo momento.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Le credenziali dell'applicazione della piattaforma non sono valide.  |  Non è stato possibile inviare un messaggio indirizzato a un dispositivo iOS o a un dispositivo Webpush. Verifica che le tue credenziali di sviluppo e produzione siano valide.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Richiesta limitata da [gcm].  |  È stata superata la quota per la frequenza dei messaggi, la quota per la velocità dei messaggi del dispositivo o la quota relativa alla frequenza dei messaggi per argomento. Per informazioni su come risolvere questo problema, consulta la [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)documentazione di *Firebase* di Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  Il corpo della notifica non è valido.  |  In caso di `PERMISSION_DENIED` eccezione, il chiamante (l'applicazione FCM) non è autorizzato a eseguire l'operazione specificata nel payload. Accedi alla console FCM e verifica che le tue credenziali abbiano abilitato le azioni API richieste.  | 

# Attributi dell'app mobile Amazon SNS
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) fornisce supporto per la registrazione dello stato di consegna dei messaggi di notifica push. Dopo aver configurato gli attributi dell'applicazione, le voci di registro verranno inviate a CloudWatch Logs per i messaggi inviati da Amazon SNS agli endpoint mobili. La registrazione dello stato di consegna dei messaggi consente di ottenere informazioni operative più precise, ad esempio: 
+ Sapere se un messaggio di notifica push è stato consegnato da Amazon SNS al servizio di notifica push.
+ Identificare la risposta inviata dal servizio di notifica push a Amazon SNS.
+ Determinare il tempo di attesa dei messaggi (il periodo di tempo tra il timestamp di pubblicazione e l'istante immediatamente precedente alla consegna a un servizio di notifica push).

 Per configurare gli attributi dell'applicazione per lo stato di consegna dei messaggi, puoi utilizzare i Console di gestione AWS kit di sviluppo AWS software (SDKs) o l'API di interrogazione. 

## Configurazione degli attributi dello stato di recapito dei messaggi utilizzando Console di gestione AWS
<a name="sns-msg-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel riquadro di navigazione, scegliere **Mobile (Dispositivi mobili)**, **Push notifications (Notifiche push)**.

1. Nella sezione **Applicazioni della piattaforma**, scegli l'applicazione che contiene gli endpoint per i quali desideri ricevere CloudWatch i registri.

1. Scegli **Application Actions (Operazioni applicazione)**, quindi scegli **Delivery status (Stato consegna)**.

1. Nella finestra di dialogo **Delivery Status (Stato consegna)**, scegli **Create IAM Roles (Crea ruoli IAM)**.

   Si viene reindirizzati alla console IAM.

1. Scegli **Consenti per consentire** ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto.

1. Ora, tornando alla finestra di dialogo **Delivery Status**, inserisci un numero nel campo **Percentuale di successo su campione (0-100)** per indicare la percentuale di messaggi inviati con successo per i quali desideri ricevere i log. CloudWatch 
**Nota**  
Dopo aver configurato gli attributi dell'applicazione per lo stato di consegna dei messaggi, tutti i recapiti dei messaggi non riusciti generano registri. CloudWatch 

1. Infine scegli **Save Configuration (Salva configurazione)**. Ora sarai in grado di visualizzare e analizzare i CloudWatch registri contenenti lo stato di consegna dei messaggi. [Per ulteriori informazioni sull'utilizzo CloudWatch, consulta la CloudWatch documentazione.](https://aws.amazon.com/documentation/cloudwatch)

## Esempi di log sullo stato CloudWatch di consegna dei messaggi di Amazon SNS
<a name="sns-msg-examples"></a>

Dopo aver configurato gli attributi dello stato di consegna dei messaggi per un endpoint dell'applicazione, verranno CloudWatch generati i log. Di seguito vengono forniti degli esempi di log in formato JSON:

**RIUSCITO**

```
{
  "status": "SUCCESS",
  "notification": {
    "timestamp": "2015-01-26 23:07:39.54",
    "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
  },
  "delivery": {
    "statusCode": 200,
    "dwellTimeMs": 65,
    "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
    "attempts": 1,
    "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d"
  }
}
```

**NON RIUSCITO**

```
{
  "status": "FAILURE",
  "notification": {
    "timestamp": "2015-01-26 23:29:35.678",
    "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
  },
  "delivery": {
    "statusCode": 8,
    "dwellTimeMs": 1451,
    "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
    "attempts": 1,
    "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
  }
}
```

Per un elenco dei codici di risposta dei servizi di notifica push, consulta [Codici di risposta della piattaforma](#platform-returncodes).

## Configurazione degli attributi dello stato di consegna dei messaggi con AWS SDKs
<a name="sns-msg-sdk"></a>

[AWS SDKs](https://aws.amazon.com/tools/)Forniscono APIs in diverse lingue per l'utilizzo degli attributi dello stato di consegna dei messaggi con Amazon SNS. 

L'esempio Java seguente mostra come utilizzare l'API `SetPlatformApplicationAttributes` per configurare attributi di applicazione per lo stato di consegna dei messaggi di notifica push. Puoi utilizzare i seguenti attributi per lo stato di consegna dei messaggi: `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` e `SuccessFeedbackSampleRate`. `FailureFeedbackRoleArn`Gli attributi `SuccessFeedbackRoleArn` and vengono utilizzati per consentire ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto. L'attributo `SuccessFeedbackSampleRate` consente di specificare la percentuale della frequenza di campionamento (0-100) dei messaggi consegnati. Dopo aver configurato l'`FailureFeedbackRoleArn`attributo, tutte le consegne di messaggi non riuscite generano log. CloudWatch 

```
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("SuccessFeedbackSampleRate", "5");
setPlatformApplicationAttributesRequest.withAttributes(attributes);
setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");
sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
```

Per ulteriori informazioni su SDK per Java, consulta [Nozioni di base su AWS SDK per Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Codici di risposta della piattaforma
<a name="platform-returncodes"></a>

Di seguito viene fornito un elenco dei collegamenti per i codici di risposta dei servizi di notifica push:


****  

| Servizio di notifiche push | Codice di risposta | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Vedi [Formato di risposta](https://developer.amazon.com/docs/adm/send-message.html#response-format) nella documentazione ADM. | 
| Servizio di notifica push Apple () APNs | Vedi la risposta HTTP/2 APNs in [Comunicazione con APNs nella Guida](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) alla programmazione delle notifiche locali e remote. | 
| Firebase Cloud Messaging (FCM) | Vedi [Codici di risposta a messaggi di errore downstream](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) nella documentazione di Firebase Cloud Messaging. | 
| Servizio di notifica push Microsoft per Windows Phone (MPNS) | Vedi [Push Notification Service Response Codes for Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) nella documentazione di Windows 8 Development. | 
| Windows Push Notification Services (WNS) | Vedi "Codici di risposta" in [Intestazioni delle richieste e delle risposte per il servizio di notifica Push (app di Windows Runtime)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) nella documentazione di sviluppo per Windows 8. | 

# Notifiche degli eventi delle applicazioni Amazon SNS per applicazioni mobili
<a name="application-event-notifications"></a>

Amazon SNS aiuta a capire come attivare le notifiche quando si verificano determinati eventi applicazione. Puoi intraprendere alcune azioni programmatiche su quell'evento. L'applicazione deve includere il supporto per un servizio di notifica push come Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) e Windows Push Notification Services (WNS). Puoi impostare le notifiche degli eventi dell'applicazione utilizzando la console Amazon SNS o AWS CLI il. AWS SDKs

## Eventi applicazione disponibili
<a name="application-event-notifications-events"></a>

Le notifiche eventi applicazione tengono traccia degli eventi di creazione, eliminazione e aggiornamento dei singoli endpoint della piattaforma, nonché degli errori di consegna. Di seguito sono elencati i nomi degli attributi per gli eventi applicazione.


| Nome attributo | Trigger di notifica | 
| --- | --- | 
| EventEndpointCreated | Viene aggiunto un nuovo endpoint della piattaforma all'applicazione. | 
| EventEndpointDeleted | Viene eliminato un endpoint della piattaforma associato all'applicazione. | 
| EventEndpointUpdated | Viene modificato un attributo degli endpoint della piattaforma associati all'applicazione. | 
| EventDeliveryFailure | Una consegna a un qualsiasi endpoint della piattaforma associato all'applicazione restituisce un errore permanente.  Per tenere traccia degli errori di consegna relativamente alle applicazioni della piattaforma, effettua la sottoscrizione agli eventi sullo stato di consegna dei messaggi per l'applicazione. Per ulteriori informazioni, consulta la pagina sull'[utilizzo degli attributi di applicazione di Amazon SNS per lo stato di consegna dei messaggi](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

È possibile associare qualsiasi attributo a un'applicazione che può quindi ricevere le notifiche di eventi. 

## Invio di notifiche push per dispositivi mobili
<a name="application-event-notifications-howto-set"></a>

Per inviare notifiche di eventi dell'applicazione, specifica un argomento per ricevere le notifiche per ciascun tipo di evento. Come Amazon SNS invia le notifiche, l'argomento può indirizzarle agli endpoint che intraprenderanno un'azione programmatica.

**Importante**  
Le applicazioni a volume elevato creeranno un gran numero di notifiche di eventi dell'applicazione (ad esempio, decine di migliaia), che sovraccaricheranno gli endpoint destinati all'uso umano, come indirizzi e-mail, numeri di telefono e applicazioni mobili. Considera le seguenti linee guida quando invii notifiche di eventi dell'applicazione a un argomento:  
Ogni argomento che riceve notifiche deve contenere solo sottoscrizioni per endpoint programmatici, come endpoint HTTP o HTTPS, code o funzioni Amazon SQS. AWS Lambda 
Per ridurre la quantità di elaborazione attivata dalle notifiche, limitare le sottoscrizioni di ciascun argomento a un numero ridotto (ad esempio, cinque o meno).

Puoi inviare notifiche sugli eventi dell'applicazione utilizzando la console Amazon SNS, il AWS Command Line Interface (AWS CLI) o il. AWS SDKs 

### Console di gestione AWS
<a name="application-event-notifications-howto-set-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Mobile** (Dispositivi mobili), **Push notifications** (Notifiche push).

1. Nella pagina delle **notifiche push per dispositivi mobili**, nella sezione **Applicazioni della piattaforma**, scegli un'applicazione, quindi scegli **Modifica**.

1. Espandere la sezione **Event notifications (Notifiche evento)**.

1. Seleziona **Actions** (Azioni), **Configure events** (Configura eventi).

1. Inserisci gli ARNs argomenti da utilizzare per i seguenti eventi:
   + Creazione endpoint
   + Eliminazione endpoint
   + Aggiornamento endpoint
   + Errore di consegna

1. Scegli **Save changes** (Salva modifiche).

### AWS CLI
<a name="awscli"></a>

Esegui il comando [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

L'esempio seguente imposta lo stesso argomento Amazon SNS per tutti e quattro gli eventi dell'applicazione:

```
aws sns set-platform-application-attributes
--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"
```

### AWS SDKs
<a name="application-event-notifications-sdk"></a>

Imposta le notifiche degli eventi dell'applicazione inviando una `SetPlatformApplicationAttributes` richiesta con l'API Amazon SNS utilizzando AWS un SDK.

Per un elenco completo di guide ed esempi di codice per sviluppatori AWS SDK, tra cui assistenza per iniziare e informazioni sulle versioni precedenti, consulta. [Utilizzo di Amazon SNS con un SDK AWS](sdk-general-information-section.md)

# Operazioni API push per dispositivi mobili
<a name="mobile-push-api"></a>

Per utilizzare il push mobile di Amazon SNS APIs, devi prima soddisfare i prerequisiti per il servizio di notifica push, come Apple Push Notification Service (APNs) e Firebase Cloud Messaging (FCM). Per ulteriori informazioni sui prerequisiti, consulta [Prerequisiti per le notifiche utente Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Per inviare un messaggio di notifica push a un'app e a un dispositivo mobile utilizzando il APIs, devi prima utilizzare l'`CreatePlatformApplication`azione, che restituisce un attributo. `PlatformApplicationArn` L'attributo `PlatformApplicationArn` viene poi utilizzato da `CreatePlatformEndpoint`, che restituisce un attributo `EndpointArn`. Puoi utilizzare l'attributo `EndpointArn` insieme all'operazione `Publish` o inviare un messaggio di notifica a un'app e un dispositivo mobile oppure è possibile utilizzare l'attributo `EndpointArn` insieme all'operazione `Subscribe` per effettuare la sottoscrizione a un argomento. Per ulteriori informazioni, consulta [Configurazione delle notifiche push con Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

I push mobili di Amazon SNS APIs sono i seguenti: 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Crea un oggetto applicativo della piattaforma per uno dei servizi di notifica push supportati, come APNs FCM, a cui possono registrarsi dispositivi e app mobili. Restituisce un attributo `PlatformApplicationArn`, utilizzato dall'operazione `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Crea un endpoint per un dispositivo e un'app mobile su uno dei servizi di notifica push supportati. `CreatePlatformEndpoint` utilizza l'attributo `PlatformApplicationArn` restituito dall'operazione `CreatePlatformApplication`. L'attributo `EndpointArn` restituito quando si utilizza `CreatePlatformEndpoint` viene poi utilizzato insieme all'operazione `Publish` per inviare un messaggio di notifica a un'app e a un dispositivo mobile. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Crea un argomento su cui e possibile pubblicare i messaggi. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Elimina l'endpoint per un dispositivo e un'app mobile su uno dei servizi di notifica push supportati.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Elimina un oggetto dell'applicazione di piattaforma.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Elimina un argomento e tutte le sue sottoscrizioni.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Recupera gli attributi endpoint per un dispositivo e un'app mobile.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Recupera gli attributi dell'oggetto della piattaforma.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Elenca gli endpoint e gli attributi degli endpoint per dispositivi e app mobili in un servizio di notifica push supportato.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Elenca gli oggetti dell'applicazione di piattaforma per i servizi di notifica push supportati.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Invia un messaggio di notifica a tutti gli endpoint sottoscritti di un argomento.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Imposta gli attributi di un endpoint per un dispositivo e un'app mobile.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Imposta gli attributi dell'oggetto della piattaforma.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prepara la sottoscrizione di un endpoint inviando all'endpoint un messaggio di conferma. Per creare effettivamente un abbonamento, il proprietario dell'endpoint deve eseguire l' ConfirmSubscription azione con il token contenuto nel messaggio di conferma. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Elimina una sottoscrizione.

# Errori comuni dell'API push mobile di Amazon SNS
<a name="mobile-push-api-error"></a>

Gli errori restituiti da Amazon SNS APIs per dispositivi mobili push sono elencati nella tabella seguente. Per ulteriori informazioni su Amazon SNS APIs for mobile push, consulta. [Operazioni API push per dispositivi mobili](mobile-push-api.md)


| Errore | Descrizione | Codice di stato HTTPS | Operazione API | 
| --- | --- | --- | --- | 
| Application Name is null string (Nome applicazione è una stringa null) | Il nome di applicazione richiesto è impostato su null. | 400 | `CreatePlatformApplication` | 
| Platform Name is null string (Nome piattaforma è una stringa null) | Il nome di piattaforma richiesto è impostato su null. | 400 | `CreatePlatformApplication` | 
| Platform Name is invalid (Nome piattaforma non valido) | È stato fornito un out-of-range valore o non valido per il nome della piattaforma. | 400 | `CreatePlatformApplication` | 
| APNs — Il principale non è un certificato valido | È stato fornito un certificato non valido per il APNs principale, che è il certificato SSL. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Principal è un certificato valido ma non in formato.pem | Per il APNs principale, che è il certificato SSL, è stato fornito un certificato valido non in formato.pem. | 400 | `CreatePlatformApplication` | 
| APNs — Principal è un certificato scaduto | È stato fornito un certificato scaduto per il APNs principale, che è il certificato SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Il principale non è un certificato emesso da Apple | Un certificato non Apple è stato fornito per il principale APNs, ovvero il certificato SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Il preside non è fornito | Il APNs principale, che è il certificato SSL, non è stato fornito. | 400 | `CreatePlatformApplication` | 
| APNs — La credenziale non è stata fornita | La APNs credenziale, che è la chiave privata, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs — Le credenziali non sono in un formato .pem valido | La APNs credenziale, che è la chiave privata, non è in un formato .pem valido. | 400 | `CreatePlatformApplication` | 
| FCM: il server non è fornito APIKey  | La credenziale FCM, ovvero la chiave API, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| FCM: il server APIKey è vuoto | La credenziale FCM, ovvero la chiave API, è vuota. | 400 | `CreatePlatformApplication` | 
| FCM: il server APIKey è una stringa nulla | La credenziale FCM, ovvero la chiave API, è null. | 400 | `CreatePlatformApplication` | 
| FCM: il server non è valido APIKey  | La credenziale FCM, ovvero la chiave API, non è valida. | 400 | `CreatePlatformApplication` | 
| ADM - clientsecret is not provided (ADM - clientsecret non fornita) | Il segreto client richiesto non è fornito. | 400 | `CreatePlatformApplication` | 
| ADM - clientsecret is a null string (ADM - clientsecret è una stringa null) | La stringa richiesta per il segreto client è null. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1secret is empty string (ADM - client\$1secret è una stringa vuota) | La stringa richiesta per il segreto client è vuota. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1secret is not valid (ADM - client\$1secret non valida) | La stringa richiesta per il segreto client non è valida. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1id is empty string (ADM - client\$1id è una stringa vuota) | La stringa richiesta per l'ID client è vuota. | 400 | `CreatePlatformApplication` | 
| ADM - clientId is not provided (ADM - clientId non fornita) | La stringa richiesta per l'ID client non è fornita. | 400 | `CreatePlatformApplication` | 
| ADM - clientid is a null string (ADM - clientid è una stringa null) | La stringa richiesta per l'ID client è null. | 400 | `CreatePlatformApplication` | 
| ADM - client\$1id is not valid (ADM - client\$1id non valida) | La stringa richiesta per l'ID client non è valida. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated ha un formato ARN non valido | EventEndpointCreated ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted ha un formato ARN non valido | EventEndpointDeleted ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure ha un formato ARN non valido | EventDeliveryAttemptFailure ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure ha un formato ARN non valido | EventDeliveryFailure ha un formato ARN non valido. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated non è un argomento esistente | EventEndpointCreated non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted non è un argomento esistente | EventEndpointDeleted non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated non è un argomento esistente | EventEndpointUpdated non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure non è un argomento esistente | EventDeliveryAttemptFailure non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure non è un argomento esistente | EventDeliveryFailure non è un argomento esistente. | 400 | `CreatePlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `SetPlatformAttributes` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 400 | `SetPlatformAttributes` | 
| APNs — Il principale non è un certificato valido | È stato fornito un certificato non valido per il APNs principale, che è il certificato SSL. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Principal è un certificato valido ma non in formato.pem | Per il APNs principale, che è il certificato SSL, è stato fornito un certificato valido non in formato.pem. | 400 | `SetPlatformAttributes` | 
| APNs — Principal è un certificato scaduto | È stato fornito un certificato scaduto per il APNs principale, che è il certificato SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Il principale non è un certificato emesso da Apple | Un certificato non Apple è stato fornito per il principale APNs, ovvero il certificato SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Il preside non è fornito | Il APNs principale, che è il certificato SSL, non è stato fornito. | 400 | `SetPlatformAttributes` | 
| APNs — La credenziale non è stata fornita | La APNs credenziale, che è la chiave privata, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs — Le credenziali non sono in un formato .pem valido | La APNs credenziale, che è la chiave privata, non è in un formato .pem valido. | 400 | `SetPlatformAttributes` | 
| FCM: il server non è fornito APIKey  | La credenziale FCM, ovvero la chiave API, non è stata fornita. Per ulteriori informazioni, consulta il riferimento [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)all'API di Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| FCM: il server APIKey è una stringa nulla | La credenziale FCM, ovvero la chiave API, è null. | 400 | `SetPlatformAttributes` | 
| ADM - clientId is not provided (ADM - clientId non fornita) | La stringa richiesta per l'ID client non è fornita. | 400 | `SetPlatformAttributes` | 
| ADM - clientid is a null string (ADM - clientid è una stringa null) | La stringa richiesta per l'ID client è null. | 400 | `SetPlatformAttributes` | 
| ADM - clientsecret is not provided (ADM - clientsecret non fornita) | Il segreto client richiesto non è fornito. | 400 | `SetPlatformAttributes` | 
| ADM - clientsecret is a null string (ADM - clientsecret è una stringa null) | La stringa richiesta per il segreto client è null. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted ha un formato ARN non valido | EventEndpointDeleted ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated ha un formato ARN non valido | EventEndpointUpdated ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure ha un formato ARN non valido | EventDeliveryAttemptFailure ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure ha un formato ARN non valido | EventDeliveryFailure ha un formato ARN non valido. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated non è un argomento esistente | EventEndpointCreated non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted non è un argomento esistente | EventEndpointDeleted non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated non è un argomento esistente | EventEndpointUpdated non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure non è un argomento esistente | EventDeliveryAttemptFailure non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure non è un argomento esistente | EventDeliveryFailure non è un argomento esistente. | 400 | `SetPlatformAttributes` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `GetPlatformApplicationAttributes` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 403 | `GetPlatformApplicationAttributes` | 
| Token specified is invalid (Token specificato non valido) | Il token specificato non è valido. | 400 | `ListPlatformApplications` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 404 | `ListEndpointsByPlatformApplication` | 
| Token specified is invalid (Token specificato non valido) | Il token specificato non è valido. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `DeletePlatformApplication` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 403 | `DeletePlatformApplication` | 
| Platform ARN is invalid (ARN piattaforma non valido) | L'ARN della piattaforma non è valido. | 400 | `CreatePlatformEndpoint` | 
| Platform ARN is valid but does not belong to the user (ARN piattaforma valido ma non appartiene all'utente) | L'ARN della piattaforma è valido ma non appartiene all'utente. | 404 | `CreatePlatformEndpoint` | 
| Token is not specified (Token non specificato) | Il token non è specificato. | 400 | `CreatePlatformEndpoint` | 
| Token is not of correct length (Lunghezza token non corretta) | La lunghezza del token non è corretta. | 400 | `CreatePlatformEndpoint` | 
| Customer User data is too large (Dimensione dati utente cliente troppo grande) | La dimensione dei dati utente cliente non può essere superiore a 2048 byte nella codifica UTF-8. | 400 | `CreatePlatformEndpoint` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `DeleteEndpoint` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `DeleteEndpoint` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `SetEndpointAttributes` | 
| Token is not specified (Token non specificato) | Il token non è specificato. | 400 | `SetEndpointAttributes` | 
| Token is not of correct length (Lunghezza token non corretta) | La lunghezza del token non è corretta. | 400 | `SetEndpointAttributes` | 
| Customer User data is too large (Dimensione dati utente cliente troppo grande) | La dimensione dei dati utente cliente non può essere superiore a 2048 byte nella codifica UTF-8. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is invalid (ARN endpoint non valido) | L'ARN dell'endpoint non è valido. | 400 | `GetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user (ARN endpoint valido ma non appartiene all'utente) | L'ARN dell'endpoint è valido ma non appartiene all'utente. | 403 | `GetEndpointAttributes` | 
| Target ARN is invalid (ARN destinazione non valido) | L'ARN di destinazione non è valido. | 400 | `Publish` | 
| Target ARN is valid but does not belong to the user (ARN destinazione valido ma non appartiene all'utente) | L'ARN di destinazione è valido ma non appartiene all'utente. | 403 | `Publish` | 
| Message format is invalid (Formato messaggio non valido) | Il formato del messaggio non è valido. | 400 | `Publish` | 
| Message size is larger than supported by protocol/end-service (Dimensione messaggio superiore a quella supportata da protocollo/servizio finale) | La dimensione del messaggio è superiore a quella supportata dal protocollo/servizio finale. | 400 | `Publish` | 

# Utilizzo dell'attributo time to live message di Amazon SNS per le notifiche push mobili
<a name="sns-ttl"></a>

Amazon Simple Notification Service (Amazon SNS) ti aiuta a impostare un attributo messaggio *TTL (Time To Live)* per messaggi di notifica push per dispositivi mobili. Questa funzionalità si aggiunge alla capacità esistente di impostare il TTL all'interno del corpo del messaggio Amazon SNS per i servizi di notifica push mobili che lo supportano, come Amazon Device Messaging (ADM) e Firebase Cloud Messaging (FCM) durante l'invio ad Android.

L'attributo di messaggio TTL è utilizzato per specificare i metadati di scadenza strutturati su un messaggio. Ciò consente di specificare il periodo di tempo a disposizione del servizio di notifica push, come Apple Push Notification Service (APNs) o FCM, per recapitare il messaggio all'endpoint. Se per qualche motivo (per esempio il dispositivo mobile è stato disattivato) il messaggio non può essere consegnato entro il TTL specificato, verrà eliminato senza ulteriori tentativi di consegna. Per specificare il TTL all'interno degli attributi del messaggio, puoi utilizzare i Console di gestione AWS kit di sviluppo AWS software (SDKs) o l'API di interrogazione. 

## Gli attributi di messaggio TTL riservati ai servizi di notifica push
<a name="sns-ttl-msg-attrib"></a>

Di seguito è riportato un elenco degli attributi dei messaggi TTL per i servizi di notifica push che puoi utilizzare per impostare quando utilizzi l'API AWS SDKs o query:


****  

| Servizio di notifiche push | Attributo di messaggio TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Servizio di notifica push Apple () APNs | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox del servizio di notifica push Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM in caso di invio ad Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Windows Push Notification Services (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Ogni servizio di notifica push gestisce il TTL in modo diverso. Amazon SNS offre una vista astratta del TTL su tutti i servizi di notifica push, il che rende più semplice specificare il TTL. Quando utilizzi il TTL Console di gestione AWS per specificare (in secondi), devi inserire il valore TTL una sola volta e Amazon SNS calcolerà il TTL per ciascuno dei servizi di notifica push selezionati durante la pubblicazione del messaggio. 

 Il TTL è relativo all'ora di pubblicazione. Prima di consegnare un messaggio di notifica push a un servizio di notifica push specifico, Amazon SNS calcola il tempo di sosta (il tempo tra il timestamp di pubblicazione e l'istante immediatamente precedente il passaggio a un servizio di notifica push) per la notifica push e passa il TTL rimanente al servizio di notifica push specifico. Se il TTL è più breve del tempo di sosta, Amazon SNS non proverà a pubblicare. 

Se si specifica un TTL per un messaggio di notifica push, il valore TTL deve essere un numero intero positivo, a meno che il valore di non `0` abbia un significato specifico per il servizio di notifica push, ad esempio con APNs e FCM (quando si invia ad Android). Se il valore TTL è impostato su `0` e il servizio di notifica push non ha un significato specifico per `0`, Amazon SNS non consegnerà il messaggio. [Per ulteriori informazioni sul parametro TTL impostato su `0` quando si utilizza APNs, vedere la *Tabella A-3 Identificatori di elementi* per le notifiche remote nella documentazione dell'API Binary Provider.](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html)

## Ordine di precedenza per determinare il TTL
<a name="sns-ttl-precedence"></a>

La precedenza che Amazon SNS utilizza per determinare il TTL per un messaggio di notifica push è basata sul seguente ordine, in cui il numero più basso ha la priorità più alta: 

1. TTL attributo di messaggio

1. TTL testo messaggio

1. TTL di default per il servizio di notifica push (varia in base al servizio)

1. TTL di default Amazon SNS (4 settimane)

Se imposti diversi valori TTL (uno negli attributi di messaggio e un altro nel corpo del messaggio) per lo stesso messaggio, Amazon SNS modificherà il TTL nel corpo del messaggio in modo che corrisponda al TTL specificato nell'attributo del messaggio stesso.

## Specificare il TTL utilizzando Console di gestione AWS
<a name="sns-ttl-console"></a>

1. Accedi alla [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Nel pannello di navigazione, scegli **Mobile** (Dispositivi mobili), **Push notifications** (Notifiche push).

1. Nella pagina **Mobile push notifications (Notifiche push per dispositivi mobili)**, nella sezione **Platform applications (Applicazioni di piattaforma)**, selezionare un'applicazione.

1. **Nella ***MyApplication*** pagina, nella sezione **Endpoints, scegli un endpoint** dell'applicazione, quindi scegli Pubblica messaggio.**

1. Nella sezione **Message details (Dettagli messaggio)**, immettere il TTL (numero di secondi a disposizione del servizio di notifica push per recapitare il messaggio all'endpoint).

1. Seleziona **Publish message (Pubblica messaggio)**.

# Regioni supportate dall'applicazione mobile Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

Al momento, puoi creare applicazioni per dispositivi mobili nelle seguenti regioni:
+ Stati Uniti orientali (Ohio)
+ Stati Uniti orientali (Virginia settentrionale)
+ Stati Uniti occidentali (California settentrionale)
+ Stati Uniti occidentali (Oregon)
+ Africa (Città del Capo)
+ Asia Pacifico (Hong Kong)
+ Asia Pacifico (Giacarta)
+ Asia Pacifico (Mumbai)
+ Asia Pacifico (Osaka)
+ Asia Pacifico (Seoul)
+ Asia Pacifico (Singapore)
+ Asia Pacifico (Sydney)
+ Asia Pacifico (Tokyo)
+ Canada (Centrale)
+ Europa (Francoforte)
+ Europa (Irlanda)
+ Europa (Londra)
+ Europa (Milano)
+ Europa (Spagna)
+ Europa (Parigi)
+ Europa (Stoccolma)
+ Medio Oriente (Bahrein)
+ Medio Oriente (Emirati Arabi Uniti)
+ Sud America (San Paolo)
+ AWS GovCloud (Stati Uniti occidentali)

# Best practice per la gestione delle notifiche push mobili di Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Questa sezione illustra diverse best practice che potrebbero rivelarsi utili per migliorare il coinvolgimento dei clienti.

## Gestione di endpoint
<a name="channels-sms-best-practices-endpoint-management"></a>

Potrebbero verificarsi problemi di consegna in situazioni in cui i token del dispositivo cambiano a causa di un'azione dell'utente sul dispositivo (ad esempio, un'app viene reinstallata sul dispositivo) o [gli aggiornamenti dei certificati](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) riguardano i dispositivi che eseguono una particolare versione di iOS. La [registrazione](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) a APNs ogni avvio dell'app è una best practice consigliata da Apple.

Poiché il token del dispositivo non cambia ogni volta che un'app viene aperta da un utente, è possibile utilizzare l'API idempotente [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html). Tuttavia, ciò può introdurre duplicati per lo stesso dispositivo nei casi in cui il token stesso non è valido o se l'endpoint è valido ma disabilitato (ad esempio, una mancata corrispondenza tra gli ambienti di produzione e sandbox).

Può essere utilizzato un meccanismo di gestione dei token del dispositivo, come quello nello [pseudocodice](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code).

Per informazioni sulla gestione e la manutenzione dei token dei dispositivi FCM v1, vedere. [Gestione Amazon SNS degli endpoint Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

## Registrazione dello stato della consegna
<a name="channels-sms-best-practices-delivery-logging"></a>

Per monitorare lo stato di consegna delle notifiche push, ti consigliamo di abilitare la registrazione dello stato di consegna per l'applicazione della piattaforma Amazon SNS. In questo modo è possibile risolvere i problemi di consegna, poiché i log contengono [codici di risposta](sns-msg-status.md#platform-returncodes) di provider restituiti dal servizio push della piattaforma. Per informazioni dettagliate sull'abilitazione della registrazione dello stato di consegna, vedere [Come posso accedere ai registri di consegna degli argomenti Amazon SNS per le notifiche push?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notifiche degli eventi
<a name="channels-sms-best-practices-event-notifications"></a>

Per gestire gli endpoint in modo che siano basati su eventi, è possibile utilizzare la funzionalità [Notifiche eventi](application-event-notifications.md#application-event-notifications-sdk). Ciò consente all'argomento Amazon SNS configurato di eseguire il fanout degli eventi agli abbonati, come una funzione Lambda, per eventi applicativi della piattaforma di creazione, eliminazione, aggiornamenti e errori di consegna degli endpoint.