Camera Permission في التطبيقات المحمولة — ما هو، أنواع الوصول وكيف يعمل

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

Camera Permission هو إذن يطلبه التطبيق المحمول من المستخدم للوصول إلى كاميرا الجهاز. بدونه، لا يمكن للتطبيق التقاط الصور أو مسح رموز QR أو بدء مكالمات الفيديو. وفقًا لـ Android Developers، 2024، جميع التطبيقات التي تستخدم الكاميرا على Android 6.0 وما فوق ملزمة بطلب الإذن في وقت التشغيل عبر حوار النظام.

الخلاصة

  • Camera Permission هو إذن إلزامي للتطبيقات التي تعمل مع كاميرا الجهاز على iOS وAndroid.
  • Android يستخدم Manifest.permission.CAMERA مع طلب إلزامي في وقت التشغيل بدءًا من API 23.
  • iOS يتطلب إضافة مفتاح NSCameraUsageDescription في Info.plist مع وصف سبب استخدام الكاميرا.
  • الطلب في السياق (على سبيل المثال، عند الضغط على زر «التقاط صورة») يزيد بشكل كبير من معدل الموافقة.
  • رفض الوصول يجب معالجته من خلال سيناريو بديل: الاختيار من المعرض أو تحميل ملف.

ما هو Camera Permission؟

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

على Android، ينتمي إذن CAMERA إلى فئة الأذونات الخطيرة ويتطلب طلبًا إلزاميًا في وقت التشغيل. على iOS، يعد إضافة مفتاح NSCameraUsageDescription في Info.plist شرطًا إلزاميًا لأي تطبيق يصل إلى الكاميرا. بدون هذا المفتاح، سيتعطل التطبيق عند محاولة فتح الكاميرا.

وفقًا لدراسة Statista (2024)، حوالي 68% من التطبيقات المحمولة في أفضل 100 متجر App Store تستخدم الكاميرا بشكل أو بآخر: من مسح رموز QR إلى التقاط الصور والفيديو الكامل. في الوقت نفسه، يرفض 37% من المستخدمين الوصول إلى الكاميرا إذا لم يفهموا لماذا يحتاج التطبيق لهذا الإذن.

Camera Permission على Android

Camera Permission على Android يتم طلبه من خلال إعلان في البيان ثم طلب في وقت التشغيل. بدءًا من Android 6.0، لا يمكن الحصول على إذن CAMERA فقط في مرحلة التثبيت — يجب على المستخدم تأكيد الوصول صراحةً.

الإعلان في AndroidManifest.xml

لاستخدام الكاميرا على Android، يجب إضافة الإعلان المقابل إلى ملف البيان. بدونه، لن يسمح النظام للتطبيق بفتح الكاميرا حتى مع طلب وقت التشغيل.

xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

السمة android:required=false لـ uses-feature تسمح بتثبيت التطبيق على الأجهزة بدون كاميرا. هذا مهم إذا لم تكن الكاميرا مكونًا إلزاميًا لتشغيل التطبيق بالكامل.

طلب وقت التشغيل في Kotlin

يتم طلب Camera Permission من خلال Activity Result API. بعد تلقي الرد، يتحقق التطبيق من الحالة ويبدأ الكاميرا أو يعرض شرحًا.

kotlin
private val cameraLauncher =
    registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
    if (success) {
        // تم حفظ الصورة
        showPhoto(photoUri)
    }
}

private val permissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
    if (granted) {
        openCamera()
    } else {
        showPermissionDenied()
    }
}

fun capturePhoto() {
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        openCamera()
    } else {
        permissionLauncher.launch(Manifest.permission.CAMERA)
    }
}

ميزات Android 11+

بدءًا من Android 11، إذا رفض المستخدم الوصول إلى الكاميرا مرتين، لن يظهر حوار النظام بعد الآن. يتم تعيين علامة Never Ask Again تلقائيًا، ويمكن للتطبيق فقط توجيه المستخدم إلى إعدادات النظام عبر Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS). يجب على المطور تضمين التحقق من shouldShowRequestPermissionRationale لعرض شاشة تمهيدية في الوقت المناسب.

Camera Permission على iOS

Camera Permission على iOS يتم إدارته من خلال مفتاح NSCameraUsageDescription في Info.plist واستدعاء AVCaptureDevice.requestAccess. تتحقق Apple بدقة من مبرر الطلب: إذا كان التطبيق يستخدم الكاميرا بطريقة غير واضحة للمستخدم، فقد يرفض App Store التطبيق.

تكوين Info.plist

شرط إلزامي للوصول إلى الكاميرا على iOS هو إضافة مفتاح NSCameraUsageDescription إلى ملف Info.plist. سيتم عرض سلسلة القيمة في حوار النظام كسبب للطلب.

xml
<key>NSCameraUsageDescription</key>
<string>يحتاج التطبيق إلى الوصول إلى الكاميرا لإنشاء صور الملف الشخصي ومسح رموز QR.</string>

الطلب في Swift

في Swift، يتم الطلب من خلال الطريقة الثابتة AVCaptureDevice.requestAccess. بعد تلقي الرد، يعالج التطبيق الحالة ويبدأ جلسة الالتقاط.

swift
import AVFoundation

func requestCameraAccess() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        DispatchQueue.main.async {
            if granted {
                self.setupCameraSession()
            } else {
                self.showSettingsAlert()
            }
        }
    }
}

private func setupCameraSession() {
    guard let device = AVCaptureDevice.default(.for: .video)
    else { return }
    do {
        let input = try AVCaptureDeviceInput(device: device)
        let session = AVCaptureSession()
        session.addInput(input)
        session.startRunning()
    } catch {
        print("Camera error: \(error)")
    }
}

التحقق من الحالة الحالية

قبل طلب الوصول إلى الكاميرا، يوصى بالتحقق من حالة التفويض الحالية عبر AVCaptureDevice.authorizationStatus(for: .video). هذا يتجنب استدعاءات حوار النظام غير الضرورية ويعالج بشكل صحيح الحالات التي اتخذ فيها المستخدم قرارًا بالفعل. يمكن أن تكون الحالة .notDetermined أو .restricted أو .denied أو .authorized.

سيناريوهات استخدام الكاميرا

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

مسح رموز QR والباركود

على iOS، يتم استخدام AVCaptureMetadataOutput من إطار AVFoundation لمسح رموز QR، الأمر الذي يتطلب Camera Permission. على Android، يوصى باستخدام ML Kit Barcode Scanning من Google. من المهم ملاحظة أن مسح رموز QR يستخدم الكاميرا نفسها، وليس مكتبة تحليل الصور — لذلك، Camera Permission إلزامي.

التقاط الصور والفيديو

يتطلب التقاط الصور أو الفيديو القياسي Camera Permission على كل من iOS وAndroid. على Android، يمكنك استخدام Intent(MediaStore.ACTION_IMAGE_CAPTURE)، الذي يفتح تطبيق الكاميرا النظامي — في هذه الحالة، يطلب تطبيق النظام الإذن، وليس تطبيقك. ومع ذلك، للمعاينة داخل التطبيق (CameraX، Camera2 API)، يلزم الإذن الخاص بك.

مكالمات الفيديو والواقع المعزز

تطبيقات مكالمات الفيديو (Zoom، Google Meet) والواقع المعزز (ARCore، ARKit) تطلب Camera Permission لالتقاط الفيديو من الكاميرا الأمامية أو الخلفية. في هذه الحالة، يجب شرح الطلب بعناية خاصة، حيث قد لا يتوقع المستخدم أن تطبيق تجربة الأثاث بالواقع المعزز يطلب الكاميرا.

تكوين معلمات الالتقاط

عند العمل مع الكاميرا على iOS، يمكنك تكوين معلمات الالتقاط عبر AVCaptureDeviceInput و AVCapturePhotoOutput. على Android، يبسط CameraX التكوين من خلال استدعاءات ImageCapture و VideoCapture و Preview. لكل إعداد، تحتاج إلى تحديد الدقة المطلوبة ومستوى التكبير ووضع التركيز. يؤثر اختيار تكوين الالتقاط الصحيح مباشرة على أداء التطبيق واستهلاك البطارية.

معالجة الأخطاء عند العمل مع الكاميرا

قد تحدث أخطاء مختلفة عند العمل مع الكاميرا. قد تكون الكاميرا مشغولة بتطبيق آخر، أو معطلة في إعدادات الخصوصية النظامية، أو غير موجودة على الجهاز. على Android، يوصى بمعالجة CameraAccessException عند استدعاء CameraManager.openCamera. على iOS، تحقق من AVCaptureDevice.authorizationStatus وتعامل مع الرفض بشكل صحيح من خلال عرض الانتقال إلى الإعدادات لتمكين الوصول. تحقق دائمًا من وجود الكاميرا على الجهاز قبل طلب الإذن باستخدام PackageManager.hasSystemFeature. يمنع هذا التحقق الطلبات غير الضرورية على الأجهزة بدون كاميرا ويحسن تجربة المستخدم.

تحسين أداء الكاميرا

تحسين الأداء عند العمل مع الكاميرا مهم لتشغيل سلس للتطبيق. يستهلك التقاط الفيديو بدقة عالية موارد كبيرة من المعالج والبطارية.

على iOS، استخدم AVCaptureSessionPresetMedium بدلاً من الدقة القصوى إذا كان التطبيق لا يتطلب التقاط 4K. على Android، يتيح CameraX تكوين ImageCapture بدقة مستهدفة من خلال ImageCaptureConfig.Builder. من المهم أيضًا تحرير الكاميرا عند انتقال التطبيق إلى الخلفية وإعادة التقاطها عند العودة. هذه ممارسة قياسية موصى بها من Google وApple للحفاظ على عمر البطارية.

أفضل ممارسات طلب الوصول إلى الكاميرا

أفضل الممارسات تساعد في زيادة معدل الموافقة على Camera Permission وتجنب رفض التطبيق من قبل App Store أو Google Play.

استخدم معاينة للشرح

قبل عرض حوار النظام، اعرض شاشة تحتوي على مثال لكيفية استخدام الكاميرا: صورة واجهة المسح، إطار لصورة الملف الشخصي، مثال على رمز QR تم التعرف عليه. الشرح البصري يعمل بشكل أفضل من النصي. وفقًا لـ UX Movement (2024)، إضافة معاينة بصرية تزيد من معدل الموافقة إلى 72%.

اطلب الإذن في لحظة الإجراء

لا تطلب أبدًا Camera Permission عند أول تشغيل للتطبيق. المستخدم الذي فتح التطبيق للتو سيرفض على الأرجح إذا لم يفهم السياق. اطلب الوصول بدقة عندما يضغط المستخدم على زر يتطلب الكاميرا: «التقاط صورة الملف الشخصي»، «مسح الرمز»، «بدء مكالمة فيديو». المحفز السياقي يجعل الطلب أكثر معنى.

قدم بديلاً

إذا رفض المستخدم Camera Permission، قدم طريقة بديلة لتنفيذ الإجراء: اختيار صورة من المعرض، إدخال بيانات رمز QR يدويًا، تحميل صورة من الجهاز. لا ينبغي أن يؤدي الرفض إلى حظر وظائف التطبيق بالكامل — هذا مطلب من توصيات تصميم Google Play و App Store.

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

ماذا يحدث إذا رفض المستخدم Camera Permission؟

إذا تعطل التطبيق عند محاولة فتح الكاميرا بدون إذن، ستحصل على خطأ. يجب التحقق من الحالة مسبقًا عبر checkSelfPermission على Android أو authorizationStatus على iOS وتقديم سيناريو بديل.

هل Camera Permission مطلوب لمسح رموز QR؟

نعم، مسح رموز QR من خلال الكاميرا يتطلب Camera Permission. النهج البديل هو استخدام مكتبات التعرف على رموز QR من صورة بدون كاميرا (مثل تنزيل صورة بالرمز من المعرض)، لكن هذا يتطلب Photo Library Permission.

كيف أطلب Camera Permission على Android بدون Activity؟

في بنية Jetpack Compose، يمكنك استخدام rememberLauncherForActivityResult مع ActivityResultContracts.RequestPermission في دالة composable. للخدمات بدون واجهة مستخدم، الطلب المباشر للإذن غير ممكن — يجب تمرير التحكم إلى Activity.

لماذا يتعطل تطبيق iOS عند فتح الكاميرا؟

السبب الأكثر احتمالاً هو عدم وجود مفتاح NSCameraUsageDescription في Info.plist. منذ iOS 10، أي وصول إلى AVCaptureDevice بدون هذا المفتاح يتسبب في تعطل التطبيق مع استثناء NSInvalidArgumentException.

كيفية إعادة ضبط Camera Permission للاختبار؟

على Android، أعد ضبط إعدادات التطبيق عبر Settings ← Apps ← [التطبيق] ← Permissions. على iOS، استخدم Settings ← [التطبيق] ←Camera toggle. لأتمتة الاختبارات على iOS، يمكنك استخدام XCUITest مع resetAuthorizationStatus.

الملخص

  • Camera Permission هو إذن إلزامي في وقت التشغيل للوصول إلى الكاميرا على كلتا المنصتين المحمولتين.
  • Android يتطلب إعلان CAMERA في البيان والطلب عبر Activity Result API مع التحقق من shouldShowRequestPermissionRationale.
  • iOS يتطلب مفتاح NSCameraUsageDescription في Info.plist واستدعاء AVCaptureDevice.requestAccess(for: .video).
  • الطلب السياقي يزيد معدل الموافقة إلى 72% وفقًا لـ UX Movement.
  • سيناريوهات الاستخدام تشمل التقاط الصور والفيديو ومسح رموز QR ومكالمات الفيديو ووظائف الواقع المعزز.
  • السيناريو البديل عند الرفض (الاختيار من المعرض، الإدخال اليدوي) إلزامي للامتثال لمتطلبات متاجر التطبيقات.
  • الشاشة التمهيدية مع شرح بصري تقلل بشكل كبير من معدلات الرفض.

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

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

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

اقرأ أيضًا