Jak używać usługi Notification Hubs z poziomu języka Java
W tym temacie opisano kluczowe funkcje nowego w pełni obsługiwanego oficjalnego zestawu Java SDK usługi Azure Notification Hub. Ten projekt jest projektem typu open source i można wyświetlić cały kod zestawu SDK w zestawie JAVA SDK.
Ogólnie rzecz biorąc, można uzyskać dostęp do wszystkich funkcji usługi Notification Hubs z poziomu zaplecza Java/PHP/Python/Ruby przy użyciu interfejsu REST centrum powiadomień zgodnie z opisem w temacie Notification Hubs API REST usługi Notification Hubs. Ten zestaw JAVA SDK udostępnia cienką otokę dla tych interfejsów REST w języku Java.
Zestaw SDK obecnie obsługuje następujące funkcje:
- Operacja CRUD w usłudze Notification Hubs
- CRUD on Registrations
- Zarządzanie instalacją
- Rejestracje importu/eksportu
- Regularne wysyłanie
- Zaplanowane wysyłanie
- Operacje asynchroniczne za pośrednictwem NIO języka Java
- Obsługiwane platformy: APNS (iOS), FCM (Android), WNS (aplikacje ze Sklepu Windows), MPNS(Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android bez usług Google)
Uwaga
Usługa powiadomień wypychanych firmy Microsoft (MPNS) jest przestarzała i nie jest już obsługiwana.
Użycie zestawu SDK
Kompilowanie i tworzenie kompilacji
Korzystanie z narzędzia Maven
Aby skompilować:
mvn package
Kod
Identyfikatory CRUD usługi Notification Hub
Utwórz menedżera przestrzeni nazw:
NamespaceManager namespaceManager = new NamespaceManager("connection string")
Tworzenie centrum powiadomień:
NotificationHubDescription hub = new NotificationHubDescription("hubname");
hub.setWindowsCredential(new WindowsCredential("sid","key"));
hub = namespaceManager.createNotificationHub(hub);
LUB
hub = new NotificationHub("connection string", "hubname");
Pobierz centrum powiadomień:
hub = namespaceManager.getNotificationHub("hubname");
Aktualizowanie centrum powiadomień:
hub.setMpnsCredential(new MpnsCredential("mpnscert", "mpnskey"));
hub = namespaceManager.updateNotificationHub(hub);
Usuń centrum powiadomień:
namespaceManager.deleteNotificationHub("hubname");
Rejestracje operacji CRUD
Tworzenie klienta centrum powiadomień:
hub = new NotificationHub("connection string", "hubname");
Utwórz rejestrację systemu Windows:
WindowsRegistration reg = new WindowsRegistration(new URI(CHANNELURI));
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);
Tworzenie rejestracji systemu iOS:
AppleRegistration reg = new AppleRegistration(DEVICETOKEN);
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);
Podobnie można tworzyć rejestracje dla systemu Android (FCM), Windows Phone (MPNS) i Kindle Fire (ADM).
Tworzenie rejestracji szablonu:
WindowsTemplateRegistration reg = new WindowsTemplateRegistration(new URI(CHANNELURI), WNSBODYTEMPLATE);
reg.getHeaders().put("X-WNS-Type", "wns/toast");
hub.createRegistration(reg);
Utwórz rejestracje przy użyciu tworzenia identyfikatora rejestracji i wzorca upsert:
Usuwa duplikaty z powodu utraconych odpowiedzi w przypadku przechowywania identyfikatorów rejestracji na urządzeniu:
String id = hub.createRegistrationId();
WindowsRegistration reg = new WindowsRegistration(id, new URI(CHANNELURI));
hub.upsertRegistration(reg);
Rejestracje aktualizacji:
hub.updateRegistration(reg);
Usuwanie rejestracji:
hub.deleteRegistration(regid);
Rejestracje zapytań:
- Uzyskaj rejestrację pojedynczą:
hub.getRegistration(regid);
- Pobierz wszystkie rejestracje w centrum:
hub.getRegistrations();
- Pobieranie rejestracji za pomocą tagu:
hub.getRegistrationsByTag("myTag");
- Pobieranie rejestracji według kanału:
hub.getRegistrationsByChannel("devicetoken");
Wszystkie zapytania kolekcji obsługują tokeny $top i kontynuacji.
Użycie interfejsu API instalacji
Interfejs API instalacji to alternatywny mechanizm zarządzania rejestracją. Zamiast utrzymywać wiele rejestracji, które nie są proste i mogą być łatwo wykonywane niepoprawnie lub nieefektywnie, teraz można użyć pojedynczego obiektu instalacji.
Instalacja zawiera wszystko, czego potrzebujesz: kanał wypychania (token urządzenia), tagi, szablony, kafelki pomocnicze (dla usług WNS i APNS). Nie musisz już wywoływać usługi, aby uzyskać identyfikator — wystarczy wygenerować identyfikator GUID lub inny identyfikator, zachować go na urządzeniu i wysłać do zaplecza razem z kanałem wypychania (token urządzenia).
W zapleczu należy wykonać tylko jedno wywołanie CreateOrUpdateInstallation
metody ; jest w pełni idempotentne, więc możesz spróbować ponownie w razie potrzeby.
Na przykład dla amazon Kindle Fire:
Installation installation = new Installation("installation-id", NotificationPlatform.Adm, "adm-push-channel");
hub.createOrUpdateInstallation(installation);
Jeśli chcesz go zaktualizować:
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);
W przypadku zaawansowanych scenariuszy użyj funkcji częściowej aktualizacji, która umożliwia modyfikowanie tylko określonych właściwości obiektu instalacyjnego. Częściowa aktualizacja jest podzbiorem operacji poprawek JSON, które można uruchomić względem obiektu Instalacji.
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);
Usuń instalację:
hub.deleteInstallation(installation.getInstallationId());
CreateOrUpdate
, Patch
i Delete
są ostatecznie zgodne z .Get
Żądana operacja przechodzi tylko do kolejki systemowej podczas wywołania i jest wykonywana w tle. Get nie jest przeznaczony dla głównego scenariusza środowiska uruchomieniowego, ale tylko do celów debugowania i rozwiązywania problemów jest ściśle ograniczany przez usługę.
Przepływ wysyłania dla instalacji jest taki sam jak w przypadku rejestracji. Aby kierować powiadomienie do określonej instalacji — wystarczy użyć tagu "InstallationId:{desired-id}". W tym przypadku kod to:
Notification n = Notification.createWindowsNotification("WNS body");
hub.sendNotification(n, "InstallationId:{installation-id}");
W przypadku jednego z kilku szablonów:
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");
Powiadomienia dotyczące harmonogramu (dostępne dla warstwy STANDARDOWA)
Takie same jak zwykłe wysyłanie, ale z jednym dodatkowym parametrem — scheduledTime, który mówi, kiedy należy dostarczyć powiadomienie. Usługa akceptuje dowolny punkt czasu między teraz + 5 minut a teraz + 7 dni.
Planowanie powiadomienia natywnego systemu Windows:
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
Notification n = Notification.createWindowsNotification("WNS body");
hub.scheduleNotification(n, c.getTime());
Importowanie/eksportowanie (dostępne dla warstwy STANDARDOWA)
Może być konieczne wykonanie operacji zbiorczej względem rejestracji. Zwykle jest to integracja z innym systemem lub ogromną poprawką aktualizacji tagów. Nie zalecamy używania przepływu Pobierania/aktualizowania, jeśli są zaangażowane tysiące rejestracji. Funkcja importu/eksportu systemu została zaprojektowana w celu pokrycia scenariusza. Zapewnisz dostęp do kontenera obiektów blob w ramach konta magazynu jako źródła danych przychodzących i lokalizacji dla danych wyjściowych.
Prześlij zadanie eksportu:
NotificationHubJob job = new NotificationHubJob();
job.setJobType(NotificationHubJobType.ExportRegistrations);
job.setOutputContainerUri("container uri with SAS signature");
job = hub.submitNotificationHubJob(job);
Prześlij zadanie 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);
Zaczekaj na wykonanie zadania:
while(true){
Thread.sleep(1000);
job = hub.getNotificationHubJob(job.getJobId());
if(job.getJobStatus() == NotificationHubJobStatus.Completed)
break;
}
Pobierz wszystkie zadania:
List<NotificationHubJob> jobs = hub.getAllNotificationHubJobs();
Identyfikator URI z podpisem SYGNATURY dostępu współdzielonego:
Ten adres URL jest adresem URL pliku obiektów blob lub kontenera obiektów blob oraz zestawem parametrów, takich jak uprawnienia i czas wygaśnięcia oraz podpis wszystkich tych elementów, które zostały wykonane przy użyciu klucza sygnatury dostępu współdzielonego konta. Zestaw JAVA SDK usługi Azure Storage oferuje zaawansowane możliwości, w tym tworzenie tych identyfikatorów URI. Alternatywnie przyjrzyj ImportExportE2E
się klasie testowej (z lokalizacji usługi GitHub), która ma podstawową i kompaktową implementację algorytmu podpisywania.
Wysyłanie powiadomień
Obiekt Notification to po prostu treść z nagłówkami. Niektóre metody narzędzi pomagają w tworzeniu obiektów powiadomień natywnych i szablonów.
- Sklep Windows i Windows Phone 8.1 (inne niż 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 i 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);
- Wyślij do tagów
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
- Wyrażenie tagu Wyślij do
hub.sendNotification(n, "foo && ! bar");
- Wysyłanie powiadomienia o szablonie
Map<String, String> prop = new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);
Uruchomienie kodu Java powinno teraz spowodować wyświetlenie powiadomienia na urządzeniu docelowym.
Następne kroki
W tym temacie pokazano, jak utworzyć prostego klienta REST języka Java dla usługi Notification Hubs. W tym miejscu można wykonać następujące czynności:
- Pobierz pełny zestaw JAVA SDK, który zawiera cały kod zestawu SDK.
- Odtwórz przykłady: