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 برای اسکن کدهای QR از AVCaptureMetadataOutput از فریمورک AVFoundation استفاده می‌شود که نیاز به Camera Permission دارد. در Android استفاده از ML Kit Barcode Scanning گوگل توصیه می‌شود. توجه به این نکته مهم است که برای اسکن کدهای QR از خود دوربین استفاده می‌شود، نه کتابخانه تحلیل تصویر — بنابراین Camera Permission الزامی است.

عکس‌برداری و فیلم‌برداری

عکس‌برداری یا فیلم‌برداری استاندارد هم در iOS و هم در Android نیاز به Camera Permission دارد. در Android می‌توان از Intent(MediaStore.ACTION_IMAGE_CAPTURE) استفاده کرد که اپلیکیشن دوربین سیستم را باز می‌کند — در این حالت مجوز توسط اپلیکیشن سیستم درخواست می‌شود، نه توسط اپلیکیشن شما. با این حال، برای پیش‌نمایش دوربین در داخل اپلیکیشن (CameraX, Camera2 API) مجوز شخصی لازم است.

تماس تصویری و AR

اپلیکیشن‌های تماس تصویری (Zoom, Google Meet) و واقعیت افزوده (ARCore, ARKit) برای ضبط ویدیو از دوربین جلو یا عقب درخواست Camera Permission می‌کنند. در این مورد، درخواست باید با دقت بیشتری توضیح داده شود، زیرا کاربر ممکن است انتظار نداشته باشد که اپلیکیشن اتاق پرو AR مبلمان درخواست دوربین کند.

تنظیم پارامترهای ضبط

هنگام کار با دوربین در 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 بررسی کرده و سناریوی جایگزین ارائه دهید.

آیا برای اسکن کدهای QR به Camera Permission نیاز است؟

بله، اسکن کدهای QR از طریق دوربین نیاز به Camera Permission دارد. روش جایگزین — استفاده از کتابخانه‌های تشخیص کد QR از تصویر بدون دوربین (مثلاً دانلود عکس با کد از گالری) — اما این نیاز به Photo Library Permission دارد.

چگونه در Android بدون Activity Camera Permission درخواست کنیم؟

در معماری Jetpack Compose می‌توان از rememberLauncherForActivityResult با ActivityResultContracts.RequestPermission در تابع composable استفاده کرد. برای سرویس‌های بدون رابط کاربری، درخواست مستقیم مجوز امکان‌پذیر نیست — باید کنترل را به Activity منتقل کرد.

چرا اپلیکیشن iOS هنگام باز کردن دوربین کرش می‌کند؟

محتمل‌ترین دلیل عدم وجود کلید NSCameraUsageDescription در Info.plist است. از iOS 10 به بعد، هرگونه دسترسی به AVCaptureDevice بدون این کلید باعث خاتمه ناگهانی اپلیکیشن (کرش) با استثنای NSInvalidArgumentException می‌شود.

چگونه Camera Permission را برای تست بازنشانی کنیم؟

در Android تنظیمات اپلیکیشن را از طریق Settings → Apps → [اپلیکیشن] → مجوزها بازنشانی کنید. در iOS از Settings → [اپلیکیشن] → کلید Camera استفاده کنید. برای خودکارسازی تست‌ها در iOS می‌توان از XCUITest با resetAuthorizationStatus استفاده کرد.

خلاصه

  • Camera Permission — مجوز اجباری زمان اجرا برای دسترسی به دوربین در هر دو پلتفرم موبایل.
  • Android نیاز به اعلام CAMERA در مانیفست و درخواست از طریق Activity Result API با بررسی shouldShowRequestPermissionRationale دارد.
  • iOS نیاز به کلید NSCameraUsageDescription در Info.plist و فراخوانی AVCaptureDevice.requestAccess(for: .video) دارد.
  • درخواست زمینه‌ای (در لحظه استفاده) نرخ تأیید را طبق داده‌های UX Movement تا 72٪ افزایش می‌دهد.
  • سناریوهای استفاده شامل عکس‌برداری و فیلم‌برداری، اسکن کدهای QR، تماس تصویری و عملکردهای AR است.
  • سناریوی جایگزین در صورت رد (انتخاب از گالری، ورود دستی) برای مطابقت با الزامات فروشگاه‌های اپلیکیشن الزامی است.
  • صفحه مقدماتی با توضیح بصری تعداد ردها را به طور قابل توجهی کاهش می‌دهد.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید