الإذن العادي في Android — ما هو، مستويات الحماية ومبدأ العمل

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

الإذن العادي (Normal Permission) هو فئة من الأذونات في Android يمنحها النظام تلقائياً دون طلب من المستخدم. وفقاً لـ Android Developer Documentation, 2024، إن «الأذونات العادية» لديها ProtectionLevel normal ولا تتطلب حوار وقت التشغيل، بالمقارنة مع الخطرة. تغطي الوصول إلى الإنترنت وحالة الشبكة والاهتزاز، دون خلق مخاطر لبيانات المستخدم الحساسة.

النقاط الرئيسية

  • Normal Permission هو فئة أذونات Android بمستوى حماية ProtectionLevel normal، تُمنح تلقائياً عند التثبيت.
  • لاستخدامه، يكفي إضافة uses-permission في البيان — لا يظهر حوار للمستخدم.
  • الفرق الرئيسي عن الخطرة هو عدم وجود «طلب وقت التشغيل» وعدم إمكانية الإلغاء عبر الإعدادات.
  • تشمل القائمة INTERNET، ACCESS_NETWORK_STATE، VIBRATE، ACCESS_WIFI_STATE وثوابت نظامية أخرى.
  • يمكن التحقق من مستوى الحماية عبر PackageManager.getPermissionInfo في كود التطبيق.

ما هو الإذن العادي في Android

Normal Permission هو نوع من أذونات النظام في Android بمستوى حماية ProtectionLevel normal، يُمنح للتطبيق تلقائياً عند التثبيت. لا يحتاج المطور لكتابة كود لطلبه — يكفي تصريح الإذن في AndroidManifest.xml. لا يرى المستخدم حوارات ولا يستطيع إلغاء إذن عادي بشكل منفصل، بل فقط بإزالة التطبيق بأكمله.

يصنف نظام Android الأذونات العادية على أنها منخفضة المخاطر — لا تمنح الوصول إلى البيانات الشخصية أو الكاميرا أو الميكروفون. الأمثلة النموذجية: الوصول إلى الإنترنت، التحكم في الاهتزاز، قراءة حالة Wi-Fi. وفقاً لـ Android Security Model (2024)، حوالي 40 بالمائة من جميع أذونات النظام تنتمي إلى الفئة العادية.

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

تاريخ الفئة

ظهر التقسيم إلى أذونات عادية وخطرة في Android 6.0 Marshmallow (API 23). قبل هذه الإصدار، كانت جميع الأذونات تطلب عند التثبيت — كان المستخدم يرى قائمة واحدة ويقبلها أو يرفضها كلها. Normal Permission حافظ على هذا النموذج للعمليات منخفضة المخاطر، بينما انتقلت Dangerous إلى الطلب في وقت التشغيل. هذا التغيير حسن تجربة المستخدم وزاد الأمان في نفس الوقت.

ما هي API التي تتطلب Normal Permission

العديد من API نظام Android تتطلب تصريحاً صريحاً بإذن عادي، حتى لو كان الوصول تلقائياً. على سبيل المثال، تتطلب فئة ConnectivityManager ACCESS_NETWORK_STATE، ويتطلب VibratorService VIBRATE، ويتطلب WifiManager ACCESS_WIFI_STATE. بدون تصريح uses-permission المناسب، ستؤدي استدعاءات API هذه إلى SecurityException.

كيف يعمل ProtectionLevel normal

ProtectionLevel normal هو أدنى مستوى حماية في نظام الأذونات في Android. تُصرح الأذونات بهذا المستوى في البيان، ويتحقق النظام من التصريح عند التثبيت، مما يمنح الوصول دون تدخل المستخدم. لا تظهر عناصر واجهة المستخدم، ولا تُستدعى استدعاءات رجوع.

تعمل آلية التحقق على مستوى PackageManager. أثناء تثبيت APK، يقوم النظام بمسح جميع علامات uses-permission، ويحدد مستوى حماية كل إذن عن طريق مطابقتها مع تعريفات النظام في ملفات permissions.xml، وللمستوى العادي يسجل الوصول فقط. تستغرق العملية ملي ثانية ولا تتطلب تفاعلاً مع واجهة المستخدم.

تعمل خوارزمية المنح على النحو التالي:

  • يقرأ النظام البيان في لحظة تثبيت التطبيق
  • يطابق protectionLevel في /etc/permissions/ على الجهاز
  • إذا كانت القيمة normal — يمنح الوصول تلقائياً
  • يبقى الإذن نشطاً حتى إزالة التطبيق بأكمله

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

Normal Permission مقابل Dangerous Permission

Normal و Dangerous Permission هما فئتان متضادتان من الحماية في Android. الفرق الرئيسي هو في طريقة المنح: تُمنح العادية تلقائياً عند التثبيت، وتتطلب الخطرة موافقة صريحة عبر حوار وقت التشغيل. هذا التمايز مبني في معمارية أمان Android منذ الإصدار 6.0 Marshmallow.

مقارنة الخصائص الرئيسية:

الخاصيةNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
الطلب من المستخدمغير مطلوبحوار وقت التشغيل إلزامي
إمكانية الإلغاءلا، فقط بإزالة التطبيقنعم، عبر الإعدادات في أي وقت
التحقق في الكوددائماً PERMISSION_GRANTEDcheckSelfPermission إلزامي
الأمثلةINTERNET، VIBRATE، ACCESS_NETWORK_STATECAMERA، RECORD_AUDIO، ACCESS_FINE_LOCATION

الفرق في الطلب من المستخدم

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

متى تختار Normal

يجب استخدام Normal في جميع الحالات حيث لا يتعلق الوصول ببيانات حساسة. ACCESS_NETWORK_STATE للتحقق من الاتصال، VIBRATE للاهتزاز اللمسي، INTERNET لطلبات HTTP — كل هذه أذونات عادية. استخدام مستوى dangerous حيث يكفي normal هو ممارسة سيئة، تخلق حوارات غير ضرورية وتقلل ثقة المستخدم في التطبيق.

قائمة الأذونات العادية في Android

Android يحدد عدة عشرات من الأذونات العادية، يتوافق كل منها مع وظيفة نظامية محددة. جميعها متاحة عبر ثوابت فئة Manifest.permission. دون قائمة بالأكثر استخداماً في تطوير التطبيقات.

الثابتالوصولالوصف
INTERNETالشبكةفتح مقابس الشبكة لطلبات HTTP
ACCESS_NETWORK_STATEالشبكةالحصول على معلومات عن حالة الشبكة
ACCESS_WIFI_STATEWi-Fiقراءة معلومات عن اتصالات Wi-Fi
VIBRATEاهتزازالتحكم في محرك الاهتزاز للجهاز
BLUETOOTHBluetoothالاتصال بأجهزة Bluetooth
WAKE_LOCKالطاقةمنع انتقال المعالج إلى حالة السكون
SET_ALARMالمنبهتعيين منبه عبر AlarmManager
CHANGE_NETWORK_STATEالشبكةتغيير حالة اتصال الشبكة

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

لا تتجمع الأذونات العادية في «مجموعات أذونات» لأغراض العرض في واجهة المستخدم. المجموعات في Android مصممة لشاشة الإعدادات، حيث تظهر فقط الأذونات الخطرة. ومع ذلك، يمكن تقسيم الأذونات العادية منطقياً إلى فئات: الشبكة (INTERNET، ACCESS_NETWORK_STATE)، الأجهزة (VIBRATE، WAKE_LOCK)، النظام (SET_ALARM) وأذونات Bluetooth.

بعض الثوابت من Manifest.permission قد تغير مستوى حمايتها في إصدارات Android مختلفة. على سبيل المثال، BLUETOOTH_CONNECT في Android 12+ أصبح إذناً خطراً يتطلب طلباً في وقت التشغيل، رغم أنه في الإصدارات الأقدم كان عادياً. يوصى المطورون بالتحقق من protectionLevel الحالي للإصدار المستهدف عبر التوثيق.

التحقق من Normal Permission عبر PackageManager

يمكن للمطور التحقق برامجياً من إذا كان الإذن عادياً عبر PackageManager. تعود طريقة getPermissionInfo PermissionInfo بحقل protectionLevel يحتوي على علامة PermissionInfo.PROTECTION_NORMAL. هذا مفيد للمعالجة الديناميكية والتصحيح.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

كيف تصرح بالإذن العادي في البيان

تصريح Normal Permission في AndroidManifest.xml هو أبسط عملية، تتطلب علامة uses-permission واحدة فقط. لا حاجة لتيار protectionLevel إضافي، حيث يتم تحديد مستوى الحماية تعريف النظام، لا بيان التطبيق. يحدد المطور ببساطة الاسم الكامل للثابت.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

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

مثال على بيان كامل

يوضح مثال كامل لـ AndroidManifest.xml بأذونات عادية وخطرة الفرق: نحوياً، علامات uses-permission متطابقة، ولكن في وقت التشغيل سيتم منح INTERNET و VIBRATE تلقائياً، بينما ستتطلب CAMERA حواراً.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

    <!-- Dangerous permission -->
    <uses-permission
        android:name="android.permission.CAMERA" />
