Java'dan Notification Hubs'ı kullanma

Bu konuda, tam olarak desteklenen yeni resmi Azure Notification Hub Java SDK'sının temel özellikleri açıklanmaktadır. Bu proje açık kaynaklı bir projedir ve SDK kodunun tamamını Java SDK'da görüntüleyebilirsiniz.

Genel olarak, Notification Hubs REST API'leri MSDN konusunda açıklandığı gibi Notification Hubs REST arabirimini kullanarak Java/PHP/Python/Ruby arka ucundan tüm Notification Hubs özelliklerine erişebilirsiniz. Bu Java SDK'sı, Java'daki bu REST arabirimleri üzerinde ince bir sarmalayıcı sağlar.

SDK şu anda aşağıdakileri desteklemektedir:

  • Notification Hubs'da CRUD
  • Kayıtlarda CRUD
  • Yükleme Yönetimi
  • Kayıtları İçeri/Dışarı Aktarma
  • Normal Göndermeler
  • Zamanlanmış Göndermeler
  • Java NIO aracılığıyla zaman uyumsuz işlemler
  • Desteklenen platformlar: APNS (iOS), FCM (Android), WNS (Windows Mağazası uygulamaları), MPNS(Windows Phone), ADM (Amazon Kindle Fire), Baidu (Google hizmetleri olmadan Android)

Not

Microsoft Anında İletilen Bildirim Hizmeti (MPNS) kullanım dışı bırakıldı ve artık desteklenmiyor.

SDK Kullanımı

Derleme ve oluşturma

Maven kullanma

Derlemek için:

mvn package

Kod

Bildirim Hub'ı CRUD'ları

NamespaceManager oluşturma:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Bildirim Hub'ı oluştur:

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

VEYA

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

Bildirim Hub'ına Ulaşın:

hub = namespaceManager.getNotificationHub("hubname");

Bildirim Hub'ına Güncelleştirme:

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

Bildirim Hub'larını Sil:

namespaceManager.deleteNotificationHub("hubname");

Kayıt CRUD'ları

Bildirim Hub'ı istemcisi oluşturma:

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

Windows kaydı oluşturma:

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

iOS kaydı oluşturma:

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

Benzer şekilde Android (FCM), Windows Phone (MPNS) ve Kindle Fire (ADM) için de kayıt oluşturabilirsiniz.

Şablon kayıtları oluşturma:

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

Kayıt kimliği oluşturma + upsert deseni kullanarak kayıt oluşturun:

Kayıt kimliklerini cihazda depoluyorsa kayıp yanıtlar nedeniyle yinelenenleri kaldırır:

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

Kayıtları güncelleştirme:

hub.updateRegistration(reg);

Kayıtları sil:

hub.deleteRegistration(regid);

Sorgu kayıtları:

  • Tek kayıt alma:
hub.getRegistration(regid);
  • Hub'daki tüm kayıtları alma:
hub.getRegistrations();
  • Şu etiketle kayıtları alın:
hub.getRegistrationsByTag("myTag");
  • Kanala göre kayıtları alma:
hub.getRegistrationsByChannel("devicetoken");

Tüm koleksiyon sorguları $top ve devamlılık belirteçlerini destekler.

Yükleme API'si kullanımı

Yükleme API'si, kayıt yönetimi için alternatif bir mekanizmadır. Önemsiz olmayan ve kolayca yanlış veya verimli olmayan birden çok kayıt tutmak yerine, artık TEK Yükleme nesnesi kullanmak mümkündür.

Yükleme, ihtiyacınız olan her şeyi içerir: gönderme kanalı (cihaz belirteci), etiketler, şablonlar, ikincil kutucuklar (WNS ve APNS için). Artık kimliği almak için hizmeti çağırmanız gerekmez. YALNıZCA GUID veya başka bir tanımlayıcı oluşturun, cihazda tutun ve gönderme kanalı (cihaz belirteci) ile birlikte arka ucunuza gönderin.

Arka uçta yalnızca öğesine tek bir çağrı CreateOrUpdateInstallationyapmanız gerekir; tam olarak bir kez etkili olduğundan, gerekirse yeniden deneyebilirsiniz.

Örneğin Amazon Kindle Fire:

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

Güncelleştirmek istiyorsanız:

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

Gelişmiş senaryolar için, yükleme nesnesinin yalnızca belirli özelliklerini değiştirmeye olanak tanıyan kısmi güncelleştirme özelliğini kullanın. Kısmi güncelleştirme, Yükleme nesnesine karşı çalıştırabileceğiniz JSON Düzeltme Eki işlemlerinin alt kümesidir.

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

Yüklemeyi Sil:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patchve Delete sonunda ile Gettutarlıdır. İstediğiniz işlem yalnızca çağrı sırasında sistem kuyruğuna gider ve arka planda yürütülür. Get, ana çalışma zamanı senaryosu için tasarlanmamıştır, ancak yalnızca hata ayıklama ve sorun giderme amacıyla hizmet tarafından sıkı bir şekilde kısıtlanır.

Yüklemeler için gönderme akışı, Kayıtlarla aynıdır. Belirli bir Yükleme bildirimini hedeflemek için yalnızca "InstallationId:{desired-id}" etiketini kullanın. Bu durumda kod şu şekildedir:

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

Çeşitli şablonlardan biri için:

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

Zamanlama Bildirimleri (STANDART Katman için kullanılabilir)

Normal gönderme ile aynı ama ek bir parametresi olan scheduledTime, bildirimin ne zaman teslim edilmesi gerektiğini belirtir. Hizmet şu anda + 5 dakika ile şimdi + 7 gün arasında herhangi bir zaman noktasını kabul eder.

Windows yerel bildirimi zamanlama:

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

İçeri/Dışarı Aktarma (STANDART Katman için kullanılabilir)

Kayıtlara karşı toplu işlem gerçekleştirmeniz gerekebilir. Genellikle etiketleri güncelleştirmek için başka bir sistemle tümleştirme veya büyük bir düzeltme içindir. Binlerce kayıt söz konusuysa Get/Update akışını kullanmanızı önermeyiz. Sistemin İçeri/Dışarı Aktarma özelliği senaryoyu kapsayacak şekilde tasarlanmıştır. Depolama hesabınızın altındaki bir blob kapsayıcısına, çıkış için gelen verilerin ve konumun kaynağı olarak erişim sağlayacaksınız.

Dışarı aktarma işi gönderme:

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

İçeri aktarma işi gönderin:

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

bir iş yapılana kadar bekleyin:

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

Tüm işleri alma:

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

SAS imzalı URI:

Bu URL, bir blob dosyasının veya blob kapsayıcısının URL'sinin yanı sıra izinler ve süre sonu gibi bir dizi parametrenin yanı sıra hesabın SAS anahtarı kullanılarak yapılan tüm bu işlemlerin imzasıdır. Azure Depolama Java SDK'sı, bu URI'lerin oluşturulması dahil olmak üzere zengin özelliklere sahiptir. Basit alternatif olarak, imzalama algoritmasının ImportExportE2E temel ve kompakt uygulamasına sahip test sınıfına (GitHub konumundan) göz atın.

Bildirim Gönder

Notification nesnesi yalnızca üst bilgileri olan bir gövdedir, bazı yardımcı program yöntemleri yerel ve şablon bildirimleri nesnelerinin oluşturulmasına yardımcı olur.

  • Windows Mağazası ve Windows Phone 8.1 (Silverlight dışı)
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 ve 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);
  • Etiketlere Gönder
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Etiket ifadesine gönder
hub.sendNotification(n, "foo && ! bar");
  • Şablon bildirimi gönderme
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 kodunuzu çalıştırmak artık hedef cihazınızda görünen bir bildirim oluşturmalıdır.

Sonraki Adımlar

Bu konu başlığında Notification Hubs için basit bir Java REST istemcisinin nasıl oluşturulacağı gösterildi. Burada yapabilecekleriniz: