Registreringshantering

Det här avsnittet beskriver hur du registrerar enheter till meddelandehubbar för att ta emot push-meddelanden. Avsnittet beskriver registreringar på hög nivå och introducerar sedan de två huvudsakliga mönstren för registrering av enheter: registrering från enheten direkt till meddelandehubben och registrering via programmets serverdel.

Vad är en enhetsregistrering?

En registrering är en underentitet i en meddelandehubb och associerar en PNS-handtag (en plattformsmeddelandetjänstreferens, till exempel ChannelURI, enhetstoken GCM registrationId) med taggar och eventuellt en mall. Taggar används för att dirigera meddelanden till rätt uppsättning enhetshandtag. Mer information finns i Routning och tagguttryck. Mallar används för att implementera transformering per registrering. Mer information finns i Mallar.

Det är viktigt att notera att registreringar är tillfälliga. På samma sätt som PNS-handtagen som de innehåller upphör registreringarna att gälla. Du kan ange time to live för en registrering på Notification Hub, upp till högst 90 dagar. Den här gränsen innebär att de måste uppdateras regelbundet och att de inte bör vara det enda arkivet för viktig information. Den här automatiska förfallotiden förenklar även rensningen när mobilprogrammet avinstalleras.

Registreringar måste innehålla den senaste PNS-referensen för varje enhet/kanal. Eftersom PNS-referenser endast kan hämtas i klientappen på enheten är ett sätt att hantera registreringar direkt i klientappen. Å andra sidan kan säkerhetsöverväganden och affärslogik som rör taggar kräva att du hanterar registreringen i appens serverdel. I följande avsnitt beskrivs dessa två metoder.

Registreringshantering från enheten

När du hanterar registreringar från klientappar ansvarar serverdelen endast för att skicka meddelanden. Klientappar håller PNS-handtagen uppdaterade och registrerar sig för taggar. Följande bild illustrerar det här mönstret.

Registration Management

Enheten hämtar först PNS-referensen från PNS och registreras sedan direkt med meddelandehubben. När registreringen har slutförts kan appens serverdel skicka ett meddelande för registreringen. Mer information om hur du skickar meddelanden finns i Routning och tagguttryck.

Observera att i det här fallet använder du bara lyssnarrättigheter för att få åtkomst till dina meddelandehubbar från enheten. Mer information finns i Säkerhet.

Följande kod registrerar din enhet med notification hubs API-referenser:

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);

De här metoderna skapar eller uppdaterar en registrering för enheten som de anropas på. Det innebär att du måste skriva över hela registreringen för att kunna uppdatera referensen eller taggarna. Kom ihåg att registreringar är tillfälliga, så du bör alltid ha ett tillförlitligt lager (antingen lokal lagring på enheten eller i appens serverdel) med de aktuella taggarna som en specifik enhet behöver. Mer detaljerade exempel på hur du uppdaterar registreringar finns i självstudien Senaste nytt .

Du kan också använda REST-API:erna för att registrera från enheten. Mer information finns i Så här använder du REST-gränssnittet för Notification Hubs.

Följande scenariosjälvstudier ger stegvis vägledning om registrering från klienten:

Mallar

Om du vill använda mallar representerar varje registrering en enskild mall. Det innebär att om enheten använder två mallar måste du registrera varje mall separat med ett eget PNS-handtag och en uppsättning taggar.

För interna registreringar (dvs. utan mall) skapar eller uppdaterar registreringar registreringar. Om du vill rikta in dig på olika mallar anger du ett mallnamn när du registrerar. Du anger olika namn om du vill underhålla flera mallar för samma enhet.

Viktigt

När du använder mallar behöver du inte registrera enheten enligt föregående avsnitt. Registreringen används bara om du skickar interna meddelanden (meddelanden som skickas i ett plattformsspecifikt format).

Följande kod registrerar din enhet med notification hubs API-referenser:

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);

