Jak používat Notification Hubs z Javy

Toto téma popisuje klíčové funkce nové plně podporované oficiální sady Java SDK centra oznámení Azure. Tento projekt je opensourcový a celý kód sady SDK můžete zobrazit v sadě Java SDK.

Obecně můžete přistupovat ke všem funkcím Notification Hubs z back-endu Java/PHP/Python/Ruby pomocí rozhraní REST centra oznámení, jak je popsáno v tématu na webu MSDN Rozhraní REST API služby Notification Hubs. Tato sada Java SDK poskytuje tenkou obálku nad těmito rozhraními REST v Javě.

Sada SDK v současné době podporuje:

  • CRUD ve službě Notification Hubs
  • CRUD při registraci
  • Správa instalace
  • Import/export registrací
  • Běžná odesílání
  • Naplánovaná odeslání
  • Asynchronní operace přes NIO Javy
  • Podporované platformy: APNS (iOS), FCM (Android), WNS (aplikace pro Windows Store), MPNS (Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android bez služeb Google)

Poznámka

Služba MPNS (Microsoft Push Notification Service) je zastaralá a už se nepodporuje.

Využití sady SDK

Kompilace a sestavení

Použití Mavenu

Sestavení:

mvn package

Kód

Operace CRUD centra oznámení

Vytvořte NamespaceManager:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Vytvořit centrum oznámení:

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

NEBO

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

Získat centrum oznámení:

hub = namespaceManager.getNotificationHub("hubname");

Aktualizovat centrum oznámení:

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

Odstranit centrum oznámení:

namespaceManager.deleteNotificationHub("hubname");

Registrace CRUD

Vytvoření klienta centra oznámení:

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

Vytvoření registrace windows:

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

Vytvoření registrace pro iOS:

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

Podobně můžete vytvořit registrace pro Android (FCM), Windows Phone (MPNS) a Kindle Fire (ADM).

Vytvoření registrací šablon:

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

Vytvořte registrace pomocí vzoru vytvoření ID registrace a upsertu:

Odebere duplicity kvůli ztraceným odpovědím, pokud se do zařízení ukládají ID registrace:

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

Aktualizace registrací:

hub.updateRegistration(reg);

Odstranění registrací:

hub.deleteRegistration(regid);

Registrace dotazů:

  • Získání jedné registrace:
hub.getRegistration(regid);
  • Získání všech registrací v centru:
hub.getRegistrations();
  • Získání registrací se značkou:
hub.getRegistrationsByTag("myTag");
  • Získání registrací podle kanálů:
hub.getRegistrationsByChannel("devicetoken");

Všechny dotazy kolekce podporují tokeny $top a pokračovací tokeny.

Využití rozhraní API pro instalaci

Rozhraní API pro instalaci je alternativním mechanismem pro správu registrací. Místo udržování více registrací, které nejsou triviální a mohou být snadno provedeny nesprávně nebo neefektivní, je nyní možné použít objekt SINGLE installation.

Instalace obsahuje vše, co potřebujete: kanál push (token zařízení), značky, šablony, sekundární dlaždice (pro WNS a APNS). K získání ID už nemusíte volat službu – stačí vygenerovat identifikátor GUID nebo jakýkoli jiný identifikátor, ponechat ho na zařízení a odeslat ho do back-endu společně s kanálem Push (token zařízení).

Na back-endu byste měli provést pouze jedno volání CreateOrUpdateInstallation. Je plně idempotentní, takže v případě potřeby to zkuste znovu.

Příklad pro Amazon Kindle Fire:

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

Pokud ho chcete aktualizovat:

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

V pokročilých scénářích použijte funkci částečné aktualizace, která umožňuje upravovat pouze určité vlastnosti instalačního objektu. Částečná aktualizace je podmnožinou operací oprav JSON, které můžete spustit proti instalačnímu objektu.

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

Odstranit instalaci:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patcha Delete jsou nakonec konzistentní s Get. Požadovaná operace jednoduše přejde do systémové fronty během volání a provede se na pozadí. Funkce Get není určená pro hlavní scénář modulu runtime, ale pouze pro účely ladění a řešení potíží. Služba ho velmi omezuje.

Tok odesílání pro instalace je stejný jako u registrací. Pokud chcete zacílit oznámení na konkrétní instalaci, stačí použít značku InstallationId:{desired-id}. V tomto případě je to kód:

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

Pro jednu z několika šablon:

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

Oznámení plánu (k dispozici pro úroveň STANDARD)

Stejné jako u běžného odesílání, ale s jedním dalším parametrem – scheduledTime, který říká, kdy se má oznámení doručit. Služba přijímá jakýkoli časový bod mezi 5 minut a 7 dny.

Naplánování nativního oznámení windows:

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

Import/export (k dispozici pro úroveň STANDARD)

Možná budete muset provést hromadnou operaci s registracemi. Obvykle se jedná o integraci s jiným systémem nebo rozsáhlou opravu aktualizace značek. Nedoporučujeme používat tok Získání/aktualizace, pokud se jedná o tisíce registrací. Funkce systému Import/Export je navržená tak, aby pokryla tento scénář. V rámci účtu úložiště poskytnete přístup ke kontejneru objektů blob jako zdroj příchozích dat a umístění pro výstup.

Odeslání úlohy exportu:

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

Odeslání úlohy importu:

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

Počkejte na dokončení úlohy:

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

Získání všech úloh:

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

Identifikátor URI s podpisem SAS:

Tato adresa URL je adresa URL souboru objektu blob nebo kontejneru objektů blob plus sada parametrů, jako jsou oprávnění a doba vypršení platnosti a podpis všech těchto věcí vytvořených pomocí klíče SAS účtu. Sada Java SDK služby Azure Storage nabízí bohaté možnosti, včetně vytváření těchto identifikátorů URI. Jako jednoduchou alternativu se podívejte na ImportExportE2E testovací třídu (z umístění GitHubu), která obsahuje základní a kompaktní implementaci podpisového algoritmu.

Odesílání oznámení

Objekt Notification je jednoduše tělo se záhlavími, některé pomocné metody pomáhají při vytváření nativních objektů a objektů oznámení šablon.

  • Windows Store a Windows Phone 8.1 (bez Silverlightu)
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 a 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);
  • Odeslat do značek
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Výraz pro odeslání značky
hub.sendNotification(n, "foo && ! bar");
  • Odeslat oznámení šablony
Map<String, String> prop =  new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);

Spuštění kódu Javy by teď mělo vygenerovat oznámení, které se zobrazí na vašem cílovém zařízení.

Další kroky

Toto téma vám ukázalo, jak vytvořit jednoduchého klienta REST v Javě pro Notification Hubs. Odsud můžete: