Använda Notification Hubs från Java

Det här avsnittet beskriver de viktigaste funktionerna i den nya officiella Azure Notification Hub Java SDK som stöds fullt ut. Det här projektet är ett projekt med öppen källkod och du kan visa hela SDK-koden i Java SDK.

I allmänhet kan du komma åt alla Notification Hubs-funktioner från en Java/PHP/Python/Ruby-serverdel med hjälp av Notification Hub REST-gränssnittet enligt beskrivningen i MSDN-ämnet Notification Hubs REST API:er. Denna Java SDK ger en tunn wrapper över dessa REST-gränssnitt i Java.

SDK stöder för närvarande:

  • CRUD på Notification Hubs
  • CRUD vid registreringar
  • Installationshantering
  • Importera/exportera registreringar
  • Vanliga sändningar
  • Schemalagda sändningar
  • Async-åtgärder via Java NIO
  • Plattformar som stöds: APNS (iOS), FCM (Android), WNS (Windows Store-appar), MPNS(Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android utan Google-tjänster)

Anteckning

Microsoft Push Notification Service (MPNS) har blivit inaktuell och stöds inte längre.

SDK-användning

Kompilera och skapa

Använda Maven

Så här skapar du:

mvn package

Kod

Notification Hub CRUDs

Skapa en NamespaceManager:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Skapa Notification Hub:

NotificationHubDescription hub = new NotificationHubDescription("hubname");
hub.setWindowsCredential(new WindowsCredential("sid","key"));
hub = namespaceManager.createNotificationHub(hub);

ELLER

hub = new NotificationHub("connection string", "hubname");

Hämta Notification Hub:

hub = namespaceManager.getNotificationHub("hubname");

Uppdatera Notification Hub:

hub.setMpnsCredential(new MpnsCredential("mpnscert", "mpnskey"));
hub = namespaceManager.updateNotificationHub(hub);

Ta bort meddelandehubb:

namespaceManager.deleteNotificationHub("hubname");

Registrerings-CRUD:erna

Skapa en Notification Hub-klient:

hub = new NotificationHub("connection string", "hubname");

Skapa Windows-registrering:

WindowsRegistration reg = new WindowsRegistration(new URI(CHANNELURI));
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);

Skapa iOS-registrering:

AppleRegistration reg = new AppleRegistration(DEVICETOKEN);
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);

På samma sätt kan du skapa registreringar för Android (FCM), Windows Phone (MPNS) och Kindle Fire (ADM).

Skapa mallregistreringar:

WindowsTemplateRegistration reg = new WindowsTemplateRegistration(new URI(CHANNELURI), WNSBODYTEMPLATE);
reg.getHeaders().put("X-WNS-Type", "wns/toast");
hub.createRegistration(reg);

Skapa registreringar med hjälp av mönstret skapa registrerings-ID + upsert:

Tar bort dubbletter på grund av förlorade svar om du lagrar registrerings-ID:n på enheten:

String id = hub.createRegistrationId();
WindowsRegistration reg = new WindowsRegistration(id, new URI(CHANNELURI));
hub.upsertRegistration(reg);

Uppdatera registreringar:

hub.updateRegistration(reg);

Ta bort registreringar:

hub.deleteRegistration(regid);

Frågeregistreringar:

  • Hämta enkel registrering:
hub.getRegistration(regid);
  • Hämta alla registreringar i hubben:
hub.getRegistrations();
  • Hämta registreringar med tagg:
hub.getRegistrationsByTag("myTag");
  • Hämta registreringar per kanal:
hub.getRegistrationsByChannel("devicetoken");

Alla samlingsfrågor stöder $top och fortsättningstoken.

Api-användning för installation

Installations-API är en alternativ mekanism för registreringshantering. I stället för att underhålla flera registreringar, som inte är triviala och enkelt kan göras felaktigt eller ineffektivt, är det nu möjligt att använda ett objekt för enkel installation.

Installationen innehåller allt du behöver: push-kanal (enhetstoken), taggar, mallar, sekundära paneler (för WNS och APNS). Du behöver inte anropa tjänsten för att hämta ID längre – generera bara GUID eller någon annan identifierare, behålla den på enheten och skicka den till serverdelen tillsammans med push-kanal (enhetstoken).

På serverdelen bör du bara göra ett enda anrop till CreateOrUpdateInstallation. Det är helt idempotent, så försök igen om det behövs.

Som exempel för Amazon Kindle Fire:

Installation installation = new Installation("installation-id", NotificationPlatform.Adm, "adm-push-channel");
hub.createOrUpdateInstallation(installation);

Om du vill uppdatera den:

installation.addTag("foo");
installation.addTemplate("template1", new InstallationTemplate("{\"data\":{\"key1\":\"$(value1)\"}}","tag-for-template1"));
installation.addTemplate("template2", new InstallationTemplate("{\"data\":{\"key2\":\"$(value2)\"}}","tag-for-template2"));
hub.createOrUpdateInstallation(installation);

I avancerade scenarier använder du funktionen för partiell uppdatering, vilket gör att endast vissa egenskaper för installationsobjektet kan ändras. Partiell uppdatering är en delmängd av JSON Patch-åtgärder som du kan köra mot installationsobjektet.

PartialUpdateOperation addChannel = new PartialUpdateOperation(UpdateOperationType.Add, "/pushChannel", "adm-push-channel2");
PartialUpdateOperation addTag = new PartialUpdateOperation(UpdateOperationType.Add, "/tags", "bar");
PartialUpdateOperation replaceTemplate = new PartialUpdateOperation(UpdateOperationType.Replace, "/templates/template1", new InstallationTemplate("{\"data\":{\"key3\":\"$(value3)\"}}","tag-for-template1")).toJson());
hub.patchInstallation("installation-id", addChannel, addTag, replaceTemplate);

Ta bort installation:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patchoch Delete är så småningom konsekventa med Get. Den begärda åtgärden går bara till systemkön under anropet och körs i bakgrunden. Get är inte utformat för huvudkörningsscenariot, men bara för felsökning och felsökning begränsas det av tjänsten.

Skicka flöde för installationer är samma som för registreringar. Om du vill rikta meddelanden till den specifika installationen använder du bara taggen "InstallationId:{desired-id}". I det här fallet är koden:

Notification n = Notification.createWindowsNotification("WNS body");
hub.sendNotification(n, "InstallationId:{installation-id}");

För en av flera mallar:

Map<String, String> prop =  new HashMap<String, String>();
prop.put("value3", "some value");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n, "InstallationId:{installation-id} && tag-for-template1");

Schemalägg meddelanden (tillgängligt för STANDARD-nivå)

Samma som vanlig sändning men med ytterligare en parameter – scheduledTime, som anger när meddelandet ska levereras. Tjänsten accepterar alla tidpunkter mellan nu + 5 minuter och nu + 7 dagar.

Schemalägg ett internt Windows-meddelande:

Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
Notification n = Notification.createWindowsNotification("WNS body");
hub.scheduleNotification(n, c.getTime());

Import/export (tillgängligt för STANDARD-nivå)

Du kan behöva utföra massåtgärder mot registreringar. Vanligtvis är det för integrering med ett annat system eller en massiv korrigering för att uppdatera taggarna. Vi rekommenderar inte att du använder flödet Hämta/uppdatera om tusentals registreringar är inblandade. Systemets import-/exportfunktion är utformad för att täcka scenariot. Du ger åtkomst till en blobcontainer under ditt lagringskonto som källa för inkommande data och plats för utdata.

Skicka ett exportjobb:

NotificationHubJob job = new NotificationHubJob();
job.setJobType(NotificationHubJobType.ExportRegistrations);
job.setOutputContainerUri("container uri with SAS signature");
job = hub.submitNotificationHubJob(job);

Skicka ett importjobb:

NotificationHubJob job = new NotificationHubJob();
job.setJobType(NotificationHubJobType.ImportCreateRegistrations);
job.setImportFileUri("input file uri with SAS signature");
job.setOutputContainerUri("container uri with SAS signature");
job = hub.submitNotificationHubJob(job);

Vänta tills ett jobb är klart:

while(true){
    Thread.sleep(1000);
    job = hub.getNotificationHubJob(job.getJobId());
    if(job.getJobStatus() == NotificationHubJobStatus.Completed)
        break;
}

Hämta alla jobb:

List<NotificationHubJob> jobs = hub.getAllNotificationHubJobs();

URI med SAS-signatur:

Den här URL:en är URL:en för en blobfil eller blobcontainer plus en uppsättning parametrar som behörigheter och förfallotid plus signatur för alla dessa saker som görs med kontots SAS-nyckel. Azure Storage Java SDK har omfattande funktioner som att skapa dessa URI:er. Som ett enkelt alternativ kan du ta en titt på testklassen ImportExportE2E (från GitHub-platsen) som har grundläggande och kompakt implementering av signeringsalgoritmen.

Skicka meddelanden

Meddelandeobjektet är helt enkelt en brödtext med rubriker. Vissa verktygsmetoder hjälper till att skapa objekten för inbyggda meddelanden och mallmeddelanden.

  • Windows Store och Windows Phone 8.1 (icke-Silverlight)
String toast = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">Hello from Java!</text></binding></visual></toast>";
Notification n = Notification.createWindowsNotification(toast);
hub.sendNotification(n);
  • iOS
String alert = "{\"aps\":{\"alert\":\"Hello from Java!\"}}";
Notification n = Notification.createAppleNotification(alert);
hub.sendNotification(n);
  • Android
String message = "{\"data\":{\"msg\":\"Hello from Java!\"}}";
Notification n = Notification.createFcmNotification(message);
hub.sendNotification(n);
  • Windows Phone 8.0 och 8.1 Silverlight
String toast = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
            "<wp:Notification xmlns:wp=\"WPNotification\">" +
                "<wp:Toast>" +
                    "<wp:Text1>Hello from Java!</wp:Text1>" +
                "</wp:Toast> " +
            "</wp:Notification>";
Notification n = Notification.createMpnsNotification(toast);
hub.sendNotification(n);
  • Kindle Fire
String message = "{\"data\":{\"msg\":\"Hello from Java!\"}}";
Notification n = Notification.createAdmNotification(message);
hub.sendNotification(n);
  • Skicka till taggar
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Skicka till tagguttryck
hub.sendNotification(n, "foo && ! bar");
  • Skicka mallavisering
Map<String, String> prop =  new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);

När du kör Java-koden bör du nu skapa ett meddelande som visas på målenheten.

Nästa steg

Det här avsnittet visade hur du skapar en enkel Java REST-klient för Notification Hubs. Här kan göra du följande: