Runtime Permission: ما هي الأنواع ومبدأ العمل في Android

المؤلف: IT Sectr نُشر: 2026-05-20 وقت القراءة: 8 دق

Runtime Permission هي آلية لطلب الأذونات أثناء تشغيل التطبيق، تم تقديمها في Android 6.0 (API 23). على عكس منح الأذونات عند التثبيت، تسمح أذونات وقت التشغيل للمستخدم بمنح أو إلغاء الوصول إلى البيانات الحساسة (الكاميرا، الموقع الجغرافي، جهات الاتصال) في أي وقت. وفقًا لـ Android Developers (2026)، أكثر من 85% من التطبيقات في Google Play تستخدم إذن وقت تشغيل واحد على الأقل.

أهم النقاط

  • Runtime Permission هي آلية Android تتطلب موافقة صريحة من المستخدم للوصول إلى البيانات الحساسة.
  • الأذونات الخطرة هي مجموعة من الأذونات التي تتطلب طلب وقت تشغيل (الكاميرا، الميكروفون، الموقع الجغرافي، جهات الاتصال).
  • الأذونات العادية تتم الموافقة عليها تلقائيًا من قبل النظام ولا تتطلب طلب وقت تشغيل (INTERNET، ACCESS_NETWORK_STATE).
  • الأذونات لمرة واحدة هي أذونات جلسة واحدة، تم تقديمها في Android 11، يتم إلغاؤها تلقائيًا عند إغلاق التطبيق.
  • shouldShowRequestPermissionRationale هو مؤشر يحدد ما إذا كان يحتاج إلى إظهار شرح للمستخدم قبل الطلب.

ما هو Runtime Permission؟

Runtime Permission هو نموذج أمان Android حيث يطلب التطبيق الوصول إلى البيانات الحساسة في اللحظة التي تكون فيها هذه الوظيفة ضرورية فعليًا للمستخدم. قبل Android 6.0، كانت جميع الأذونات تُمنح عند تثبيت التطبيق، ولم يتمكن المستخدم من إلغائها دون إزالة التطبيق بالكامل.

تطور نموذج أذونات Android

قبل Android 6.0، كان المستخدم يرى قائمة بجميع الأذونات عند التثبيت ويمكنه إما الموافقة على الكل أو رفض التثبيت. أظهرت دراسة عام 2015 أن 87% من المستخدمين لا يقرؤون قائمة الأذونات عند التثبيت. Android 6.0 قدم أذونات وقت التشغيل، مقسمة الأذونات إلى عادية (تلقائية) وخطرة (تتطلب طلبًا). Android 11 أضاف الأذونات لمرة واحدة — الإلغاء التلقائي بعد إغلاق التطبيق. Android 13 قدم منتقي الصور وإشعارات الدفع كأذونات وقت تشغيل منفصلة.

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

كيف يعمل Runtime Permission في Android؟

Runtime Permission يعمل من خلال حوار نظام يتم استدعاؤه بواسطة طريقة requestPermissions() (AndroidX — ActivityResultLauncher). يعرض النظام حوارًا قياسيًا مع شرح، ويختار المستخدم «السماح» أو «الرفض». بعد الرد، يتم استدعاء رد اتصال حيث يعالج التطبيق قرار المستخدم.

طلب الإذن عبر ActivityResultLauncher

kotlin
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    requestPermissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
            if (isGranted) {
                startCamera()
            } else {
                showPermissionDeniedDialog()
            }
        }
}

private fun checkCameraPermission() {
    when {
        ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED -> {
            startCamera()
        }
        ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) -> {
            showRationaleDialog { requestPermissionLauncher.launch(Manifest.permission.CAMERA) }
        }
        else -> {
            requestPermissionLauncher.launch(Manifest.permission.CAMERA)
        }
    }
}

طريقة shouldShowRequestPermissionRationale تعيد true إذا كان المستخدم قد رفض الطلب مرة واحدة بالفعل. في هذه الحالة، يُوصى بإظهار حوار مع شرح لماذا يحتاج التطبيق إلى الإذن، ثم إعادة الطلب فقط. هذا يزيد من احتمالية موافقة المستخدم بنسبة 30–40% (بيانات Google I/O 2024).

أنواع الأذونات في Android

Android يصنف جميع الأذونات إلى عدة مستويات حماية: عادية وخطرة وتوقيع وخاصة. الأذونات العادية تُمنح تلقائيًا عند التثبيت. الأذونات الخطرة تتطلب طلب وقت تشغيل. أذونات التوقيع متاحة فقط للتطبيقات الموقعة بنفس الشهادة.

مجموعات الأذونات الخطرة

