Cara menggunakan Notification Hubs dari Java

Topik ini menjelaskan fitur utama dari Azure Notification Hub Java SDK resmi yang didukung sepenuhnya. Proyek ini adalah proyek sumber terbuka dan Anda dapat melihat seluruh kode SDK di Java SDK.

Secara umum, Anda dapat mengakses semua fitur Notification Hubs dari back-end Java/PHP/Python/Ruby menggunakan antarmuka Notification Hub REST seperti yang dijelaskan dalam topik MSDN Notification Hubs REST API. Java SDK ini menyediakan pembungkus tipis melalui antarmuka REST ini di Java.

SDK saat ini mendukung:

  • CRUD pada Notification Hubs
  • CRUD pada Pendaftaran
  • Manajemen Penginstalan
  • Impor/Ekspor Pendaftaran
  • Pengiriman Reguler
  • Pengiriman Terjadwal
  • Operasi asinkron melalui Java NIO
  • Platform yang didukung: APNS (iOS), FCM (Android), WNS (aplikasi Windows Store), MPNS (Windows Phone), ADM (Amazon Kindle Fire), Baidu (Android tanpa layanan Google)

Catatan

Microsoft Push Notification Service (MPNS) telah dihentikan dan tidak lagi didukung.

Penggunaan SDK

Mengompilasi dan membangun

Menggunakan Maven

Untuk membangun:

mvn package

Kode

CRUD Notification Hub

Membuat NamespaceManager:

NamespaceManager namespaceManager = new NamespaceManager("connection string")

Membuat Notification Hub:

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

ATAU

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

Mendapatkan Notification Hub:

hub = namespaceManager.getNotificationHub("hubname");

Memperbarui Notification Hub:

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

Menghapus Notification Hub:

namespaceManager.deleteNotificationHub("hubname");

CRUD Pendaftaran

Membuat klien Notification Hub:

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

Membuat pendaftaran Windows:

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

Membuat pendaftaran iOS:

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

Demikian pula, Anda dapat membuat pendaftaran untuk Android (FCM), Windows Phone (MPNS), dan Kindle Fire (ADM).

Membuat pendaftaran templat:

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

Membuat pendaftaran menggunakan pola pembuatan ID pendaftaran + upsert:

Menghapus duplikat karena respons yang hilang jika menyimpan ID pendaftaran pada perangkat:

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

Memperbarui pendaftaran:

hub.updateRegistration(reg);

Menghapus pendaftaran:

hub.deleteRegistration(regid);

Mengkueri pendaftaran:

  • Mendapatkan pendaftaran tunggal:
hub.getRegistration(regid);
  • Mendapatkan semua pendaftaran di hub:
hub.getRegistrations();
  • Mendapatkan pendaftaran dengan tag:
hub.getRegistrationsByTag("myTag");
  • Mendapatkan pendaftaran berdasarkan saluran:
hub.getRegistrationsByChannel("devicetoken");

Semua kueri koleksi mendukung $top dan token kelanjutan.

Penggunaan Installation API

Installation API adalah mekanisme alternatif untuk manajemen pendaftaran. Sebagai ganti mempertahankan beberapa pendaftaran, yang tidak sepele dan mungkin mudah dilakukan secara tidak benar atau tidak efisien, sekarang Anda dapat menggunakan objek Penginstalan SINGLE.

Penginstalan berisi semua hal yang Anda butuhkan: saluran push (token perangkat), tag, templat, petak peta sekunder (untuk WNS dan APNS). Anda tidak perlu memanggil layanan untuk mendapatkan ID lagi - cukup buat GUID atau pengidentifikasi lainnya, simpan di perangkat dan kirim ke backend Anda bersama dengan saluran push (token perangkat).

Di backend, Anda hanya harus melakukan satu panggilan ke CreateOrUpdateInstallation; hal ini sepenuhnya bersifat idempotent, jadi jangan ragu untuk mencoba kembali jika diperlukan.

Sebagai contoh untuk Amazon Kindle Fire:

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

Jika Anda ingin memperbaruinya:

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

Untuk skenario tingkat lanjut, gunakan kemampuan pembaruan parsial, yang hanya memungkinkan memodifikasi properti tertentu dari objek penginstalan. Pembaruan parsial adalah subset operasi JSON Patch yang dapat Anda jalankan terhadap objek Penginstalan.

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

Hapus Penginstalan:

hub.deleteInstallation(installation.getInstallationId());

CreateOrUpdate, Patch, dan Delete akhirnya konsisten dengan Get. Operasi yang Anda minta hanya masuk ke antrean sistem selama panggilan dan dieksekusi di latar belakang. Get tidak dirancang untuk skenario runtime bahasa umum utama tetapi hanya untuk tujuan debug dan pemecahan masalah, hal ini sangat dibatasi oleh layanan.

Kirim alur untuk Penginstalan sama dengan untuk Pendaftaran. Untuk menargetkan pemberitahuan ke Penginstalan tertentu - cukup gunakan tag "InstallationId:{desired-id}". Untuk kasus ini, kodenya adalah:

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

Untuk salah satu dari beberapa templat:

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

Pemberitahuan Jadwal (tersedia untuk Tingkat STANDAR)

Sama seperti pengiriman reguler tetapi dengan satu parameter tambahan - scheduledTime, yang memberi tahu kapan pemberitahuan harus dikirimkan. Layanan menerima setiap titik waktu antara sekarang + 5 menit dan sekarang + 7 hari.

Menjadwalkan pemberitahuan asli Windows:

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

Impor/Ekspor (tersedia untuk Tingkat STANDAR)

Anda mungkin perlu melakukan operasi massal terhadap pendaftaran. Biasanya untuk integrasi dengan sistem lain atau perbaikan besar-besaran untuk memperbarui tag. Sebaiknya jangan gunakan alur Get/Update jika ribuan pendaftaran terlibat. Kemampuan Impor/Ekspor sistem dirancang untuk mencakup skenario. Anda akan menyediakan akses ke kontainer blob di bawah akun penyimpanan Anda sebagai sumber data masuk dan lokasi untuk output.

Mengirim pekerjaan ekspor:

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

Mengirim pekerjaan impor:

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

Menunggu sampai pekerjaan selesai:

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

Mendapatkan semua pekerjaan:

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

URI dengan tanda tangan SAS:

URL ini adalah URL file blob atau kontainer blob ditambah sekumpulan parameter seperti izin dan waktu kedaluwarsa ditambah tanda tangan semua hal ini yang dibuat menggunakan kunci SAS akun. Azure Storage Java SDK memiliki kemampuan yang kaya termasuk pembuatan URI ini. Sebagai alternatif sederhana, lihatlah kelas uji ImportExportE2E (dari lokasi GitHub) yang memiliki penerapan dasar dan ringkas dari algoritma penandatanganan.

Mengirim Pemberitahuan

Objek Pemberitahuan hanya berisi isi dengan header, beberapa metode utilitas membantu dalam membangun objek pemberitahuan asli dan templat.

  • Windows Store dan Windows Phone 8.1 (non-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 dan 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);
  • Mengirim ke Tag
Set<String> tags = new HashSet<String>();
tags.add("boo");
tags.add("foo");
hub.sendNotification(n, tags);
  • Mengirim ke ekspresi tag
hub.sendNotification(n, "foo && ! bar");
  • Mengirim pemberitahuan templat
Map<String, String> prop =  new HashMap<String, String>();
prop.put("prop1", "v1");
prop.put("prop2", "v2");
Notification n = Notification.createTemplateNotification(prop);
hub.sendNotification(n);

Menjalankan kode Java Anda sekarang akan menghasilkan pemberitahuan yang muncul di perangkat target Anda.

Langkah berikutnya

Topik ini menunjukkan cara membuat klien Java REST sederhana untuk Notification Hubs. Setelahnya, Anda bisa: