Jak používat Notification Hubs z Javy

Toto téma popisuje klíčové funkce nové plně podporované oficiální sady Java SDK služby Azure Notification Hub. Tento projekt je opensourcový projekt a můžete zobrazit celý kód sady SDK 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 Rozhraní REST služby MSDN Notification Hubs. Tato sada Java SDK poskytuje tenkou obálku nad těmito rozhraními REST v Javě.

Sada SDK aktuálně podporuje:

  • CRUD ve službě Notification Hubs
  • CRUD při registraci
  • Správa instalace
  • registrace Import/export
  • Pravidelné odesílání
  • Naplánované odesílání
  • Asynchronní operace přes javu NIO
  • Podporované platformy: APNS (iOS), FCM (Android), WNS (aplikace 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

Identifikátory CRU centra oznámení

Vytvoření správce oboru názvů:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Vytvoření centra 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řte 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 vytvářet 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ření registrací pomocí vzoru vytvoření ID registrace a upsertu:

Odebere duplicity kvůli ztrátě odpovědí, pokud se na 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ískejte všechny registrace v centru:
hub.getRegistrations();
  • Získání registrací se značkou:
hub.getRegistrationsByTag("myTag");
  • Získání registrací podle kanálu:
hub.getRegistrationsByChannel("devicetoken");

Všechny dotazy na kolekci podporují $top a tokeny pro pokračování.

Využití rozhraní API pro instalaci

Rozhraní API pro instalaci je alternativní mechanismus pro správu registrace. Místo údržby 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). Už nemusíte volat službu, aby získala ID – stačí vygenerovat identifikátor GUID nebo jiný identifikátor, ponechat ho na zařízení a odeslat 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 to plně idempotentní, takže v případě potřeby zkuste to znovu.

Napří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 konkrétní vlastnosti instalačního objektu. Částečná aktualizace je podmnožinou operací oprav JSON, které můžete spouštět proti objektu Instalace.

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 spustí se na pozadí. Get není určen pro hlavní scénář modulu runtime, ale pouze pro účely ladění a řešení potíží, je úzce omezen službou.

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

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)

Totéž jako u pravidelné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 nyní + 7 dní.

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 masivní opravou pro aktualizaci značek. Pokud jsou zapojeny tisíce registrací, nedoporučujeme používat tok Get/Update. Funkce Import/export systému je navržená tak, aby pokryla scénář. Jako zdroj příchozích dat a umístění pro výstup poskytnete přístup ke kontejneru objektů blob v rámci účtu úložiště.

Odeslat úlohu exportu:

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

Odeslat úlohu 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 a sady parametrů, jako jsou oprávnění a čas vypršení platnosti a podpis všech těchto věcí provedených pomocí klíče SAS účtu. Azure Storage Java SDK má 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í GitHub), která má základní a kompaktní implementaci podpisového algoritmu.

Odesílání oznámení

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

  • Windows Store a Windows Phone 8.1 (mimo 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 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 značky
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");
  • Odeslání 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 Java by teď mělo způsobit oznámení, které se zobrazí na 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: