Использование концентраторов уведомлений из Java
В этой статье описаны основные функции нового, полностью поддерживаемого официального пакета SDK для Java Центра уведомлений Azure. Это проект с открытым кодом. Вы можете просмотреть весь код пакета SDK в пакет SDK для Java.
Вы можете обращаться ко всем функциям центров уведомлений из серверной части Java/PHP/Python/Ruby, используя интерфейс REST в соответствии с описанием в разделе MSDN Интерфейсы API REST центров уведомлений. Пакет SDK для Java предоставляет тонкую оболочку для этих интерфейсов REST на Java.
Сейчас пакет SDK поддерживает:
- операции CRUD для центра уведомлений;
- операции CRUD для регистрации;
- управление установкой;
- регистрацию импорта и экспорта;
- обычную отправку;
- запланированную отправку;
- асинхронные операции с использованием Java NIO;
- Поддерживаемые платформы: APNS (iOS), FCM (Android), WNS (приложения Windows Store), MPNS (Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android без служб Google)
Примечание
Служба push-уведомлений (Майкрософт) (MPNS) устарела и больше не поддерживается.
Использование пакета SDK
Компиляция и сборка
Использование Maven
для сборки:
mvn package
Код
Операции CRUD в центрах уведомлений
Создание NamespaceManager:
NamespaceManager namespaceManager = new NamespaceManager("connection string")
Создание центра уведомлений:
NotificationHubDescription hub = new NotificationHubDescription("hubname");
hub.setWindowsCredential(new WindowsCredential("sid","key"));
hub = namespaceManager.createNotificationHub(hub);
ИЛИ
hub = new NotificationHub("connection string", "hubname");
Получение центра уведомлений:
hub = namespaceManager.getNotificationHub("hubname");
Обновление центра уведомлений:
hub.setMpnsCredential(new MpnsCredential("mpnscert", "mpnskey"));
hub = namespaceManager.updateNotificationHub(hub);
Удаление центра уведомлений:
namespaceManager.deleteNotificationHub("hubname");
Операции CRUD для регистрации
Создание клиента центра уведомлений:
hub = new NotificationHub("connection string", "hubname");
Создание регистрации Windows:
WindowsRegistration reg = new WindowsRegistration(new URI(CHANNELURI));
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);
Создание регистрации iOS:
AppleRegistration reg = new AppleRegistration(DEVICETOKEN);
reg.getTags().add("myTag");
reg.getTags().add("myOtherTag");
hub.createRegistration(reg);
Аналогичным образом вы можете создавать регистрации для Android (FCM), Windows Phone (MPNS) и Kindle Fire (ADM).
Создание регистрации шаблона:
WindowsTemplateRegistration reg = new WindowsTemplateRegistration(new URI(CHANNELURI), WNSBODYTEMPLATE);
reg.getHeaders().put("X-WNS-Type", "wns/toast");
hub.createRegistration(reg);
Создание регистраций с помощью создания идентификатора регистрации и шаблона upsert:
Этот шаблон позволяет удалить повторы, образовавшиеся из-за потерянных ответов, если в устройстве хранятся идентификаторы регистраций.
String id = hub.createRegistrationId();
WindowsRegistration reg = new WindowsRegistration(id, new URI(CHANNELURI));
hub.upsertRegistration(reg);
Обновление регистраций:
hub.updateRegistration(reg);
Удаление регистраций:
hub.deleteRegistration(regid);
Запрос регистраций:
- Получение одной регистрации:
hub.getRegistration(regid);
- Получение всех регистраций в центре:
hub.getRegistrations();
- Получение регистраций с тегом:
hub.getRegistrationsByTag("myTag");
- Получение регистраций по каналу:
hub.getRegistrationsByChannel("devicetoken");
Все запросы коллекций поддерживают маркеры $top и маркеры продолжения.
Использование API установки
API установки — это альтернативный механизм управления регистрацией. Вместо обслуживания нескольких регистраций, что является непростой задачей, которую зачастую выполняют неправильно или неэффективно, теперь можно использовать ЕДИНЫЙ объект установки.
Установка включает в себя все необходимые составляющие: канал отправки (маркер устройства), теги, шаблоны и вспомогательные плитки (для WNS и APNS). Вам больше не нужно вызывать службу, чтобы получить идентификатор. Просто создайте GUID или любой другой идентификатор, сохраните его на устройстве и отправьте в серверную часть вместе с каналом отправки (маркером устройства).
На сервере нужно сделать всего один вызов CreateOrUpdateInstallation
. Он является полностью идемпотентным, поэтому при необходимости можно повторить попытку.
Вот пример для Amazon Kindle Fire.
Installation installation = new Installation("installation-id", NotificationPlatform.Adm, "adm-push-channel");
hub.createOrUpdateInstallation(installation);
Если нужно обновление:
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);
Для сложных сценариев можно выполнять частичное обновление, которое позволяет изменять только определенные свойства объекта установки. Частичное обновление является подмножеством операций исправления JSON, которые можно выполнить для объекта установки.
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);
Удаление установки:
hub.deleteInstallation(installation.getInstallationId());
CreateOrUpdate
, Patch
и Delete
в итоге согласовывается с Get
. Запрошенная операция просто добавляется в системную очередь во время вызова и затем выполняется в фоновом режиме. Операция Get не предназначена для использования в основном сценарии среды выполнения. Она предусмотрена только для отладки и устранения неполадок и строго регулируется службой.
Поток отправки для установки аналогичен потоку отправки для регистрации. Чтобы отправлять уведомления в конкретный объект установки, необходимо просто использовать тег InstallationId:{desired-id}. В этом случае используется приведенный ниже код.
Notification n = Notification.createWindowsNotification("WNS body");
hub.sendNotification(n, "InstallationId:{installation-id}");
Для одного из нескольких шаблонов:
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");
Планирование уведомлений (доступно для уровня STANDARD)
Такие уведомления отправляются обычным способом с использованием дополнительного параметра — scheduledTime, который определяет, когда нужно доставить уведомление. Для отправки можно указать любое время в диапазоне «теперешнее время-5 минут» и «теперешнее время-7 дней».
Планирование собственных уведомлений Windows:
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
Notification n = Notification.createWindowsNotification("WNS body");
hub.scheduleNotification(n, c.getTime());
Импорт или экспорт (доступно для уровня STANDARD)
Иногда требуется выполнить пакетную операцию регистрации. Обычно это необходимо для интеграции с другой системой или для внесения значительных исправлений для обновления тегов. Мы не рекомендуем использовать поток Get или Update, если речь идет о тысячах операций регистрации. Возможность импорта или экспорта системы разработана для утверждения сценария. В сущности, вы предоставляете доступ к определенному контейнеру большого двоичного объекта в вашей учетной записи хранения в качестве источника входящих данных и расположения для выходных данных.
Отправка задания экспорта:
NotificationHubJob job = new NotificationHubJob();
job.setJobType(NotificationHubJobType.ExportRegistrations);
job.setOutputContainerUri("container uri with SAS signature");
job = hub.submitNotificationHubJob(job);
Отправка задания импорта:
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);
Ожидание завершения задания:
while(true){
Thread.sleep(1000);
job = hub.getNotificationHubJob(job.getJobId());
if(job.getJobStatus() == NotificationHubJobStatus.Completed)
break;
}
Получение всех заданий:
List<NotificationHubJob> jobs = hub.getAllNotificationHubJobs();
URI с подписью SAS —
Это URL-адрес определенного файла большого двоичного объекта или контейнера в сочетании с набором параметров, например разрешения и сроков действия, и подписью всех этих элементов, выполненной с использованием ключа SAS учетной записи. Пакет SDK для Java для службы хранилища Azure предоставляет широкие возможности, включая создание подобных универсальных кодов ресурса. В качестве простой альтернативы рассмотрим тестовый класс ImportExportE2E
(из расположения GitHub) с базовой и компактной реализацией алгоритма подписывания.
Отправка уведомлений
Объект уведомления — это основной текст с заголовками. С помощью методов, предоставляемых некоторыми служебными программами, можно создать собственные и шаблонные объекты уведомлений.
- Магазин Windows и Windows Phone 8.1 (без 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 и 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);
- Отправка к тегам
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
- Отправка к выражению тега
hub.sendNotification(n, "foo && ! bar");
- Отправка шаблонного уведомления
Map<String, String> prop = new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);
После выполнения кода Java на целевом устройстве должно отобразиться уведомление.
Next Steps
В этом разделе было показано, как создать простой клиент REST Java для службы "Центры уведомлений". Здесь можно выполнять следующие действия:
- Скачайте полный пакет SDK для Java, содержащий весь код пакета SDK.
- Попробуйте разные примеры: