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

من موسوعة حسوب
أنشأ الصفحة ب' = PushNotificatonIOS = <blockquote>'''مهملة'''. استخدم [https://github.com/react-native-community/react-native-push-notification-ios ‎@react-native-communi...'
 
طلا ملخص تعديل
 
(11 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الواجهة PushNotificatonIOS في React Native}}</noinclude><blockquote>'''مهملة:''' استخدم إحدى [https://reactnative.directory/?search=push+notification الحزم من المجتمع] بدلًا منها.</blockquote><blockquote>'''خاص بالمشاريع المكتوبة بشفرة Native'''


= PushNotificatonIOS =
هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة 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]، وكذلك النّظام من جانب الخادم  لتهيئتها، وتشغيلها.
<blockquote>'''مهملة'''. استخدم [https://github.com/react-native-community/react-native-push-notification-ios ‎@react-native-community/push-notification-ios] بدلًا منها.</blockquote>


=== '''خاصٌّ بالمشاريع المكتوبة بشفرة Native''' ===
في إصدارات React Native  0.60.وما بعده:
هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة 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 وما بعده:


* تقوم خاصّية الرّبط التّلقائيّ 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: سطر 21:


* [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 lang="javascript">
** يجب إضافة <code>libRCTPushNotification.a</code> إلى <code>Link Binary With Libraries</code>  
node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj
</syntaxhighlight>
** يجب إضافة ما يلي إلى <code>Link Binary With Libraries</code>: <code>libRCTPushNotification.a</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: سطر 60:
</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، والذي بدوره يمكٍّن الإعدادات المطلوبة تلقائيًا.
__TOC__


== التّوابع ==
== التوابع ==


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


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 99: سطر 96:
!الوصف
!الوصف
|-
|-
|details
|<code>details</code>
|كائن
|كائن (object)
object
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 108: سطر 104:


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


=== <code>scheduleLocalNotification()‎</code> ===
=== <code>scheduleLocalNotification()‎</code> ===
سطر 121: سطر 117:
</syntaxhighlight>يقوم بجدولة localNotification لعرضها مستقبلًا.
</syntaxhighlight>يقوم بجدولة localNotification لعرضها مستقبلًا.


==== المعاملات (parameters) ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 128: سطر 124:
!الوصف
!الوصف
|-
|-
|details
|<code>details</code>
|كائن
|كائن (object)
object
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 139: سطر 134:
* <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: سطر 145:
<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> ===
سطر 162: سطر 157:
</syntaxhighlight>يعطي قائمةً بإشعارات التطبيقات التي لا تزال ظاهرةً في مركز الإشعارات.
</syntaxhighlight>يعطي قائمةً بإشعارات التطبيقات التي لا تزال ظاهرةً في مركز الإشعارات.


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


* <code>identifier</code>: معرِّف هذا الإشعار.
* <code>identifier</code>: معرِّف هذا الإشعار.
سطر 189: سطر 183:
</syntaxhighlight>يزيل الإشعارات المخصّصة من مركز الإشعارات.
</syntaxhighlight>يزيل الإشعارات المخصّصة من مركز الإشعارات.


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 196: سطر 190:
!الوصف
!الوصف
|-
|-
|identifires
|<code>identifires</code>
|مصفوفة
|مصفوفة (array)
array
|نعم
|نعم
|مصفوفة من معرِّفات الإشعارات
|مصفوفة من معرِّفات الإشعارات
سطر 208: سطر 201:
</syntaxhighlight>يضع رقم شارة (badge number) أيقونة التّطبيق على الشاشة الرئيسية (home screen).
</syntaxhighlight>يضع رقم شارة (badge number) أيقونة التّطبيق على الشاشة الرئيسية (home screen).


==== المعاملات (parameters) ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 215: سطر 208:
!الوصف
!الوصف
|-
|-
|number
|<code>number</code>
|رقم
|عدد (number)
number
|نعم
|نعم
|رقم شارة أيقونة التطبيق
|رقم شارة أيقونة التطبيق
سطر 227: سطر 219:
</syntaxhighlight>يجلب رقم الشّارة الحاليّ لأيقونة التطبيق على الشاشة الرئيسية (home screen).
</syntaxhighlight>يجلب رقم الشّارة الحاليّ لأيقونة التطبيق على الشاشة الرئيسية (home screen).


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 234: سطر 226:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالّة
|دالّة (function)
function
|نعم
|نعم
|الدالّة التي سيمرّر لها رقم الشّارة الحاليّ
|الدالّة التي سيمرّر لها رقم الشّارة الحاليّ
سطر 244: سطر 235:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.cancelLocalNotifications(userInfo);
PushNotificationIOS.cancelLocalNotifications(userInfo);
</syntaxhighlight>يلغي جميع الإشعارات المحليَّة.
</syntaxhighlight>يلغي جميع الإشعارات المحليَّة، ويمكن بشكلٍ اختياريٍّ تقييده بقائمةٍ من الإشعارات الملغيّة المحدّدة في المُعامل <code>userInfo</code>.
 
ويمكن بشكلٍ اختياريٍّ تقييده بقائمةٍ من الإشعارات الملغيّة المحدّدة في المُعامل <code>userInfo</code>.


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
!النوع
!النوع
!مطلوب
!مطلوب
!الوصف
|-
|-
|userinfo
|<code>userinfo</code>
|كائن
|كائن (object)
object
|لا
|لا
|
|}
|}


سطر 274: سطر 260:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|الدّالة التي سيمرّر لها مصفوفةً من الكائنات التي تصف الإشعارات المحليّة
|الدّالة التي سيمرّر لها مصفوفةً من الكائنات التي تصف الإشعارات المحليّة
سطر 286: سطر 271:
</syntaxhighlight>يُلحِق المراقب (listener) بأحداث الإشعارات المحليّة أو البعيدة عندما يعمل التطبيق في الواجهة أو الخلفيّة.
</syntaxhighlight>يُلحِق المراقب (listener) بأحداث الإشعارات المحليّة أو البعيدة عندما يعمل التطبيق في الواجهة أو الخلفيّة.


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 293: سطر 278:
!الوصف
!الوصف
|-
|-
|type
|<code>type</code>
|سلسلة نصية
|سلسلة نصية (string)
string
|نعم
|نعم
|صنف الحدث
|صنف الحدث
|-
|-
|handler
|<code>handler</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|المراقب
|المراقب
سطر 310: سطر 293:
* <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> ===
سطر 317: سطر 300:
</syntaxhighlight>يزيل معالج الحدَث، ويجب أن يتم ذلك في <code>componentWillUnmount</code> لمنع تسرّب المعلومات من الذاكرة.
</syntaxhighlight>يزيل معالج الحدَث، ويجب أن يتم ذلك في <code>componentWillUnmount</code> لمنع تسرّب المعلومات من الذاكرة.


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 324: سطر 307:
!الوصف
!الوصف
|-
|-
|type
|<code>type</code>
|سلسلة نصية
|سلسلة نصية (string)
string
|نعم
|نعم
|نوع الحدث
|نوع الحدث
|-
|-
|handler
|<code>handler</code>
|دالة
|دالة (function)
function
|نعم
|نعم
|مراقِب
|مراقِب
سطر 342: سطر 323:
</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>.
سطر 350: سطر 331:
ويعيد هذا التابع وعدًا (promise) والذي يُقبل (resolve) عند قيام المستخدم بقبول الأذونات أو رفضها أو إذا رفضت الأذونات مسبقًا، سيقبل الوعد إلى الحالة الحالية للأذونات.  
ويعيد هذا التابع وعدًا (promise) والذي يُقبل (resolve) عند قيام المستخدم بقبول الأذونات أو رفضها أو إذا رفضت الأذونات مسبقًا، سيقبل الوعد إلى الحالة الحالية للأذونات.  


==== المعاملات ====
'''المعاملات:'''
{| class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
سطر 357: سطر 338:
!الوصف
!الوصف
|-
|-
|permission
|<code>permission</code>
|مصفوفة
|مصفوفة (array)
array
|لا
|لا
|تنبيه أو شارة أو صوت
|تنبيه أو شارة أو صوت
سطر 381: سطر 361:
!الوصف
!الوصف
|-
|-
|callback
|<code>callback</code>
|دالّة
|دالّة (function)
function
|نعم
|نعم
|انظر أسفل الجدول
|انظر أسفل الجدول
سطر 389: سطر 368:
يتم استدعاء <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> ===
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
PushNotificationIOS.getInitialNotification();
PushNotificationIOS.getInitialNotification();
</syntaxhighlight>يُعيد هذا التابع وعدًا، وإذا شغِّل التطبيق عن طريق إشعارات الدفع فإن هذا الوعد يُقبل إلى كائن من النوع <code>PushNotificationIOS</code>، وإلا فإنه يُقبل إلى القيمة <code>null</code>.
</syntaxhighlight>يُعيد هذا التابع وعدًا، وإذا شغِّل التطبيق عن طريق إشعارات الدفع فإن هذا الوعد يُقبل إلى كائن من النوع <code>PushNotificationIOS</code>، وإلا فسيُقبل إلى القيمة <code>null</code>.


=== <code>constructor()‎</code> ===
=== <code>constructor()‎</code> ===
<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> ===
سطر 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]]
[[تصنيف:React Native API]]

المراجعة الحالية بتاريخ 15:11، 9 أكتوبر 2021

مهملة: استخدم إحدى الحزم من المجتمع بدلًا منها.

خاص بالمشاريع المكتوبة بشفرة 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
      
    • يجب إضافة ما يلي إلى Link Binary With Libraries: libRCTPushNotification.a

وأخيرًا يجب إكمال 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 لعرضها مستقبلًا.

المعاملات:

الاسم النوع مطلوب الوصف
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).

المعاملات:

الاسم النوع مطلوب الوصف
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();

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

مصادر