المجموعةالأذوناتمستوى API
CAMERACAMERAAPI 23+
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATIONAPI 23+ (الخلفية — API 29+)
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, READ_MEDIA_IMAGES (API 33+)API 23+ (تغييرات في API 33)
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOGAPI 23+
MICROPHONERECORD_AUDIOAPI 23+
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSAPI 23+
NOTIFICATIONSPOST_NOTIFICATIONSAPI 33+

الأذونات الخاصة (SYSTEM_ALERT_WINDOW، WRITE_SETTINGS، MANAGE_EXTERNAL_STORAGE) تتطلب انتقالًا إضافيًا إلى إعدادات النظام عبر Settings.ACTION_MANAGE_OVERLAY_PERMISSION. لا يمكن طلب هذه الأذونات من خلال حوار النظام القياسي وتتطلب إجراءً صريحًا من المستخدم في شاشة الإعدادات.

طلب الأذونات في Android 12+

Android 12 قدم تغييرات كبيرة في نموذج أذونات وقت التشغيل. الأذونات لمرة واحدة تسمح بمنح الوصول إلى الكاميرا أو الميكروفون أو الموقع الجغرافي لجلسة واحدة فقط. بمجرد إغلاق المستخدم للتطبيق، يتم إلغاء الإذن تلقائيًا. مؤشرات الخصوصية هي مؤشرات خضراء في شريط الحالة تظهر عند استخدام التطبيق للكاميرا أو الميكروفون.

معالجة الأذونات لمرة واحدة

kotlin
// Android 12+ — معالجة الإذن لمرة واحدة للموقع الجغرافي
private fun checkLocationPermission() {
    val permissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->

        val fineLocationGranted = permissions[Manifest.permission.ACCESS_FINE_LOCATION]
        val coarseLocationGranted = permissions[Manifest.permission.ACCESS_COARSE_LOCATION]

        if (fineLocationGranted == true) {
            showUserLocation()
        } else {
            showLocationDisabledDialog()
        }
    }

    permissionLauncher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}

// التحقق مما إذا كان الإذن قد تم إلغاؤه بواسطة النظام (Android 12+)
class PermissionReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_PERMISSION_REVOCATION) {
            handleRevokedPermission(intent.getStringExtra(Intent.EXTRA_REVOKED_PERMISSION))
        }
    }
}

Android 13 أضاف إذن POST_NOTIFICATIONS إلى المجموعة الخطرة، مما يتطلب طلبًا صريحًا لإرسال إشعارات الدفع. Android 14 قدم قيودًا على الموقع الجغرافي في الخلفية: يجب أن يحصل التطبيق على موافقة صريحة من المستخدم في كل مرة يطلب فيها موقع الخلفية. منتقي الصور (API 33+) استغنى عن الحاجة إلى READ_EXTERNAL_STORAGE لاختيار الصور.

معالجة رفض المستخدم

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

استراتيجية معالجة الرفض

بعد الرفض الأول، يجب على التطبيق إظهار حوار تبرير — شرحه الخاص لسبب ضرورة الإذن. إذا رفض المستخدم مرة أخرى، يجب توجيهه إلى شاشة إعدادات التطبيق عبر Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Material 3 يوصي باستخدام PermissionRequestBottomSheet لتجربة مستخدم أكثر طبيعية.

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

توصيات الأمان

أذونات وقت التشغيل ليست مجرد آلية تقنية، بل هي أيضًا عنصر ثقة المستخدم في التطبيق. طلب الإذن في وقت غير مناسب (على سبيل المثال، عند التشغيل الأول) يقلل بشكل كبير من احتمالية الموافقة. Google Play Store يحلل تكرار وسياق طلبات الأذونات: التطبيقات ذات الطلبات العدوانية تحصل على مراكز أقل في البحث.

قواعد طلب الأذونات

السياق — اطلب الإذن مباشرة قبل تنفيذ الإجراء الذي يتطلبه. الحد الأدنى — اطلب فقط الأذونات الضرورية فعليًا لعمل الميزة. الشفافية — اشرح للمستخدم سبب الحاجة إلى الإذن قبل حوار النظام. الإلغاء — اشترك في ACTION_PERMISSION_REVOCATION لمعالجة إلغاء الإذن بشكل صحيح في وقت التشغيل.

لاختبار أذونات وقت التشغيل، استخدم أوامر adb: adb shell pm revoke <package> android.permission.CAMERA تسمح بمحاكاة إلغاء الإذن دون إعادة تثبيت التطبيق. Espresso و UiAutomator يدعمان اختبار حوارات الأذونات عبر GrantPermissionRule. دمج هذه الأدوات في خط أنابيب CI/CD إلزامي للتطبيقات ذات أذونات وقت التشغيل.

تدقيق الأذونات في Google Play Console

Google Play Console يوفر قسم تدقيق الأذونات، حيث يمكن للمطورين رؤية عدد مرات طلب الأذونات، ونسبة المستخدمين الذين يمنحون الوصول، والأذونات التي تم إلغاؤها. يساعد تحليل هذه البيانات في تحديد الطلبات غير الفعالة وتحسين تجربة المستخدم. على سبيل المثال، إذا كان أقل من 40% من المستخدمين يمنحون الموقع الجغرافي، فكر في مراجعة توقيت الطلب وإضافة تبرير أكثر إقناعًا.

استخدام Android Vitals لمراقبة ANR (التطبيق لا يستجيب) المرتبط بالأذونات هو أيضًا أمر بالغ الأهمية. إذا تم تنفيذ طلب الإذن على الخيط الرئيسي أو قام حوار النظام بحظر واجهة المستخدم، فقد يتسبب ذلك في ANR على الأجهزة البطيئة. انقل التحقق من الأذونات وطلبها إلى خيط منفصل أو استخدم coroutines في Kotlin للمعالجة غير المتزامنة لتجنب حظر واجهة المستخدم.

الأسئلة الشائعة

كيف أميز الرفض لمرة واحدة عن الرفض الدائم؟

shouldShowRequestPermissionRationale يعيد false في حالة الرفض الدائم (عندما اختار المستخدم «عدم السؤال مرة أخرى»). الطريقة تعيد true في حالة الرفض لمرة واحدة، مما يسمح بإظهار حوار تبرير. إذا أعادت الطريقة false، الخيار الوحيد هو توجيه المستخدم إلى إعدادات النظام.

هل يمكن طلب أذونات متعددة في وقت واحد؟

نعم، ActivityResultContracts.RequestMultiplePermissions يسمح بطلب مجموعة من الأذونات في استدعاء واحد. سيعرض النظام حوارات متتالية لكل إذن. يُوصى بتجميع الأذونات المرتبطة منطقيًا (مثل CAMERA و RECORD_AUDIO لتسجيل الفيديو)، ولكن لا تطلب أكثر من 2–3 في المرة الواحدة.

كيف تعمل أذونات وقت التشغيل على Android TV و Wear OS؟

Android TV يستخدم نفس نموذج أذونات وقت التشغيل مع عرض الحوارات على شاشة التلفزيون. Wear OS الإصدار 3+ يدعم أذونات وقت التشغيل، ولكن يتم عرض الحوارات على الساعة. بالنسبة لـ Android Auto، يتم طلب جميع الأذونات على الهاتف، ويتلقى نظام السيارة الأذونات المعتمدة بالفعل عبر اتصال جسر.

ما هي تغييرات الأذونات المتوقعة في Android 16؟

وفقًا للمعلومات الأولية، Android 16 يقدم «انتهاء صلاحية الإذن» للأذونات لمرة واحدة مع إلغاء تلقائي بعد 24 ساعة. من المتوقع أيضًا تشديد متطلبات الموقع في الخلفية وتوسيع قائمة الأذونات الخطرة لفئات جديدة (أجهزة استشعار البيئة، مسح Wi-Fi). ستظهر التفاصيل الدقيقة في الربع الثالث من 2027.

ما الفرق بين إذن وقت التشغيل في Android و iOS؟

iOS لا يدعم «الأذونات العادية» — يتم طلب كل إذن بشكل صريح من خلال حوار النظام. يمكن للمستخدم إلغاء الإذن في أي وقت من خلال الإعدادات. الفرق الرئيسي هو أن iOS لا يتحقق مسبقًا من حالة الإذن عبر ما يعادل checkSelfPermission: يعرض النظام تلقائيًا حوارًا عند أول وصول إلى واجهة برمجة تطبيقات محمية.

الخلاصة

  • Runtime Permission هي آلية لطلب البيانات الحساسة في وقت الاستخدام الفعلي، تم تقديمها في Android 6.0.
  • الأذونات الخطرة تتطلب حوار نظام صريح؛ الأذونات العادية تتم الموافقة عليها تلقائيًا.
  • الأذونات لمرة واحدة (Android 12+) تُلغى عند إغلاق التطبيق، مما يعزز خصوصية المستخدم.
  • shouldShowRequestPermissionRationale يحدد ما إذا كان هناك رفض سابق ويساعد في اختيار استراتيجية الطلب.
  • Android 13 أضاف POST_NOTIFICATIONS كإذن وقت تشغيل؛ Android 14 شدد متطلبات الموقع الجغرافي في الخلفية.
  • منتقي الصور (API 33+) يستغني عن الحاجة إلى READ_EXTERNAL_STORAGE لاختيار الصور.
  • قدم دائمًا بديلاً عند رفض المستخدم — طريقة بديلة لإدخال البيانات أو الاختيار اليدوي.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا