Sdílet prostřednictvím


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 o rozhraníCH REST služby MSDN Notification Hubs. Tato sada Java SDK poskytuje tenké obálky nad těmito rozhraními REST v Javě.

Sada SDK aktuálně podporuje:

  • CRUD v Notification Hubs
  • CRUD při registraci
  • Správa instalace
  • Import/export registrací
  • Pravidelné odesílání
  • Naplánovaná odeslání
  • Asynchronní operace prostřednictvím Javy NIO
  • 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

CRUD centrály oznámení

Vytvořte 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);

Odstranění centra oznámení:

namespaceManager.deleteNotificationHub("hubname");

Identifikátory CRUD pro registraci

Vytvořte klienta centra oznámení:

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

Vytvoření registrace systému Windows:

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

Vytvoření registrace systému 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řit registrace š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 "create registration ID" a "upsert":

Odebere duplicity způsobené případnou ztrátou odpovědí, pokud se ID registrace ukládají do zařízení:

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ískejte přístup k jedné registraci:
hub.getRegistration(regid);
  • Získejte všechny registrace v uzlu:
hub.getRegistrations();
  • Získejte registrace se značkou:
hub.getRegistrationsByTag("myTag");
  • Získání registrací podle kanálu:
hub.getRegistrationsByChannel("devicetoken");

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

Využití rozhraní API instalace

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 jeden instalační objekt.

Instalace obsahuje vše, co potřebujete: push kanál (token zařízení), značky, šablony, sekundární dlaždice (pro WNS a APNS). Službu už nemusíte volat, abyste získali ID – stačí vygenerovat identifikátor GUID nebo jakýkoli jiný identifikátor, ponechat ho na zařízení a odeslat do backendu společně s push kanálem (tokenem 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 upravit pouze konkrétní vlastnosti instalačního objektu. Částečná aktualizace je podmnožinou operací oprav JSON, které můžete spustit 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 nakonec konzistentně s Get. Vaše požadovaná operace přejde do systémové fronty během volání a bude vykonána na pozadí. Get není určen pro hlavní scénář modulu runtime, ale pouze pro účely ladění a řešení potíží, je přísně omezen službou.

Tok odesílání pro instalace je stejný jako u registrací. Pokud chcete 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");

Plánování oznámení (k dispozici pro úroveň STANDARD)

Totéž jako běžné 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 bod v čase mezi 5 minut a nyní + 7 dní.

Naplánování nativního oznámení systému 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 proti registracím. Obvykle se jedná o integraci s jiným systémem nebo masivní opravu pro aktualizaci značek. Pokud se účastní tisíce registrací, nedoporučujeme používat tok Get/Update. Funkce importu a exportu systému je navržená tak, aby pokrývala scénář. Jako zdroj příchozích dat a umístění pro výstup poskytujte přístup k úložišti blob ve vašem účtu úložiště.

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, až se úloha dokončí:

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

Získejte všechny úlohy:

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

Identifikátor URI s podpisem SAS:

Tato adresa URL je adresa URL souboru objektu blob nebo kontejneru objektů blob, k čemuž je připojena sada parametrů, jako jsou oprávnění, čas vypršení platnosti a podpis všech těchto položek vytvořený pomocí klíče SAS účtu. Sada 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í GitHubu), která má 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 a šablonových objektů oznámení.

  • Windows Store a Windows Phone 8.1 (nezávislé na 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 do značek
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Odeslat do výrazu 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 vygenerovat 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. Tady můžete: