معالجة الأخطاء، iOS SDK
لإنشاء تطبيق قوي يُعتمد عليه، يجب التأكد من استجابة التطبيق بشكل صحيح للأخطاء التي يُرجعها فيسبوك. يتناول هذا الدليل الميزات التي تحتوي عليها Facebook SDK لنظام iOS والتي تساعدك على القيام بذلك.
أفضل الممارسات العامة
تحدد كل FBSDK Kit ملف FBSDK*Constants.h والذي يتمثل دوره في تحديد رموز الأخطاء المرتبطة بتلك المجموعة.
والأمر الأكثر أهمية هو أن Facebook SDK تقوم بنشر المفاتيح التي يتم تحديدها في FBSDKConstants.h في FBSDKCoreKit.framework في قاموس userInfo الخاص بـ NSErrors إن أمكن.
ينبغي عرض الرسائل المترجمة فقط كأخطاء. والاستثناء الوحيد هو طلبات Graph API التي تستخدم الإصلاح التلقائي للأخطاء كما هو مبين أدناه.
معالجة الأخطاء وإصلاحها
بدءًا من الإصدار v4.0 من SDK، أصبح استخراج معلومات وكائنات الأخطاء وتفسيرها أكثر سهولة. ويشتمل هذا على ما يلي:
NSError- تعرض SDK هذه الكائنات لاستدعاءات الطلبات ويكون من الأسهل تفسيرهاNSErrorRecoveryAttempting- توفر SDK البيانات فيNSErrorوالتي يكون من الأسهل استخراجها وتتوافق مع البروتوكول غير الرسميNSErrorRecoveryAttempting
تشتمل كائنات NSError على قواميس userInfo والتي تحتوي على المفاتيح التالية:
| الخطأ | الوصف |
|---|---|
| رسالة خطأ للمطور |
| رسالة مترجمة تظهر للمستخدم، إن وُجدت |
| عنوان مترجَم يظهر للمستخدم، إن وُجد |
| تعداد يوضح فئة الخطأ، مثل مؤقت أو قابل للإصلاح أو غير ذلك |
| رمز خطأ Graph API |
| رمز خطأ Graph API الفرعي |
| رمز حالة HTTP الذي ترجعه Graph API |
| استجابة JSON الأولية من Graph API |
يمكن أن تحتوي مثيلات NSError أيضًا على بيانات متوافقة مع البروتوكول غير الرسمي NSErrorRecoveryAttempting. إذا كانت الفئة (FBSDKGraphRequestErrorCategoryKey) مؤقتة أو قابلة للإصلاح، يحتوي الخطأ userInfo على:
| الخطأ | الوصف |
|---|---|
| كائن محاولة إصلاح يتوافق مع |
| رسالة مترجمة تظهر للمستخدم توضح عملية إصلاح الأخطاء |
| مصفوفة من العناوين المترجمة للأزرار التي توضح خيارات الإصلاح |
معالجة أخطاء تسجيل الدخول
نادرًا ما تحدث الأخطاء في دفق تسجيل الدخول العادي وذلك لأن مربع حوار تسجيل الدخول يتم تقديمه من فيسبوك عبر عملية تسجيل دخول موحد توجه المستخدمين لحل أي أخطاء تواجههم. هناك استثناءان يجب أخذهما بالاعتبار:
- في حالة تحديد سلوك تسجيل الدخول ليكون
FBSDKLoginBehaviorSystemAccount - التعامل مع الأذونات المرفوضة
FBSDKLoginBehaviorSystemAccount
في حالة FBSDKLoginBehaviorSystemAccount، يتم توفير واجهة المستخدم من خلال iOS في الأساس. نتيجة لذلك، يمكن أن تظهر أخطاء تتطلب من المستخدم اتخاذ إجراء لحلها مثل تغيير كلمة السر على موقع www.facebook.com أو في حالة تعطيل حسابه لأسباب أمنية.
في مثل تلك الحالات، توفر API تسجيل الدخول مثيل NSError تم ترميزه بشكل مناسب (بالمفاتيح المترجمة المذكورة بالأعلى) يمكن عرضه. يرجى ملاحظة أن FBSDKLoginBehaviorSystemAccount لا يعبر عن سلوك تسجيل الدخول الافتراضي، وأن سلوكيات تسجيل الدخول الأخرى تقدم الرسائل المناسبة في مربع حوار تسجيل الدخول تلقائيًا.
التعامل مع الأذونات المرفوضة
لا تعتبر هذه الحالة خطأً من الناحية الفنية لأنه لا يتم إرجاع مثيل NSError، إلا أنه يجب الأخذ في الاعتبار أحد السيناريوهات المهمة. يوفر FBSDKAccessToken خاصية declinedPermissions والتي توضح كل الأذونات التي رفضها المستخدم لتطبيقك طوال فترة استخدامه. وذلك يشمل أي عمليات رفض على الأجهزة الأخرى.
ومن الخصائص الأكثر تناسبًا خاصية declinedPermissions على FBDKLoginResult والتي يتم إرجاعها مع استدعاء FBSDKLoginManager أو تفويض FBSDKLoginButton. يعكس FBSDKLoginResult.declinedPermissions الأذونات التي تم رفضها في الطلب المرتبط ويعتبر المكان الأنسب للتحقق مما إذا كان المستخدم قد رفض بعض الأذونات التي طلبتها.
إذا رفض المستخدم أذونات معينة، يجب عدم إعادة المطالبة بها مرة أخرى في الوقت نفسه. ويجب أن يستمر تطبيقك في العمل والقيام بوظيفته. ربما ترى أن توفير دليل أو واجهة مستخدم تشرح الميزات الناتجة عن منح ذلك الإذن مع الامتناع عن طلب ذلك مرة أخرى إلا في حالة قيام المستخدم بتنفيذ أحد الإجراءات التي تحتاج إليه.
معالجة أخطاء Graph API
يمكن أن تصادف أنواع مختلفة من الأخطاء عند استخدام Graph API مثل:
- تقييد الطلب على خوادم فيسبوك
- معلمات مفقودة
- أذونات غير كافية
الأمر الأهم من ذلك هو احتمال اتخاذ المستخدمين لإجراءات خارج تطبيقك تؤدي إلى تغيير تصريح رموز الوصول وبالتالي ينتج عن ذلك خطأ في Graph API
- إزالة تطبيقك من إعدادات التطبيق على فيسبوك
- إلغاء تصريح أذونات تطبيقك
- تغيير كلمة سر فيسبوك
للمساعدة على الخروج بحل لهذه السيناريوهات، تقوم SDK بنشر مفاتيح إضافية في NSError userInfo:
| الخطأ | الوصف |
|---|---|
| تعداد يوضح فئة الخطأ. ويشتمل على خطأ مؤقت أو قابل للإصلاح أو غير ذلك. |
| رمز خطأ Graph API. |
| رمز خطأ Graph API الفرعي. |
| رمز حالة HTTP الذي ترجعه Graph API. |
| استجابة JSON الأولية من Graph API. |
على سبيل المثال، للتحقق مما إذا كان الخطأ متعلقًا بالأذونات، يمكنك فحص قيمة الرمز لمعرفة ما إذا كانت تساوي 200. يرجى الرجوع إلى استخدام Graph API، معالجة الأخطاء.
إصلاح الأخطاء
يمكن أن تحتوي مثيلات NSError أيضًا على بيانات متوافقة مع البروتوكول غير الرسمي NSErrorRecoveryAttempting. على وجه التحديد، إذا كانت الفئة (FBSDKGraphRequestErrorCategoryKey) مؤقتة أو قابلة للإصلاح، يحتوي
الخطأ userInfo على:
| الخطأ | الوصف |
|---|---|
| كائن محاولة إصلاح يتوافق مع |
| رسالة مترجمة تظهر للمستخدم توضح الإصلاح. |
| مصفوفة من العناوين المترجمة للأزرار التي توضح خيارات الإصلاح. |
يتيح لك ذلك سهولة إمكانية استخراج كائن محاولة إصلاح الخطأ لإصلاح الخطأ وتجاوزه، وهي الخطوة التي يمكن أن يترتب عليها المطالبة بواجهة مستخدم للمستخدم. على سبيل المثال، في حالة انتهاء صلاحية رمز الوصول، فإن كائن محاولة الإصلاح يسأل المستخدم عما إذا كان يريد تسجيل الدخول مرة أخرى. يقوم كائن محاولة الإصلاح بالإعلام بتفويضها عند نجاح أو فشل الإصلاح. يرجى الرجوع إلى وثائق Apple حول إصلاح الأخطاء.
لتسهيل الاشتراك في أفضل الممارسات، توفر SDK FBSDKGraphErrorRecoveryProcessorوالذي يمكنه معالجة الأخطاء نيابةً عنك، مثل عرض رسائل التنبيه ومربعات الحوار تلقائيًا. يرجى الرجوع إلى المستندات المرجعية للاطلاع على التفاصيل.
والأمر الأكثر أهمية، هو أن FBSDKGraphRequests غير المجمّعة تقوم تلقائيًا باستخدام FBSDKGraphErrorRecoveryProcessor بحيث يتم تلقائيًا إعادة محاولة تجاوز الأخطاء المؤقتة أو القابلة للإصلاح الناجحة (مرة واحدة). يمكنك تعطيل ذلك من خلال تعيين -[FBSDKGraphRequest setGraphErrorRecoveryDisabled:YES] (أو التعطيل بشكل عام في FBSDKSettings)
أخطاء المشاركة
تتبع واجهات API لـ ShareKit المعلومات السابقة مع الأخذ في الاعتبار البيانات الموجودة في قواميس NSError userInfoوقد تقوم بتغليف الأخطاء ولذلك ينبغي عليك مراعاة فحص مفتاح NSUnderlyingError. بالإضافة إلى ذلك، يقوم FBSDKShareAPI باستخدام FBSDKGraphRequests داخليًا والذي يلي سلوك إصلاح الخطأ المبين أعلاه. إذا لم يكن ذلك مطلوبًا، يجب تعطيل خاصية إصلاح الأخطاء بوجه عام عبر [FBSDKSettings setGraphErrorRecoveryDisabled:YES].