Observera att varje registreringsanrop tillhandahåller, förutom PNS-referensen och den valfria uppsättningen taggar, en mall för meddelandets brödtext och ett namn för mallen. Dessutom kan varje plattform ha ytterligare egenskaper som ingår i mallen. När det gäller Windows Store (med WNS) och Windows Phone 8 (med MPNS) kan ytterligare en uppsättning rubriker ingå i mallen. När det gäller APN:er kan du ange en förfalloegenskap till antingen en konstant eller ett malluttryck.

Anvisningar om hur du ändrar dessa mallfält finns i API-referenser eller Notification Hubs REST API:er.

Sekundära paneler för Windows Store-appar

För Windows Store-klientprogram är det samma sak att skicka meddelanden till sekundära paneler som att skicka dem till den primära. Både interna registreringar och mallregistreringar stöds. Den enda skillnaden är att sekundära paneler har en annan ChannelUri, som SDK:n i klientappen hanterar transparent.

På hög nivå fungerar all information i föregående avsnitt med sekundära paneler genom att anropa motsvarande metoder för de objekt som exponeras i ordlisteegenskapen Microsoft.WindowsAzure.Messaging.NotificationHub.SecondaryTiles. Exempel:

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

SecondaryTiles-ordlistan använder samma TileId som används för att skapa SecondaryTiles-objektet i din Windows Store-app.

Precis som med den primära ChannelUri kan ChannelUris för sekundära paneler ändras när som helst. För att hålla klientappregistreringarna i meddelandehubben uppdaterade måste enheten uppdatera dem med aktuella ChannelUris för de sekundära panelerna.

Anteckning

Du kan ta bort sekundära paneler när appen är inaktiv. Motsvarande registreringar resulterar inte i några meddelanden och tas automatiskt bort av meddelandehubbarna.

Nackdelar med registrering från enheten

Registrering från enheten är den enklaste metoden, men det finns vissa nackdelar.

Den första nackdelen är att en klientapp bara kan uppdatera sina taggar när appen är aktiv. Om en användare till exempel har två enheter som registrerar taggar relaterade till sportlag, när den första enheten registrerar sig för en ytterligare tagg (till exempel Seahawks), får den andra enheten inte meddelanden om Seahawks förrän appen på den andra enheten körs en andra gång. Mer allmänt är det önskvärt att hantera taggar från serverdelen när taggar påverkas av flera enheter.

Den andra nackdelen med registreringshantering från klientappen är att eftersom appar kan hackas, kräver skydd av registreringen till specifika taggar extra försiktighet, enligt beskrivningen i avsnittet "Säkerhet på taggnivå".

Registreringshantering från appens serverdel

Hantering av registreringar från serverdelen kräver att ytterligare kod skrivs. Appen från enheten måste tillhandahålla den uppdaterade PNS-referensen till serverdelen varje gång appen startar (tillsammans med taggar och mallar), och serverdelen måste uppdatera handtaget på Service Bus. Följande bild illustrerar den här designen.

Registration Management

Fördelarna med att hantera registreringar från serverdelen är möjligheten att ändra taggar till registreringar även när motsvarande app på enheten är inaktiv och att autentisera klientappen innan du lägger till en tagg i registreringen.

Från appens serverdel kan du utföra grundläggande CRUDS-åtgärder på registreringar. Exempel:

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);

Du kan också använda Node eller REST-API:erna.

Viktigt

Serverdelen måste hantera samtidighet mellan registreringsuppdateringar. Service Bus erbjuder optimistisk samtidighetskontroll för registreringshantering. På HTTP-nivå implementeras detta med ETag för registreringsåtgärder. Den här funktionen används transparent av Microsoft SDK:er, vilket utlöser ett undantag om en uppdatering avvisas av samtidighetsskäl. Appens serverdel ansvarar för att hantera dessa undantag och försöka uppdatera igen om det behövs.

Ytterligare resurser

Följande scenariosjälvstudier ger stegvis vägledning om registrering från appens serverdel: