كيفية استخدام Notification Hubs من Java

يصف هذا الموضوع الميزات الرئيسية لـ Azure Notification Hub Java SDK الجديدة المدعومة بالكامل. إن هذا المشروع هو مشروع مفتوح المصدر ويمكنك عرض التعليمات البرمجية SDK بأكملها في Java SDK.

يمكنك الوصول إلى جميع ميزات مراكز الإعلام من واجهة Java/PHP/Python/Ruby الخلفية باستخدام واجهة Notification Hub REST كما هو موضح في مقالة MSDN واجهة برمجة تطبيقات REST لـ Notification Hubs. يوفر Java SDK برنامج تضمين رفيعًا عبر واجهات REST في Java.

تدعم SDK حاليًا:

  • CRUD على «مراكز الإعلامات»
  • CRUD على «التسجيلات»
  • إدارة التثبيت
  • تسجيلات التصدير/الاستيراد
  • عمليات الإرسال العادية
  • عمليات الإرسال المجدولة
  • عمليات غير متزامنة عبر Java NIO
  • الأنظمة الأساسية المدعومة: APNS (iOS)، و FCM (Android)، و WNS (تطبيقات متجر Windows)، و MPNS (Windows Phone)، و ADM (Amazon Kindle Fire)، و Baidu (Android بدون خدمات Google)

ملاحظة

تم إهمال خدمة إعلام Microsoft Push (MPNS) ولم تعد مدعومة.

استخدام SDK

تجميع وبناء

استخدام Maven

للبناء:

mvn package

رمز

مركز إخطار لـ CRUDs

أنشئ 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");

تسجيل CRUDs

إنشاء عميل مركز إعلامات:

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 والرموز المميزة للمتابعة.

استخدام واجهة برمجة تطبيقات التثبيت

إن واجهة برمجة تطبيقات التثبيت هي آلية بديلة لإدارة التسجيل. بدلاً من الاحتفاظ بتسجيلات متعددة، التي ليست بسيطة وقد يتم إجراؤها بسهولة بشكل غير صحيح أو غير فعال، أصبح من الممكن الآن استخدام عنصر تثبيت «أحادي».

يحتوي التثبيت على كل ما تحتاجه: قناة الدفع (الرمز المميز للجهاز)، والعلامات، والقوالب، واللوحات الثانوية (لـ 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 Patch التي يمكنك تشغيلها مقابل عنصر التثبيت.

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

جدولة الإعلامات (متوفرة للمستوى «القياسي»)

الأمر نفسه في لإرسال العادي ولكن بمعلمة إضافية واحدة - scheduledTime، التي تحدد توقيت وجوب تسليم الإعلام. تقبل الخدمة أي نقطة زمنية بين الآن + 5 دقائق والآن + 7 أيام.

جدولة إعلام Windows الأصلي:

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

الاستيراد/التصدير (متوفر للمستوى «القياسي»)

قد تحتاج إلى إجراء عملية مجمعة مقابل التسجيلات. عادة ما يكون للتكامل مع نظام آخر أو إصلاح هائل لتحديث العلامات. لا نوصي باستخدام تدفق Get/Update إذا كانت هناك الآلاف من التسجيلات. تم تصميم إمكانية الاستيراد/التصدير للنظام لتغطية السيناريو. ستوفر الوصول إلى حاوية blob ضمن حساب التخزين كمصدر للبيانات الواردة والموقع للإخراج.

أرسل مهمة التصدير:

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 هو عنوان URL لملف blob أو حاوية blob بالإضافة إلى مجموعة من المعلمات مثل الأذونات ووقت انتهاء الصلاحية بالإضافة إلى توقيع كل هذه الأشياء التي تم إجراؤها باستخدام مفتاح SAS للحساب. يحتوي Azure Storage Java SDK على قدرات غنية، بما في ذلك إنشاء عناوين URL. كبديل بسيط، ألق نظرة على فئة الاختبار ImportExportE2E (من موقع GitHub) التي تمتلك تنفيذ أساسي ومضغوط لخوارزمية التوقيع.

إرسال الإشعارات

إن عنصر Notification هو ببساطة نص مع عناوين، تساعد بعض أساليب الأداة المساعدة في إنشاء عناصر إشعارات القالب الأصلية.

  • Windows Store و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 البرمجية إلى ظهور إعلام على جهازك الهدف.

الخطوات التالية

عرض لك هذا الموضوع كيفية إنشاء عميل Java REST بسيط «لمراكز الإعلامات». من هنا يمكنك القيام بما يلي: