Share via


Gestione delle registrazioni

Questo argomento illustra come registrare i dispositivi agli hub di notifica per ricevere notifiche push. L'argomento descrive le registrazioni a livello generale, quindi introduce i due modelli principali per la registrazione dei dispositivi: la registrazione dal dispositivo direttamente all'hub di notifica e la registrazione tramite il back-end dell'applicazione.

Che cos'è una registrazione del dispositivo

Una registrazione è un'entità secondaria di un hub di notifica e associa un handle PNS del dispositivo (un handle del servizio di notifica della piattaforma, ad esempio ChannelURI, token del dispositivo, GCM registrationId) con tag e possibilmente un modello. I tag vengono usati per instradare le notifiche al set corretto di handle di dispositivo. Per altre informazioni, vedere Routing e espressioni di tag. I modelli vengono usati per implementare una trasformazione a livello di singola registrazione. Per altre informazioni, vedere Modelli.

È importante notare che le registrazioni sono temporanee. Analogamente agli handle PNS che contengono, le registrazioni scadono. È possibile impostare il tempo per la registrazione nell'hub di notifica, fino a un massimo di 90 giorni. Questo limite significa che devono essere aggiornati periodicamente e anche che non devono essere l'unico archivio per informazioni importanti. Questa scadenza automatica semplifica anche la pulizia quando l'applicazione per dispositivi mobili viene disinstallata.

Le registrazioni devono contenere l'handle PNS più recente per ogni dispositivo/canale. Poiché gli handle PNS possono essere ottenuti solo nell'app client nel dispositivo, un modo per gestire le registrazioni è direttamente nell'app client. D'altra parte, le considerazioni sulla sicurezza e la logica di business correlate ai tag potrebbero richiedere di gestire la registrazione nel back-end dell'app. La sezione seguente descrive questi due approcci.

Gestione delle registrazioni dal dispositivo

Quando si gestiscono le registrazioni dalle app client, il back-end è responsabile solo dell'invio di notifiche. Le app client mantengono gli handle PNS aggiornati e registrano ai tag. Questo modello è illustrato nell'immagine seguente.

Registration Management

Il dispositivo recupera l'handle PNS dal PNS, quindi esegue la registrazione direttamente con l'hub di notifica. Una volta che la registrazione ha esito positivo, il back-end dell'app può inviare una notifica relativa alla registrazione. Per altre informazioni su come inviare le notifiche, vedere Routing ed espressioni tag.

Si noti che in questo caso si useranno solo i diritti Listen per accedere agli hub di notifica dal dispositivo. Per altre informazioni, vedere Sicurezza.

Il codice seguente registra il dispositivo usando riferimenti all'API hub di notifica:

await hub.RegisterNativeAsync(channelUri, tags);
[hub registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError* error) {
    if (error != nil) {
        NSLog(@"Error registering for notifications: %@", error);
    }
}];

hub.register(regid, tags);

