Udostępnij za pośrednictwem


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 CreateOrUpdateInstallationmetody ; 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, Patchi 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: