الفرق بين المراجعتين لصفحة: «ReactNative/pushnotificationios»

من موسوعة حسوب
أنشأ الصفحة ب' = PushNotificatonIOS = <blockquote>'''مهملة'''. استخدم [https://github.com/react-native-community/react-native-push-notification-ios ‎@react-native-communi...'
 
ط مراجعة
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:PushNotificatonIOS في React Native}}</noinclude>
= PushNotificatonIOS =
<blockquote>'''مهملة'''. استخدم [https://github.com/react-native-community/react-native-push-notification-ios ‎@react-native-community/push-notification-ios] بدلًا منها.</blockquote><blockquote>
<blockquote>'''مهملة'''. استخدم [https://github.com/react-native-community/react-native-push-notification-ios ‎@react-native-community/push-notification-ios] بدلًا منها.</blockquote>
====== خاص بالمشاريع المكتوبة بشفرة Native ======
 
هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل <code>expo-cli</code> فعليك الاطلاع على الدليل [https://docs.expo.io/versions/latest/sdk/notifications Notifications] ضمن توثيق Expo لإيجاد البديل الملائم.</blockquote>يعالج إشعارات الدّفع (push notifications) في التطبيقات، بما فيها الأذونات ورقم شارة الأيقونة (badge number). يجب [https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW6 إعداد الإشعارات مع Apple] وكذلك النّظام من جانب الخادم  لتهيئتها وتشغيلها.
=== '''خاصٌّ بالمشاريع المكتوبة بشفرة Native''' ===
هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل <code>expo-cli</code> فعليك الاطلاع على الدليل [https://docs.expo.io/versions/latest/sdk/notifications Notifications] ضمن توثيق Expo لإيجاد البديل الملائم.
 
يعالج إشعارات الدّفع (push notifications) في التطبيقات، بما فيها الأذونات ورقم شارة الأيقونة (badge number).
 
يجب [https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW6 إعداد الإشعارات مع Apple] وكذلك النّظام من جانب الخادم  لتهيئتها وتشغيلها.


في إصدارات React Native  0.60.0 وما بعده:
في إصدارات React Native  0.60.0 وما بعده:
سطر 14: سطر 8:
* تقوم خاصّية الرّبط التّلقائيّ Autolinking بالتّكفّل بعمليّة الربّط.
* تقوم خاصّية الرّبط التّلقائيّ Autolinking بالتّكفّل بعمليّة الربّط.


في إصدارات React Native الأقلّ من الإصدار 0.60.0:
أما في إصدارات React Native السابقة للإصدار 0.60.0:


يجب إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ./ios/Podfile
يجب إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ./ios/Podfile


* CocoaPods:
* CocoaPods:
** إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ./ios/Podfile
** إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ./ios/Podfile
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
target 'myAwesomeApp' do
target 'myAwesomeApp' do
سطر 28: سطر 22:


* [https://reactnative.dev/docs/linking-libraries-ios#manual-linking الرّبط اليدويّ] لمكتبة PushNotificationIOS:
* [https://reactnative.dev/docs/linking-libraries-ios#manual-linking الرّبط اليدويّ] لمكتبة PushNotificationIOS:
** يجب إضافة ما يلي إلى المشروع: <code>node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj</code>
** يجب إضافة ما يلي إلى المشروع: <syntaxhighlight>
node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj
</syntaxhighlight>
** يجب إضافة <code>libRCTPushNotification.a</code> إلى <code>Link Binary With Libraries</code>  
** يجب إضافة <code>libRCTPushNotification.a</code> إلى <code>Link Binary With Libraries</code>  


وأخيرًا يجب إكمال AppDelegate لتمكين الدّعم للأحداث <code>notification</code> و <code>register</code> وذلك كما يلي:
وأخيرًا يجب إكمال AppDelegate لتمكين الدّعم للأحداث <code>notification</code> و <code>register</code> وذلك كما يلي:


في أعلى <code>AppDelegate.m</code> :<syntaxhighlight lang="javascript">
في أعلى <code>AppDelegate.m</code>:<syntaxhighlight lang="javascript">
#import <React/RCTPushNotificationManager.h>
#import <React/RCTPushNotificationManager.h>
</syntaxhighlight>ثمّ يجب إضافة ما يلي إلى AppDelegate المُنشأ:<syntaxhighlight lang="javascript">
</syntaxhighlight>ثمّ يجب إضافة ما يلي إلى AppDelegate المُنشأ:<syntaxhighlight lang="javascript">
سطر 65: سطر 61:
</syntaxhighlight>يجب إضافة السطور البرمجية التالية لإظهار الإشعارات بينما تكون في الواجهة (هذه الخاصّية متوفّرة بدءًا من iOS 10):
</syntaxhighlight>يجب إضافة السطور البرمجية التالية لإظهار الإشعارات بينما تكون في الواجهة (هذه الخاصّية متوفّرة بدءًا من iOS 10):


في أعلى الملف <code>AppDelegate.m</code>:<syntaxhighlight lang="javascript">
* في أعلى الملف <code>AppDelegate.m</code>:<syntaxhighlight lang="javascript">
#import <UserNotifications/UserNotifications.h>
#import <UserNotifications/UserNotifications.h>
</syntaxhighlight>ثم يجب إضافة ما يلي إلى AppDelegate المُنشأ:<syntaxhighlight lang="javascript">
</syntaxhighlight>ثم يجب إضافة ما يلي إلى AppDelegate المُنشأ:<syntaxhighlight lang="javascript">
سطر 83: سطر 79:
   completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
   completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
}
</syntaxhighlight>بعدها يمكن تفعيل إشعارات الخلفيّة والإشعارات البعيدة لتستخدم بشكلٍ صحيحٍ. وأسهل طريقة للقيام بذلك هي عن طريق إعدادات المشروع، وذلك بالانتقال إلى Targets -> Your App -> Capabilities -> Background Modes وتأكيد Remote notifications. والذي بدوره يمكٍّن الإعدادات المطلوبة تلقائيًا.  
</syntaxhighlight>بعدها يمكن تفعيل إشعارات الخلفيّة والإشعارات البعيدة لتستخدم بشكلٍ صحيحٍ. وأسهل طريقة للقيام بذلك هي عن طريق إعدادات المشروع، وذلك بالانتقال إلى Targets -> Your App -> Capabilities‏ -> Background Modes وتأكيد Remote notifications. والذي بدوره يمكٍّن الإعدادات المطلوبة تلقائيًا.  


== التّوابع ==
== التّوابع ==
سطر 90: سطر 86:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.presentLocalNotification(details);
PushNotificationIOS.presentLocalNotification(details);
</syntaxhighlight>يقوم بجدولة الإشعارات المحليّة (localNotification) لعرضها مباشرةّ.
</syntaxhighlight>يجدول الإشعارات المحليّة (localNotification) لعرضها مباشرةّ.


==== المعاملات ====
==== المعاملات ====
سطر 99: سطر 95:
!الوصف
!الوصف
|-
|-
|details
|<code>details</code>
|كائن
|كائن (object)
object
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 128: سطر 123:
!الوصف
!الوصف
|-
|-
|details
|<code>details</code>
|كائن
|كائن (object)
object
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 139: سطر 133:
* <code>alertTitle</code>: النص الذي يظهر كعنوانٍ لمنبّه الإشعار.
* <code>alertTitle</code>: النص الذي يظهر كعنوانٍ لمنبّه الإشعار.
* <code>alertBody</code>: الرّسالة التي ستعرض في منبِّه الإشعار.
* <code>alertBody</code>: الرّسالة التي ستعرض في منبِّه الإشعار.
* <code>alertAction</code>: الإجراء "action" الظاهر أسفل الإشعار الفعّال. وبشكلٍ افتراضيٍّ يكون  الإظهار "view". وألغته Apple في الإصدار iOS 10 وما بعده.
* <code>alertAction</code>: الإجراء "action" الظاهر أسفل الإشعار الفعّال. وبشكلٍ افتراضيٍّ يكون  الإظهار "view". وألغته Apple في الإصدار iOS 10 وما بعده.
* <code>soundName</code>: الصوت الذي سيشغل عند إطلاق الإشعار (اختياريّ).
* <code>soundName</code>: الصوت الذي سيشغل عند إطلاق الإشعار (اختياريّ).
* <code>isSilent</code>: سيظهر الإشعار من دون صوتٍ إذا كان <code>true</code> (اختياريّ).
* <code>isSilent</code>: سيظهر الإشعار من دون صوتٍ إذا كان <code>true</code> (اختياريّ).
سطر 150: سطر 144:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.cancelAllLocalNotifications();
PushNotificationIOS.cancelAllLocalNotifications();
</syntaxhighlight>يقوم بإلغاء جميع localNotification المجدولة.
</syntaxhighlight>يلغي جميع localNotification المجدولة.


=== <code>removeAllDeliveredNotifications()‎</code> ===
=== <code>removeAllDeliveredNotifications()‎</code> ===
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.removeAllDeliveredNotifications();
PushNotificationIOS.removeAllDeliveredNotifications();
</syntaxhighlight>يقوم بإزالة جميع التنبيهات المسلَّمة من مركز التنبيهات.
</syntaxhighlight>يزيل جميع التنبيهات المسلَّمة من مركز التنبيهات.


=== <code>getDeliveredNotifications()‎</code> ===
=== <code>getDeliveredNotifications()‎</code> ===
سطر 169: سطر 163:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|دالةٌ تستقبل مصفوفةً من الإشعارات المسلّمة
|دالةٌ تستقبل مصفوفةً من الإشعارات المسلّمة
|}
|}
يحوي الكائن delivered notification ما يلي:
الإشعار المسلم (delivered notification) هو كائن يحوي ما يلي:


* <code>identifier</code>: معرِّف هذا الإشعار.
* <code>identifier</code>: معرِّف هذا الإشعار.
سطر 196: سطر 189:
!الوصف
!الوصف
|-
|-
|identifires
|<code>identifires</code>
|مصفوفة
|مصفوفة (array)
array
|نعم
|نعم
|مصفوفة من معرِّفات الإشعارات
|مصفوفة من معرِّفات الإشعارات
سطر 215: سطر 207:
!الوصف
!الوصف
|-
|-
|number
|<code>number</code>
|رقم
|رقم (number)
number
|نعم
|نعم
|رقم شارة أيقونة التطبيق
|رقم شارة أيقونة التطبيق
سطر 234: سطر 225:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالّة
|دالّة (function)
function
|نعم
|نعم
|الدالّة التي سيمرّر لها رقم الشّارة الحاليّ
|الدالّة التي سيمرّر لها رقم الشّارة الحاليّ
سطر 244: سطر 234:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.cancelLocalNotifications(userInfo);
PushNotificationIOS.cancelLocalNotifications(userInfo);
</syntaxhighlight>يلغي جميع الإشعارات المحليَّة.
</syntaxhighlight>يلغي جميع الإشعارات المحليَّة، ويمكن بشكلٍ اختياريٍّ تقييده بقائمةٍ من الإشعارات الملغيّة المحدّدة في المُعامل <code>userInfo</code>.
 
ويمكن بشكلٍ اختياريٍّ تقييده بقائمةٍ من الإشعارات الملغيّة المحدّدة في المُعامل <code>userInfo</code>.


==== المعاملات ====
==== المعاملات ====
سطر 253: سطر 241:
!النوع
!النوع
!مطلوب
!مطلوب
!الوصف
|-
|-
|userinfo
|<code>userinfo</code>
|كائن
|كائن (object)
object
|لا
|لا
|
|}
|}


سطر 274: سطر 259:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|الدّالة التي سيمرّر لها مصفوفةً من الكائنات التي تصف الإشعارات المحليّة
|الدّالة التي سيمرّر لها مصفوفةً من الكائنات التي تصف الإشعارات المحليّة
سطر 293: سطر 277:
!الوصف
!الوصف
|-
|-
|type
|<code>type</code>
|سلسلة نصية
|سلسلة نصية (string)
string
|نعم
|نعم
|صنف الحدث
|صنف الحدث
|-
|-
|handler
|<code>handler</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|المراقب
|المراقب
سطر 310: سطر 292:
* <code>localNotification</code>: يُطلَق عند استقبال الإشعار المحليّ، حيث يستدعى المعالج عن طريق نسخةٍ من <code>PushNotificationIOS</code>.
* <code>localNotification</code>: يُطلَق عند استقبال الإشعار المحليّ، حيث يستدعى المعالج عن طريق نسخةٍ من <code>PushNotificationIOS</code>.
* <code>register</code>: يُطلق عندما يسجل المستخدم من أجل الإشعارات البعيدة، حيث يستدعى المُعالج عن طريق مقطعٍ نصيٍّ يمثّل رمز الجهاز (deviceToken).
* <code>register</code>: يُطلق عندما يسجل المستخدم من أجل الإشعارات البعيدة، حيث يستدعى المُعالج عن طريق مقطعٍ نصيٍّ يمثّل رمز الجهاز (deviceToken).
* <code>registrationError</code>: يُطلق عندما يفشل المستخدم في التسجيل من أجل الإشعارات البعيدة، ويحصل ذلك عادة عند وجود مشاكل في APNS, أو أن الجهاز عبارة عن محاكٍ. ويطلب المعالج باستخدام {message: string, code: number, details: any}.  
* <code>registrationError</code>: يُطلق عندما يفشل المستخدم في التسجيل من أجل الإشعارات البعيدة، ويحصل ذلك عادة عند وجود مشاكل في APNS، أو أن الجهاز عبارة عن محاكٍ. ويُستدعَى المعالج مع <code>{message: string, code: number, details: any}</code>.


=== <code>removeEventListener()‎</code> ===
=== <code>removeEventListener()‎</code> ===
سطر 342: سطر 324:
</syntaxhighlight>يطلب من المستخدم عبر مربع حوار منح أذونات الإشعارات (notification permissions) من منصة iOS. ويطلب جميع أذونات الإشعار بشكلٍ افتراضيٍّ، لكن يمكن أن يطلب مجموعةً فرعيّةً من هذه الأذونات عن طريق تمرير خريطة (map) من الأذونات المطلوبة. وتدعم هذه الدالة الأذونات التالية:
</syntaxhighlight>يطلب من المستخدم عبر مربع حوار منح أذونات الإشعارات (notification permissions) من منصة iOS. ويطلب جميع أذونات الإشعار بشكلٍ افتراضيٍّ، لكن يمكن أن يطلب مجموعةً فرعيّةً من هذه الأذونات عن طريق تمرير خريطة (map) من الأذونات المطلوبة. وتدعم هذه الدالة الأذونات التالية:


* التنبيه  <code>alert</code>.
* التنبيه  <code>alert</code>
* الشارة  <code>badge</code>.
* الشارة  <code>badge</code>
* الصوت <code>sound</code>.
* الصوت <code>sound</code>


وإذا مرّرت خريطة الأذونات إلى التابع فإنه لا يطلب إلا الأذونات ذات القيمة المنطقية <code>true</code>.
وإذا مرّرت خريطة الأذونات إلى التابع فإنه لا يطلب إلا الأذونات ذات القيمة المنطقية <code>true</code>.
سطر 357: سطر 339:
!الوصف
!الوصف
|-
|-
|permission
|<code>permission</code>
|مصفوفة
|مصفوفة (array)
array
|لا
|لا
|تنبيه أو شارة أو صوت
|تنبيه أو شارة أو صوت
سطر 381: سطر 362:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالّة
|دالّة (function)
function
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 389: سطر 369:
يتم استدعاء <code>callback</code> عن طريق الكائن <code>permissions</code>:
يتم استدعاء <code>callback</code> عن طريق الكائن <code>permissions</code>:


* التنبيه  <code>alert</code>: قيمة منطقيّة.
* التنبيه  <code>alert</code> (قيمة منطقيّة)
* الشارة  <code>badge</code>: قيمة منطقيّة.
* الشارة  <code>badge</code> (قيمة منطقيّة)
* الصوت <code>sound</code>: قيمة منطقيّة.
* الصوت <code>sound</code> (قيمة منطقيّة)


=== <code>getInitialNotification()‎</code> ===
=== <code>getInitialNotification()‎</code> ===
سطر 401: سطر 381:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
constructor(nativeNotif);
constructor(nativeNotif);
</syntaxhighlight>لن تحتاج أبدًا إلى استنساخ <code>PushNotificationIOS</code> بنفسك، بل يكفي مراقبة الحدث <code>notification</code> واستدعاء <code>getInitialNotification</code>.
</syntaxhighlight>لن تحتاج أبدًا إلى استنساخ <code>PushNotificationIOS</code> بنفسك، بل يكفي مراقبة الحدث <code>notification</code> واستدعاء <code>getInitialNotification</code>.


=== <code>finish()‎</code> ===
=== <code>finish()‎</code> ===
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
finish(fetchResult);
finish(fetchResult);
</syntaxhighlight>يتاح هذا التابع للإشعارات البعيدة المستقبلة بواسطة [https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-apphttps://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application?language=objclication?language=objc application:didReceiveRemoteNotification:fetchCompletionHandler:]  
</syntaxhighlight>يتاح هذا التابع للإشعارات البعيدة المستقبلة بواسطة [https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-apphttps://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application?language=objclication?language=objc application:didReceiveRemoteNotification:fetchCompletionHandler:] حيث يطلَب للتنفيذ عند الانتهاء من معالجة الإشعار البعيد، ويتم تمرير قيمة ناتج الطلبية fetchResult التي تصف ناتج العملية. ويجب طلب هذا المعالج في أقرب فرصةٍ ممكنةٍ، ويمكن الاطلاع على قائمة القيم الممكنة عن طريق <code>PushNotificationIOS.FetchResult</code>. إن لم يُستدعَى هذا التابع، فمن الممكن حدوث اختناقٍ للإشعارات البعيدة الموجودة في الخلفية.
 
حيث يطلَب للتنفيذ عند الانتهاء من معالجة الإشعار البعيد، ويتم تمرير قيمة ناتج الطلبية fetchResult التي تصف ناتج العملية. ويجب طلب هذا المعالج في أقرب فرصةٍ ممكنةٍ، ويمكن الاطلاع على قائمة القيم الممكنة عن طريق <code>PushNotificationIOS.FetchResult</code>. إن لم يُستدعَى هذا التابع، فمن الممكن حدوث اختناقٍ للإشعارات البعيدة الموجودة في الخلفية.
 
=== <code>getMessage()‎</code> ===
=== <code>getMessage()‎</code> ===
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
سطر 451: سطر 428:


* [https://facebook.github.io/react-native/docs/pushnotificationios صفحة PushNotificationIOS في توثيق React Native الرسميّ]
* [https://facebook.github.io/react-native/docs/pushnotificationios صفحة PushNotificationIOS في توثيق React Native الرسميّ]
[[تصنيف:ReactNative]]

مراجعة 11:46، 6 يناير 2021

مهملة. استخدم ‎@react-native-community/push-notification-ios بدلًا منها.

خاص بالمشاريع المكتوبة بشفرة Native

هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل expo-cli فعليك الاطلاع على الدليل Notifications ضمن توثيق Expo لإيجاد البديل الملائم.

يعالج إشعارات الدّفع (push notifications) في التطبيقات، بما فيها الأذونات ورقم شارة الأيقونة (badge number). يجب إعداد الإشعارات مع Apple وكذلك النّظام من جانب الخادم لتهيئتها وتشغيلها.

في إصدارات React Native 0.60.0 وما بعده:

  • تقوم خاصّية الرّبط التّلقائيّ Autolinking بالتّكفّل بعمليّة الربّط.

أما في إصدارات React Native السابقة للإصدار 0.60.0:

يجب إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ‎./ios/Podfile

  • CocoaPods:
    • إضافة مكتبة PushNotificationIOS إلى Podfile على المسار: ‎./ios/Podfile
target 'myAwesomeApp' do
  # Pods for myAwesomeApp
  pod 'React-RCTPushNotification', :path => '../node_modules/react-native/Libraries/PushNotificationIOS'
end
  • الرّبط اليدويّ لمكتبة PushNotificationIOS:
    • يجب إضافة ما يلي إلى المشروع:
      node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj
    • يجب إضافة libRCTPushNotification.a إلى Link Binary With Libraries

وأخيرًا يجب إكمال AppDelegate لتمكين الدّعم للأحداث notification و register وذلك كما يلي:

في أعلى AppDelegate.m:

#import <React/RCTPushNotificationManager.h>

ثمّ يجب إضافة ما يلي إلى AppDelegate المُنشأ:

// مطلوب من أجل التسجيل للإشعارات
 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
 {
  [RCTPushNotificationManager didRegisterUserNotificationSettings:notificationSettings];
 }
 // register مطلوب من أجل حدَث التسجيل
 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
 {
  [RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
 }
 // notification مطلوب من أجل حدَث الإشعارات  
 // يجب طلب معالج الإكمال قبل معالجة الإشعارات البعيدة   
 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
                                                        fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 {
   [RCTPushNotificationManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
 }
 // registrationError مطلوب من أجل الحدَث
 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
 {
  [RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error];
 }
 // localNotification مطلوب من أجل الحدَث
 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
 {
  [RCTPushNotificationManager didReceiveLocalNotification:notification];
 }

يجب إضافة السطور البرمجية التالية لإظهار الإشعارات بينما تكون في الواجهة (هذه الخاصّية متوفّرة بدءًا من iOS 10):

  • في أعلى الملف AppDelegate.m:
    #import <UserNotifications/UserNotifications.h>
    
    ثم يجب إضافة ما يلي إلى AppDelegate المُنشأ:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      ...
      // UNUserNotificationCenter تعريف 
      UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
      center.delegate = self;
    
      return YES;
    }
    
    //  تستدعى عند تسليم الإشعار إلى التطبيق الذي في الواجهة
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
    {
      completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
    }
    
    بعدها يمكن تفعيل إشعارات الخلفيّة والإشعارات البعيدة لتستخدم بشكلٍ صحيحٍ. وأسهل طريقة للقيام بذلك هي عن طريق إعدادات المشروع، وذلك بالانتقال إلى Targets ‏-> Your App ‏-> Capabilities‏ -> Background Modes وتأكيد Remote notifications. والذي بدوره يمكٍّن الإعدادات المطلوبة تلقائيًا.

التّوابع

presentLocalNotification()‎

PushNotificationIOS.presentLocalNotification(details);

يجدول الإشعارات المحليّة (localNotification) لعرضها مباشرةّ.

المعاملات

الاسم النوع مطلوب الوصف
details كائن (object) نعم انظر أسفل الجدول

يحوي الكائن details ما يلي:

  • alertBody: الرسالة الظّاهرة في منبِّه الإشعار.
  • alertAction: الإجراء "action" الظاهر أسفل الإشعار الفعّال. وبشكلٍ افتراضيٍّ يكون الإظهار "view". ألغته Apple في الإصدار iOS 10 وما بعده.
  • alertTitle: النّصّ الذي يظهر كعنوانٍ لمنبّه الإشعار.
  • soundName: الصّوت الذي سيشغّل عند إطلاق الإشعار (اختياريّ).
  • isSilent: سيظهر الإشعار من دون صوتٍ إذا كانت قيمته true (اختياريّ).
  • category: فئة الإشعار (اختياريّ).
  • userInfo: كائنٌ يحتوي على معلوماتٍ إضافيّةٍ عن الإشعار (اختياريّ).
  • applicationIconBadgeNumber: الرقم الذي سيظهر كإشارةٍ لأيقونة التّطبيق. والقيمة 0 هي القيمة الافتراضيّة مما يعني أنه لن تظهر أيّ إشارةٍ (اختياريّ).

scheduleLocalNotification()‎

PushNotificationIOS.scheduleLocalNotification(details);

يقوم بجدولة localNotification لعرضها مستقبلًا.

المعاملات (parameters)

الاسم النوع مطلوب الوصف
details كائن (object) نعم انظر أسفل الجدول

يحوي الكائن details ما يلي:

  • fireDate: الوقت والتاريخ الذي سيقوم فيه النظام بتسليم الإشعار.
  • alertTitle: النص الذي يظهر كعنوانٍ لمنبّه الإشعار.
  • alertBody: الرّسالة التي ستعرض في منبِّه الإشعار.
  • alertAction: الإجراء "action" الظاهر أسفل الإشعار الفعّال. وبشكلٍ افتراضيٍّ يكون الإظهار "view". وألغته Apple في الإصدار iOS 10 وما بعده.
  • soundName: الصوت الذي سيشغل عند إطلاق الإشعار (اختياريّ).
  • isSilent: سيظهر الإشعار من دون صوتٍ إذا كان true (اختياريّ).
  • category: فئة الإشعار (اختياريّ).
  • userInfo: كائن يحتوي على معلوماتٍ إضافيّةٍ عن الإشعار (اختياريّ).
  • applicationIconBadgeNumber: الرقم الذي سيظهر كإشارةٍ لأيقونة التطبيق. والقيمة 9 هي القيمة الافتراضيّة مما يعني أنه لن تظهر أيّ إشارةٍ (اختياريّ).
  • repeatInterval: الفاصل الزمنيّ للتكرار، ويكون سلسلةً نصيةً مثل: minute, hour, day, week, month, year (اختياريّ).

cancelAllLocalNotification()‎

PushNotificationIOS.cancelAllLocalNotifications();

يلغي جميع localNotification المجدولة.

removeAllDeliveredNotifications()‎

PushNotificationIOS.removeAllDeliveredNotifications();

يزيل جميع التنبيهات المسلَّمة من مركز التنبيهات.

getDeliveredNotifications()‎

PushNotificationIOS.getDeliveredNotifications(callback);

يعطي قائمةً بإشعارات التطبيقات التي لا تزال ظاهرةً في مركز الإشعارات.

المعاملات

الاسم النوع مطلوب الوصف
callback دالة (function) نعم دالةٌ تستقبل مصفوفةً من الإشعارات المسلّمة

الإشعار المسلم (delivered notification) هو كائن يحوي ما يلي:

  • identifier: معرِّف هذا الإشعار.
  • title: عنوان هذا الإشعار.
  • body: جسم هذا الإشعار.
  • category: فئة هذا الإشعار (اختياريّ).
  • userInfo: كائنٌ يحتوي على معلوماتٍ إضافيّةٍ عن الإشعار (اختياريّ).
  • thread-id: معرِّف عمليّة (thread) هذا الإشعار إن وجِدَت.

removeDeliveredNotifications()‎

PushNotificationIOS.removeDeliveredNotifications(identifiers);

يزيل الإشعارات المخصّصة من مركز الإشعارات.

المعاملات

الاسم النوع مطلوب الوصف
identifires مصفوفة (array) نعم مصفوفة من معرِّفات الإشعارات

setApplicationIconBadgeNumber()‎

PushNotificationIOS.setApplicationIconBadgeNumber(number);

يضع رقم شارة (badge number) أيقونة التّطبيق على الشاشة الرئيسية (home screen).

المعاملات (parameters)

الاسم النوع مطلوب الوصف
number رقم (number) نعم رقم شارة أيقونة التطبيق

getApplicationIconBadgeNumber()‎

PushNotificationIOS.getApplicationIconBadgeNumber(callback);

يجلب رقم الشّارة الحاليّ لأيقونة التطبيق على الشاشة الرئيسية (home screen).

المعاملات

الاسم النوع مطلوب الوصف
callback دالّة (function) نعم الدالّة التي سيمرّر لها رقم الشّارة الحاليّ

cancelLocalNotifications()‎

PushNotificationIOS.cancelLocalNotifications(userInfo);

يلغي جميع الإشعارات المحليَّة، ويمكن بشكلٍ اختياريٍّ تقييده بقائمةٍ من الإشعارات الملغيّة المحدّدة في المُعامل userInfo.

المعاملات

الاسم النوع مطلوب
userinfo كائن (object) لا

getScheduledLocalNotifications()‎

PushNotificationIOS.getScheduledLocalNotifications(callback);

يجلب الإشعارات المحليَّة والمُجدولة حاليًا.

المعاملات

الاسم النوع مطلوب   الوصف
callback دالة (function) نعم الدّالة التي سيمرّر لها مصفوفةً من الكائنات التي تصف الإشعارات المحليّة

addEventListener()‎

PushNotificationIOS.addEventListener(type, handler);

يُلحِق المراقب (listener) بأحداث الإشعارات المحليّة أو البعيدة عندما يعمل التطبيق في الواجهة أو الخلفيّة.

المعاملات

الاسم النوع مطلوب الوصف
type سلسلة نصية (string) نعم صنف الحدث
handler دالة (function) نعم المراقب

الأحداث الصّالحة هي:

  • notification: يُطلَق عند استقبال الإشعار البعيد، حيث يستدعى المُعالج عن طريق نسخةٍ من PushNotificationIOS.
  • localNotification: يُطلَق عند استقبال الإشعار المحليّ، حيث يستدعى المعالج عن طريق نسخةٍ من PushNotificationIOS.
  • register: يُطلق عندما يسجل المستخدم من أجل الإشعارات البعيدة، حيث يستدعى المُعالج عن طريق مقطعٍ نصيٍّ يمثّل رمز الجهاز (deviceToken).
  • registrationError: يُطلق عندما يفشل المستخدم في التسجيل من أجل الإشعارات البعيدة، ويحصل ذلك عادة عند وجود مشاكل في APNS، أو أن الجهاز عبارة عن محاكٍ. ويُستدعَى المعالج مع {message: string, code: number, details: any}.

removeEventListener()‎

PushNotificationIOS.removeEventListener(type, handler);

يزيل معالج الحدَث، ويجب أن يتم ذلك في componentWillUnmount لمنع تسرّب المعلومات من الذاكرة.

المعاملات

الاسم النوع مطلوب الوصف
type سلسلة نصية

string

نعم نوع الحدث
handler دالة

function

نعم مراقِب

requestPermissions()‎

PushNotificationIOS.requestPermissions([permissions]);

يطلب من المستخدم عبر مربع حوار منح أذونات الإشعارات (notification permissions) من منصة iOS. ويطلب جميع أذونات الإشعار بشكلٍ افتراضيٍّ، لكن يمكن أن يطلب مجموعةً فرعيّةً من هذه الأذونات عن طريق تمرير خريطة (map) من الأذونات المطلوبة. وتدعم هذه الدالة الأذونات التالية:

  • التنبيه alert
  • الشارة badge
  • الصوت sound

وإذا مرّرت خريطة الأذونات إلى التابع فإنه لا يطلب إلا الأذونات ذات القيمة المنطقية true.

ويعيد هذا التابع وعدًا (promise) والذي يُقبل (resolve) عند قيام المستخدم بقبول الأذونات أو رفضها أو إذا رفضت الأذونات مسبقًا، سيقبل الوعد إلى الحالة الحالية للأذونات.

المعاملات

الاسم النوع مطلوب الوصف
permission مصفوفة (array) لا تنبيه أو شارة أو صوت

abandonPermissions()‎

PushNotificationIOS.abandonPermissions();

يُستخدم لإلغاء تسجيل جميع الإشعارات البعيدة المستقبلة عن طريق خدمة Apple Push Notification. يُستخدم هذا التابع نادرًا، حيث يُستخدم فقط في حالة قيام الإصدار الجديد من التطبيق بإلغاء دعم جميع الإشعارات البعيدة، عندها يمكن للمستخدم منع التطبيق من استقبال الإشعارات البعيدة بشكلٍ مؤقتٍ عن طريق قسم الإشعارات في إعدادات التطبيق، ويمكن دائمًا إعادة تسجيل التطبيقات التي تم إلغاء تسجيلها بهذه الطريقة.

checkPermissions()‎

PushNotificationIOS.checkPermissions(callback);

يُستخدم لرؤية أذونات الدفع (push) المفعّلة حاليًا.

المعاملات

الاسم النوع مطلوب الوصف
callback دالّة (function) نعم انظر أسفل الجدول

يتم استدعاء callback عن طريق الكائن permissions:

  • التنبيه alert (قيمة منطقيّة)
  • الشارة badge (قيمة منطقيّة)
  • الصوت sound (قيمة منطقيّة)

getInitialNotification()‎

PushNotificationIOS.getInitialNotification();

يُعيد هذا التابع وعدًا، وإذا شغِّل التطبيق عن طريق إشعارات الدفع فإن هذا الوعد يُقبل إلى كائن من النوع PushNotificationIOS، وإلا فإنه يُقبل إلى القيمة null.

constructor()‎

constructor(nativeNotif);

لن تحتاج أبدًا إلى استنساخ PushNotificationIOS بنفسك، بل يكفي مراقبة الحدث notification واستدعاء getInitialNotification.

finish()‎

finish(fetchResult);

يتاح هذا التابع للإشعارات البعيدة المستقبلة بواسطة application:didReceiveRemoteNotification:fetchCompletionHandler:‎ حيث يطلَب للتنفيذ عند الانتهاء من معالجة الإشعار البعيد، ويتم تمرير قيمة ناتج الطلبية fetchResult التي تصف ناتج العملية. ويجب طلب هذا المعالج في أقرب فرصةٍ ممكنةٍ، ويمكن الاطلاع على قائمة القيم الممكنة عن طريق PushNotificationIOS.FetchResult. إن لم يُستدعَى هذا التابع، فمن الممكن حدوث اختناقٍ للإشعارات البعيدة الموجودة في الخلفية.

getMessage()‎

getMessage();

هو اسمٌ بديلٌ للتابع getAlert ويستخدم للحصول على الرسالة الرئيسية للإشعار.

getSound()‎

getSound();

يجلب اسم ملف الصوت من الكائن aps.

getCategory()‎

يجلب فئة الإشعار من الكائن aps.

getAlert()‎

getAlert();

يجلب رسالة الإشعار الرئيسية من الكائن aps.

getContentAvailable()‎

getContentAvailable();

يجلب الرقم المتوفر في المحتوى من الكائن aps.

getBadgeCount()‎

getBadgeCount();

يجلب عدد الشارات من الكائن aps.

getData()‎

getData();

يجلب كائن المعطيات من الإشعار.

getThreadID()‎

getThreadID();

يجلب معرِّف المهمّة من الإشعار.

مصادر