</manifest>

Manifest Merger و Normal Permission

عند استخدام المكتبات — Google Play Services، Firebase، Glide — قد تضيف خدمات uses-permission خاصة بها إلى البيان النهائي عبر Manifest Merger. بعضها عادي (INTERNET لـ Firebase)، وبعضها آخر خطر (ACCESS_FINE_LOCATION لـ Google Maps). يجب على المطور التحقق من البيان المدمج النهائي في build/outputs/logs/manifest-merger-report.txt قبل النشر.

قيود الإذن العادي

Normal Permission له قيودان أساسيان: عدم قدرة المستخدم على إلغائه وعدم وجود واجهة إدارة. إذا لم يثق المستخدم في التطبيق ولكن الإذن العادي قد منح تلقائياً — الحل الوحيد هو إزالة التطبيق. يخلق هذا مخاطر معينة، حيث لا يمكن حجب الأذونات العادية بوسائل Android القياسية.

يظهر قيد إضافي على الأجهزة ذات الملفات المتعددة (Work Profile، Multiple Users). Normal Permission يُمنح لجميع الملفات مرة واحدة — لا يستطيع التطبيق تقييد الإذن لملف واحد فقط. في السيناريوهات المؤسسية يتم حل هذا عبر Managed Configurations.

من المستحيل التحقق مما إذا كان التطبيق يستخدم Normal Permission في لحظة معينة. تعمل طريقة النظام checkSelfPermission فقط للأذونات الخطرة. أما للعادية فهي تعود دائماً PERMISSION_GRANTED، وهو ما لا يعكس النشاط الفعلي. يجب مراعاة ذلك عند تدقيقات الأمان وتحليل سلوك التطبيق.

يجدر الذكر أيضاً أن بعض مصنعي الأجهزة (Xiaomi، Huawei، Samsung) يعدلون السلوك القياسي للأذونات. في برامجهم الثابتة، قد يتطلب Normal Permission أذونات إضافية في الواجهة الخاصة MIUI أو EMUI. يوصى المطورون بالاختبار على أجهزة حقيقية من مصنعين مختلفين.

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

ما الفرق بين Normal Permission و Dangerous؟

Normal Permission يُمنح تلقائياً عند التثبيت دون حوار. Dangerous يتطلب طلباً في وقت التشغيل بموافقة صريحة من المستخدم ويمكن إلغاؤه عبر الإعدادات. Normal يستخدم ProtectionLevel normal، Dangerous يستخدم protectionLevel dangerous.

هل حتاج لكتابة كود لـ Normal Permission؟

لا، للأذونات العادية يكفي تصريح uses-permission في AndroidManifest.xml. لا حاجة لكود طلب — النظام يمنح الوصول تلقائياً. هذا يميزها عن الخطرة، حيث يلزم ActivityCompat.requestPermissions.

ما هي Normal Permission الأكثر شيوعاً؟

الأكثر استخداماً: INTERNET (طلبات الشبكة)، ACCESS_NETWORK_STATE (التحقق من الاتصال)، VIBRATE (الاهتزاز اللمسي) و WAKE_LOCK (إبقاء المعالج نشطاً). تقريباً كل تطبيق Android يستخدم INTERNET على الأقل.

هل يمكن إلغاء Normal Permission؟

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

كيف أتحقق من ProtectionLevel لإذن ما؟

استخدم PackageManager.getPermissionInfo، ومرر اسم الإذن كنص متني. تعود الطريقة PermissionInfo بحقل protectionLevel. قارنه مع ثوابت PermissionInfo.PROTECTION_NORMAL أو PROTECTION_DANGEROUS لتحديد الفئة.

الملخص

  • Normal Permission هو فئة أذونات Android بمستوى حماية ProtectionLevel normal، تُمنح تلقائياً عند التثبيت.
  • للتصريح، يكفي وسم uses-permission في AndroidManifest.xml دون كود وقت تشغيل.
  • تختلف عن الخطرة بعدم وجود حوار، عدم إمكانية الإلغاء وانخفاض مستوى المخاطر.
  • الأكثر شيوعاً: INTERNET، ACCESS_NETWORK_STATE، VIBRATE، ACCESS_WIFI_STATE و WAKE_LOCK.
  • يتم التحقق من ProtectionLevel عبر PackageManager.getPermissionInfo في الكود.
  • لا تظهر الأذونات العادية في شاشة إعدادات التطبيقات.
  • عند استخدام المكتبات، تحقق من البيان النهائي عبر Manifest Merger.

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

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

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

اقرأ أيضًا