محتويات الدورة

React Native / أنظمة أصلية شاملة وأدلة الإصدار / الدرس 16

الأذونات وAppState والثقة في الجلسة

افصل تسوية الحالة من أوامر المستخدم، واحفظ ملكية الحساب عبر الانقطاع وتغير الأذونات.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • نتيجة الإذن ليست نتيجة العملية
  • اطلب الإذن ضمن تدفق ميزة مفهوم فقط
  • اربط الحالات بخيارات تعاف صريحة

نتيجة الإذن ليست نتيجة العملية

قد يملك التطبيق إذنا وتغيب قدرة الجهاز أو تفشل العملية. وقد يسمح الرفض ببديل مفيد. مثّل فئات الإذن ونتائج القدرة مستقلة لا بعلم نجاح واحد. إعداد المنصة وتفويض التشغيل وتفويض الخادم حدود مختلفة. يستخدم المقتطف الأول إذن Android بعد فعل ميزة صريح، ويعيد unsupported لغيره. ولا يمنح إذن iOS أو ينشئ تجريد أذونات عابرا للمنصات وحده. لا ينفذ طلب إذن في بيئة التأليف.

اطلب الإذن ضمن تدفق ميزة مفهوم فقط

تطلب الوحدة الأولى إذن الكاميرا كتوضيح لتكامل Android. يعلن الهدف الفعلي الإعداد الأصلي المناسب ويتبع متطلبات نظامه الحالية. ينبغي أن يفهم المستخدم الغرض والنتيجة بعد الرفض. لا تستدع request في العرض أو مع كل تفعيل AppState؛ فتختلف قراءة الحالة عن طلب الموافقة. تعرض PermissionsAndroid النتائج granted وdenied وnever_ask_again؛ فاحفظها ولا تكرر الطلب بعد رفض نهائي. لا يقدم المقتطف عرض كاميرا أو تعديل manifest أو تشغيل جهاز.

jsx وحدة توضيحية من React Native؛ تتطلب بيئة التطبيق المتوافقة المبيّنة.
import {Platform, PermissionsAndroid} from 'react-native';
export async function requestCameraForFeature() {
  if (Platform.OS !== 'android') return 'unsupported';
  return PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.CAMERA);
}
الناتج المتوقع
A compatible Android host returns a documented permission status; other platforms return unsupported.

مقتطف الوحدة الأصلية غير منفذ. ولا يثبت الإذن فتح جلسة كاميرا أو التقاط صورة.

اربط الحالات بخيارات تعاف صريحة

يربط البرنامج الثاني الحالات المصطنعة بخطوات التطبيق التالية. يقود denied إلى شرح، وnever_ask_again إلى تعاف من الإعدادات لا طلب آلي آخر. تتبع العبارة وآلية التعافي المنصة والميزة الفعليتين. وتبقى المجهولة مجهولة لا مفوضة. تُختبر السياسة النقية في Node دون نافذة نظام، ولا تتحقق من الواجهة الأصلية أو الإعداد الحالي أو نجاح العملية التالية. احفظ هذه الحدود مع النموذج.

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function permissionStep(status) {
  switch (status) {
    case 'granted': return 'perform-feature';
    case 'denied': return 'explain-denial';
    case 'never_ask_again': return 'offer-settings-recovery';
    case 'unsupported': return 'show-fallback';
    default: return 'unknown-status';
  }
}
console.log(permissionStep('never_ask_again'));
console.log(permissionStep('denied'));
console.log(permissionStep('future-value'));
الناتج المتوقع
offer-settings-recovery
explain-denial
unknown-status

لا تساوي السياسة المجهول بالإذن ولا تطلب النظام أو تفتح إعداداته فعليا.

يسوّي الاستئناف الحالة ولا يعيد النية

قد تتقادم حالة الإذن والتوثيق والتوافر المخزن عندما يعود التطبيق نشطا. حدّث الحالة المعنية بعملية لها مالك واضح، مع قواعد تمنع العمل المكرر وتتحقق من حداثة النتائج. لا تعِد حجزا أو أمرا حساسا تلقائيا لمجرد تغير الظهور. ليست AppState مجدول خلفية دائما أو ضمان وصول كل حدث أخير قبل إنهاء العملية. احفظ المسودات المهمة بسياسة مقصودة. وعند الخروج أبطل حقوق النشر القديمة والمخازن الخاصة؛ وإلا فقد يعرض مكوّن باق رد الحساب السابق المؤجل بعد دخول المستخدم التالي.

أبق الاعتماد والتحقق المعتمد خارج اختصارات الواجهة

التحكم المخفي أو المعطل تغذية راجعة للتفاعل، وليس ضبط وصول للخادم. يجب أن تتحقق الخدمة المعتمدة من الهوية والصلاحية الحاليتين عند تقييم الأمر. لا تضمّن أسرار الخادم ذات الصلاحيات في الحزم أو متغيرات العميل وقت البناء، ولا تسجل الرموز أو الحمولات الخاصة كاملة لتشخيص الإذن. اختبر الرفض وتغير الإعداد والاستئناف والخروج أثناء العمل وجلسة ثانية قبل اكتمال القديم. لا تثبت السياسة النقية التخزين المحمي أو نوافذ الإذن الأصلية أو عمر الجهاز. ولا يُستخدم حساب حقيقي أو مخزن اعتماد أو كاميرا أو خدمة هنا.

الأخطاء الشائعة وإصلاحها

تكرار الاستئناف للحفظ السابق

لماذا يحدث؟
اعتُبر الظهور نية مستخدم متجددة.
كيف تصلحه؟
سوِّ الحالة واشترط أمرا حاليا صريحا.
كيف تتجنب تكراره؟
كرر النشاط أثناء تعليق الحفظ.

اعتبار إذن مجهول مفوضا

لماذا يحدث؟
دُمجت الفئات في بديل متساهل.
كيف تصلحه؟
احفظ المجهول وحالات الرفض الموثقة.
كيف تتجنب تكراره؟
أدرج قيما مستقبلية غير مدعومة في الفحص.

عبور رد متأخر ملكية الحساب

لماذا يحدث؟
أغفلت الحداثة هوية الجلسة.
كيف تصلحه؟
أبطل القديم وقارن ملكية الجلسة قبل النشر.
كيف تتجنب تكراره؟
اخرج وابدأ جلسة أخرى قبل حسم البديل.

اختبر فهمك

1. هل تعني perform-feature أن عملية الكاميرا نجحت؟

اعرض الحل المشروح

لا. تعني أن سياسة الإذن تسمح بالانتقال إلى الخطوة التالية. قد تظل القدرة غير متاحة أو تفشل، ويحتاج التطبيق إلى عقد نتيجة مستقل لتلك العملية. لا يثبت ربط حالة محلي التسجيل الأصلي أو الالتقاط الفعلي.

2. لماذا لا يكفي علم بقاء المكوّن بعد الخروج والدخول؟

اعرض الحل المشروح

يمكن أن يبقى المكوّن بينما يتغير الحساب المخول ببياناته. قارن هوية الجلسة وهوية الطلب معا، وحدّد نطاق المخازن وفقا لذلك. لا يمنح عمر واجهة واحد الحساب التالي حق الوصول إلى نتيجة الحساب السابق المعلقة.

أهم ما تعلمته

  • نتيجة الإذن ليست نتيجة العملية
  • أبق الاعتماد والتحقق المعتمد خارج اختصارات الواجهة

المراجع الرسمية