Questi metodi creano o aggiornano una registrazione per il dispositivo in cui vengono chiamati. Ciò significa che, per aggiornare l'handle o i tag, è necessario sovrascrivere l'intera registrazione. Tenere presente che le registrazioni sono temporanee, quindi è consigliabile avere sempre un archivio affidabile (archiviazione locale nel dispositivo o nel back-end dell'app) con i tag correnti necessari per un dispositivo specifico. Per esempi più dettagliati su come aggiornare le registrazioni, vedere l'esercitazione Sulle notizie di rilievo .

È anche possibile usare le API REST per registrare dal dispositivo. Per altre informazioni, vedere Come usare l'interfaccia REST dell'hub di notifica.

Le esercitazioni sullo scenario seguenti forniscono indicazioni dettagliate sulla registrazione dal client:

Modelli

Se si desidera usare modelli, ogni registrazione rappresenta un singolo modello. Ciò significa che se il dispositivo usa due modelli, è necessario registrare ogni modello in modo indipendente con il proprio handle PNS e set di tag.

Per le registrazioni native, ovvero senza un modello, i metodi di registrazione per i modelli creano o aggiornano le registrazioni esistenti. Per indirizzare modelli diversi, specificare un nome modello durante la registrazione. Specificare nomi diversi se si desidera mantenere più modelli per lo stesso dispositivo.

Importante

Quando si usano modelli, non è necessario registrare il dispositivo, come illustrato nella sezione precedente. Questa registrazione viene usata solo se si inviano notifiche native (notifiche inviate in un formato specifico della piattaforma).

Il codice seguente registra il dispositivo usando riferimenti all'API hub di notifica:

await hub.RegisterTemplateAsync(channelUri, template, templateName, tags);
[hub registerTemplateWithDeviceToken:deviceToken name:templateName jsonBodyTemplate: template expiryTemplate:nil tags:nil completion:^(NSError* error) {
    if (error != nil) {
        NSLog(@"Error registering for notifications: %@", error);
    }
}];

hub.registerTemplate(regId, templateName, template, tags);

Si noti che ogni chiamata di registrazione fornisce, oltre all'handle PNS e al set facoltativo di tag, un modello per il corpo della notifica e un nome per il modello. Inoltre, ogni piattaforma può avere proprietà aggiuntive che fanno parte del modello. Nel caso di Windows Store (usando WNS) e Windows Phone 8 (usando MPNS), un set aggiuntivo di intestazioni può essere parte del modello. Nel caso degli APN, è possibile impostare una proprietà di scadenza su una costante o un'espressione del modello.

Per istruzioni su come modificare questi campi modello, vedere Riferimenti api o API REST dell'hub di notifica.

Riquadri secondari per le app di Windows Store

Per le applicazioni client di Windows Store, inviare notifiche ai riquadri secondari equivale a inviarle a quello primario. Sono supportate sia registrazioni native che modello. L'unica differenza è che i riquadri secondari hanno un ChannelUri diverso, che l'SDK nell'app client gestisce in modo trasparente.

A livello generale, tutte le informazioni fornite nelle sezioni precedenti funzionano con riquadri secondari chiamando i metodi corrispondenti sugli oggetti esposti nella proprietà dizionario Microsoft.WindowsAzure.Messaging.NotificationHub.SecondaryTiles. Ad esempio:

await hub.SecondaryTiles["myTileId"].RegisterNativeAsync(new string[] {"Yankees"});
await hub.SecondaryTiles["myTileId"].RegisterTemplateAsync(buildToastTemplate(), "toastTemplate", new string[] {"RedSox"});

Il dizionario SecondaryTiles usa lo stesso TileId usato per creare l'oggetto SecondaryTiles nell'app Windows Store.

Come nel caso del valore ChannelUri primario, i valori ChannelUri dei riquadri secondari possono cambiare in qualsiasi momento. Per mantenere aggiornate le registrazioni dell'app client nell'hub di notifica, il dispositivo deve aggiornarli con i channeluri correnti dei riquadri secondari.

Nota

È possibile eliminare i riquadri secondari quando l'app è inattiva. Le registrazioni corrispondenti non generano notifiche e verranno eliminate automaticamente dagli hub di notifica.

Svantaggi della registrazione dal dispositivo

La registrazione dal dispositivo è il metodo più semplice, ma presenta alcuni svantaggi.

Il primo svantaggio è che un'app client può aggiornare solo i propri tag quando l'app è attiva. Ad esempio, se un utente dispone di due dispositivi che registrano tag correlati ai team sportivi, quando il primo dispositivo registra per un tag aggiuntivo (ad esempio, Seahawks), il secondo dispositivo non riceverà le notifiche relative ai Seahawks finché l'app nel secondo dispositivo non viene eseguita una seconda volta. Più in generale, quando i tag interessano più dispositivi, la gestione dei tag dal back-end rappresenta una soluzione migliore.

Il secondo svantaggio della gestione delle registrazioni dall'app client è che, poiché le applicazioni possono essere oggetto di un attacco, proteggere la registrazione tramite tag specifici richiede particolare attenzione, come illustrato nella sezione "Sicurezza a livello di tag".

Gestione delle registrazioni dal back-end dell'app

La gestione delle registrazioni dal back-end richiede la scrittura di codice aggiuntivo. L'app dal dispositivo deve fornire l'handle PNS aggiornato al back-end ogni volta che l'app inizia (insieme a tag e modelli) e il back-end deve aggiornare questo handle in bus di servizio. Questa progettazione è illustrata nell'immagine seguente.

Registration Management

I vantaggi della gestione delle registrazioni dal back-end sono la possibilità di modificare i tag alle registrazioni anche quando l'app corrispondente nel dispositivo è inattiva e per autenticare l'app client prima di aggiungere un tag alla relativa registrazione.

Dal back-end dell'app è possibile eseguire operazioni CRUD di base sulle registrazioni. Ad esempio:

var hub = NotificationHubClient.CreateClientFromConnectionString("{connectionString}", "hubName");
            
// create a registration description object of the correct type, e.g.
var reg = new WindowsRegistrationDescription(channelUri, tags);

// Create
await hub.CreateRegistrationAsync(reg);

// Get by id
var r = await hub.GetRegistrationAsync<RegistrationDescription>("id");

// update
r.Tags.Add("myTag");

// update on hub
await hub.UpdateRegistrationAsync(r);

// delete
await hub.DeleteRegistrationAsync(r);

È anche possibile usare Node o le API REST.

Importante

Il back-end deve gestire la concorrenza tra gli aggiornamenti delle registrazioni. Il bus di servizio offre il controllo della concorrenza ottimistica per la gestione delle registrazioni. A livello HTTP, questa operazione viene implementata con l'uso di ETag nelle operazioni di gestione della registrazione. Questa funzionalità viene usata in modo trasparente dagli SDK Microsoft, che generano un'eccezione se un aggiornamento viene rifiutato a causa della concorrenza. Il backend dell'app è responsabile della gestione di queste eccezioni e dei nuovi tentativi di aggiornamento, se necessario.

Risorse aggiuntive

Le esercitazioni sullo scenario seguenti forniscono indicazioni dettagliate sulla registrazione dall'app back-end: