Share via


A Notification Hubs használata Java-ból

Ez a témakör az új, teljes mértékben támogatott hivatalos Azure Notification Hub Java SDK fő funkcióit ismerteti. Ez a projekt egy nyílt forráskódú projekt, és a teljes SDK-kódot a Java SDK-n tekintheti meg.

A Notification Hubs összes funkcióját általában egy Java/PHP/Python/Ruby háttérrendszerből érheti el a Notification Hub REST felületével, az MSDN-témakör Notification Hubs REST API-jai című témakörében leírtak szerint. Ez a Java SDK vékony burkolót biztosít ezekhez a REST-felületekhez a Javában.

Az SDK jelenleg a következőket támogatja:

  • CRUD a Notification Hubson
  • CRUD a regisztrációkhoz
  • Telepítéskezelés
  • Regisztrációk importálása/exportálása
  • Normál küldések
  • Ütemezett küldések
  • Aszinkron műveletek Java NIO-n keresztül
  • Támogatott platformok: APNS (iOS), FCM (Android), WNS (Windows Áruházbeli alkalmazások), MPNS(Windows Phone-telefon), ADM (Amazon Kindle Fire), Baidu (Android Google-szolgáltatások nélkül)

Megjegyzés

A Microsoft Leküldéses értesítési szolgáltatás (MPNS) elavult, és már nem támogatott.

SDK-használat

Fordítás és létrehozás

A Maven használata

A buildeléshez:

mvn package

Code

Notification Hub CRUD-k

NamespaceManager létrehozása:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Értesítési központ létrehozása:

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

VAGY

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

Értesítési központ lekérése:

hub = namespaceManager.getNotificationHub("hubname");

Értesítési központ frissítése:

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

Értesítési központ törlése:

namespaceManager.deleteNotificationHub("hubname");

Regisztrációs CRUD-k

Notification Hub-ügyfél létrehozása:

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

Windows-regisztráció létrehozása:

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

iOS-regisztráció létrehozása:

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

Hasonlóképpen létrehozhat regisztrációkat androidos (FCM), Windows Phone-telefon (MPNS) és Kindle Fire (ADM) rendszerhez is.

Sablonregisztrációk létrehozása:

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

Regisztrációk létrehozása regisztrációs azonosító + upsert minta használatával:

Eltávolítja az elveszett válaszok miatti ismétlődéseket, ha regisztrációs azonosítókat tárol az eszközön:

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

Regisztrációk frissítése:

hub.updateRegistration(reg);

Regisztrációk törlése:

hub.deleteRegistration(regid);

Lekérdezésregisztrációk:

  • Egyszeri regisztráció lekérése:
hub.getRegistration(regid);
  • Az összes regisztráció lekérése a központban:
hub.getRegistrations();
  • Regisztrációk lekérése címkével:
hub.getRegistrationsByTag("myTag");
  • Regisztrációk lekérése csatornánként:
hub.getRegistrationsByChannel("devicetoken");

Minden gyűjtemény-lekérdezés támogatja a $top és a folytatási jogkivonatokat.

Telepítési API-használat

A telepítési API a regisztrációkezelés alternatív mechanizmusa. Ahelyett, hogy több regisztrációt tartanának fenn, amelyek nem triviálisak, és könnyen elvégezhetők helytelenül vagy nem hatékony módon, mostantól egyetlen telepítési objektumot is használhatnak.

A telepítés mindent tartalmaz, amire szüksége van: leküldéses csatorna (eszközjogkivonat), címkék, sablonok, másodlagos csempék (WNS és APNS esetén). Nem kell többé meghívnia a szolgáltatást az azonosító lekéréséhez – csak hozzon létre GUID-t vagy bármilyen más azonosítót, tartsa meg az eszközön, és küldje el a háttérrendszernek a leküldéses csatornával (eszközjogkivonattal) együtt.

A háttérrendszerben csak egyetlen hívást CreateOrUpdateInstallationkell végrehajtania; ez teljesen idempotens, ezért szükség esetén nyugodtan próbálkozzon újra.

Példa az Amazon Kindle Fire-hez:

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

Ha frissíteni szeretné:

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

Speciális forgatókönyvek esetén használja a részleges frissítési képességet, amely csak a telepítési objektum adott tulajdonságainak módosítását teszi lehetővé. A részleges frissítés a telepítési objektumon futtatható JSON Patch-műveletek részhalmaza.

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

Telepítés törlése:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patchés Delete végül konzisztensek a következővel Get: . A kért művelet csak a rendszer üzenetsorába kerül a hívás során, és a háttérben lesz végrehajtva. A Get nem fő futtatókörnyezeti forgatókönyvhöz készült, de csak hibakeresési és hibaelhárítási célokra, a szolgáltatás szigorúan szabályozza.

A telepítések küldési folyamata megegyezik a regisztrációkkal. Az adott telepítés értesítésének megcélzásához csak használja a "InstallationId:{desired-id}" címkét. Ebben az esetben a kód a következő:

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

Több sablon egyikéhez:

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

Ütemezési értesítések (standard szintű verzióhoz érhető el)

Ugyanaz, mint a normál küldés, de egy további paraméterrel : scheduledTime, amely azt jelzi, hogy mikor kell kézbesíteni az értesítéseket. A szolgáltatás bármely időpontot elfogad mostantól + 5 perc és most + 7 nap között.

Natív Windows-értesítés ütemezése:

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

Importálás/exportálás (standard szintű verzióhoz érhető el)

Előfordulhat, hogy tömeges műveletet kell végrehajtania a regisztrációkon. Általában egy másik rendszerrel való integrációra vagy a címkék frissítésére szolgáló jelentős javításra van szükség. Nem javasoljuk a Get/Update folyamat használatát, ha több ezer regisztrációról van szó. A rendszer importálási/exportálási képessége úgy van kialakítva, hogy lefedje a forgatókönyvet. Hozzáférést biztosít egy blobtárolóhoz a tárfiókban a bejövő adatok forrásaként és a kimenet helyeként.

Exportálási feladat elküldése:

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

Importálási feladat elküldése:

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

Várjon, amíg a feladat befejeződik:

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

Az összes feladat lekérése:

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

URI SAS-aláírással:

Ez az URL-cím egy blobfájl vagy blobtároló URL-címe, valamint olyan paraméterek halmaza, mint az engedélyek és a lejárati idő, valamint a fiók SAS-kulcsával létrehozott összes dolog aláírása. Az Azure Storage Java SDK gazdag képességekkel rendelkezik, beleértve ezeknek az URI-knak a létrehozását. Egyszerű alternatívaként tekintse meg a tesztelési ImportExportE2E osztályt (a GitHub helyről), amely az aláíró algoritmus alapszintű és kompakt implementálásával rendelkezik.

Értesítések küldése

Az Értesítési objektum egyszerűen egy fejlécekkel ellátott törzs, néhány segédprogrammal a natív és a sablonértesítési objektumok létrehozásához lehet segítséget nyújtani.

  • Windows Áruház és Windows Phone-telefon 8.1 (nem 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-telefon 8.0 és 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);
  • Küldés címkékre
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Küldés címkére kifejezés
hub.sendNotification(n, "foo && ! bar");
  • Sablonértesítés küldése
Map<String, String> prop =  new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);

A Java-kód futtatásával mostantól megjelenik egy értesítés a céleszközön.

Következő lépések

Ez a témakör bemutatta, hogyan hozhat létre egy egyszerű Java REST-ügyfelet a Notification Hubshoz. Ebből a menüből: