Delen via


Notification Hubs gebruiken vanuit Java

In dit onderwerp worden de belangrijkste functies van de nieuwe, volledig ondersteunde, officiële Azure Notification Hub Java SDK beschreven. Dit project is een opensource-project en u kunt de volledige SDK-code bekijken op Java SDK.

Over het algemeen hebt u toegang tot alle Functies van Notification Hubs vanuit een back-end van Java/PHP/Python/Ruby met behulp van de Rest-interface van Notification Hub, zoals beschreven in het MSDN-onderwerp Notification Hubs REST API's. Deze Java SDK biedt een thin wrapper over deze REST-interfaces in Java.

De SDK ondersteunt momenteel:

  • CRUD op Notification Hubs
  • CRUD over registraties
  • Installatiebeheer
  • Registraties importeren/exporteren
  • Reguliere verzendingen
  • Geplande verzendingen
  • Asynchrone bewerkingen via Java NIO
  • Ondersteunde platforms: APNS (iOS), FCM (Android), WNS (Windows Store-apps), MPNS(Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android zonder Google-services)

Notitie

Microsoft Push Notification Service (MPNS) is afgeschaft en wordt niet meer ondersteund.

SDK-gebruik

Compileren en bouwen

Maven gebruiken

Ga als volgende te werk om te bouwen:

mvn package

Code

Notification Hub CRUD's

Een NamespaceManager maken:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Notification Hub maken:

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

OF

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

Notification Hub ophalen:

hub = namespaceManager.getNotificationHub("hubname");

Notification Hub bijwerken:

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

Notification Hub verwijderen:

namespaceManager.deleteNotificationHub("hubname");

Registratie CRUD's

Een Notification Hub-client maken:

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

Windows-registratie maken:

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

iOS-registratie maken:

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

Op dezelfde manier kunt u registraties maken voor Android (FCM), Windows Phone (MPNS) en Kindle Fire (ADM).

Sjabloonregistraties maken:

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

Registraties maken met behulp van het patroon Registratie-id en upsert maken:

Verwijdert duplicaten vanwege verloren antwoorden als registratie-id's op het apparaat worden opgeslagen:

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

Registraties bijwerken:

hub.updateRegistration(reg);

Registraties verwijderen:

hub.deleteRegistration(regid);

Queryregistraties:

  • Eén registratie ophalen:
hub.getRegistration(regid);
  • Alle registraties ophalen in de hub:
hub.getRegistrations();
  • Registraties ophalen met tag:
hub.getRegistrationsByTag("myTag");
  • Registraties ophalen per kanaal:
hub.getRegistrationsByChannel("devicetoken");

Alle verzamelingquery's ondersteunen $top- en vervolgtokens.

Installatie-API-gebruik

Installatie-API is een alternatief mechanisme voor registratiebeheer. In plaats van meerdere registraties te onderhouden, die niet eenvoudig zijn en gemakkelijk onjuist of ineciënt kunnen worden uitgevoerd, is het nu mogelijk om een ENKEL installatieobject te gebruiken.

Installatie bevat alles wat u nodig hebt: pushkanaal (apparaattoken), tags, sjablonen, secundaire tegels (voor WNS en APNS). U hoeft de service niet meer aan te roepen om de id op te halen. Genereer gewoon een GUID of een andere id, bewaar deze op het apparaat en verzend deze naar uw back-end samen met het pushkanaal (apparaattoken).

Op de back-end hoeft u slechts één aanroep uit te voeren naar CreateOrUpdateInstallation; deze is volledig idempotent, dus u kunt het indien nodig opnieuw proberen.

Bijvoorbeeld voor Amazon Kindle Fire:

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

Als u deze wilt bijwerken:

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

Gebruik voor geavanceerde scenario's de mogelijkheid voor gedeeltelijke updates, waarmee alleen bepaalde eigenschappen van het installatieobject kunnen worden gewijzigd. Gedeeltelijke update is een subset van JSON Patch-bewerkingen die u kunt uitvoeren op het installatieobject.

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

Installatie verwijderen:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patchen Delete uiteindelijk consistent zijn met Get. De aangevraagde bewerking gaat gewoon naar de systeemwachtrij tijdens de aanroep en wordt op de achtergrond uitgevoerd. Get is niet ontworpen voor het hoofdruntimescenario, maar alleen voor foutopsporing en probleemoplossing, het wordt strikt beperkt door de service.

De verzendstroom voor installaties is hetzelfde als voor registraties. Gebruik de tag InstallationId:{desired-id} om een melding aan de specifieke installatie toe te passen. In dit geval is de code:

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

Voor een van de volgende sjablonen:

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

Planningsmeldingen (beschikbaar voor standard-laag)

Hetzelfde als bij normaal verzenden, maar met één extra parameter: scheduledTime, die aangeeft wanneer de melding moet worden bezorgd. Service accepteert elk tijdstip tussen nu + 5 minuten en nu + 7 dagen.

Een systeemeigen Windows-melding plannen:

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

Importeren/exporteren (beschikbaar voor standard-laag)

Mogelijk moet u een bulkbewerking uitvoeren voor registraties. Meestal is het voor integratie met een ander systeem of een enorme oplossing om de tags bij te werken. Het is niet raadzaam om de stroom Ophalen/bijwerken te gebruiken als er duizenden registraties bij betrokken zijn. De import-/exportmogelijkheid van het systeem is ontworpen om het scenario te dekken. U verleent toegang tot een blobcontainer onder uw opslagaccount als bron van binnenkomende gegevens en locatie voor uitvoer.

Een exporttaak verzenden:

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

Een importtaak verzenden:

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

Wacht totdat een taak is voltooid:

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

Alle taken ophalen:

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

URI met SAS-handtekening:

Deze URL is de URL van een blobbestand of blobcontainer plus een set parameters zoals machtigingen en verlooptijd plus handtekening van al deze items die zijn gemaakt met behulp van de SAS-sleutel van het account. Azure Storage Java SDK biedt uitgebreide mogelijkheden, waaronder het maken van deze URI's. Als eenvoudig alternatief kunt u eens kijken naar de ImportExportE2E testklasse (vanaf de GitHub-locatie) met eenvoudige en compacte implementatie van het ondertekeningsalgoritme.

Meldingen verzenden

Het meldingsobject is gewoon een hoofdtekst met kopteksten. Sommige hulpprogramma's helpen bij het bouwen van de systeemeigen en sjabloonmeldingenobjecten.

  • Windows Store en Windows Phone 8.1 (niet-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 en 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);
  • Verzenden naar tags
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Labelexpressie Verzenden naar
hub.sendNotification(n, "foo && ! bar");
  • Sjabloonmelding verzenden
Map<String, String> prop =  new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);

Als u uw Java-code uitvoert, wordt er nu een melding weergegeven op uw doelapparaat.

Volgende stappen

In dit onderwerp hebt u uitgelegd hoe u een eenvoudige Java REST-client maakt voor Notification Hubs. Hier kunt u het volgende doen: