Camera Permission — bu, mobil tətbiqin istifadəçidən cihazın kamerasına giriş üçün tələb etdiyi icazədir. Onsuz tətbiq şəkil çəkə, QR kodları skan edə və ya video zənglər başlada bilməz. Android Developers, 2024 məlumatlarına görə, Android 6.0 və daha yuxarıda kameradan istifadə edən bütün tətbiqlər sistem dialoqu vasitəsilə icazə tələb etməlidir.
Əsas məqamlar
Camera Permission — bu, tətbiqlərin mobil cihazın kamerasına girişini tənzimləyən sistem icazəsidir. Mobil platformalar kameranı məxfi resurs hesab edir, çünki o, istifadəçinin ətraf mühitini real vaxtda videoya çəkməyə və şəkil çəkməyə imkan verir.
Android-də CAMERA icazəsi təhlükəli icazələr (dangerous permissions) kateqoriyasına aiddir və məcburi sorğu tələb edir. iOS-da Info.plist-ə NSCameraUsageDescription açarının əlavə edilməsi kameraya müraciət edən hər hansı tətbiq üçün məcburi şərtdir. Bu açar olmadan tətbiq kameranı açmağa cəhd etdikdə qəzaya uğrayacaq.
Statista (2024) araşdırmasına görə, App Store-un top-100-dəki mobil tətbiqlərin təxminən 68%-i bu və ya digər formada kameradan istifadə edir: QR kodlarının skan edilməsindən tutmuş tam hüquqlu foto və video çəkilişinə qədər. Bununla yanaşı, istifadəçilərin 37%-i kameraya girişi rədd edir, əgər tətbiqin bu icazəyə niyə ehtiyacı olduğunu başa düşmürlərsə.
Android-də Camera Permission manifestdə bəyannamə və sonrakı sorğu vasitəsilə tələb edilir. Android 6.0-dan başlayaraq, CAMERA icazəsi yalnız quraşdırma mərhələsində əldə edilə bilməz — istifadəçi açıq şəkildə girişi təsdiqləməlidir.
Android-də kameradan istifadə etmək üçün manifest faylına müvafiq bəyannamə əlavə etmək lazımdır. Onsuz sistem sorğu olsa belə tətbiqə kameranı açmağa icazə verməyəcək.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
android:required=false atributu uses-feature üçün tətbiqi kamerasız cihazlarda quraşdırmağa imkan verir. Bu, kamera bütün tətbiqin işləməsi üçün məcburi komponent deyilsə vacibdir.
Camera Permission sorğusu Activity Result API vasitəsilə yerinə yetirilir. Cavab alındıqdan sonra tətbiq statusu yoxlayır və kameranı işə salır və ya izahat göstərir.
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// Şəkil saxlanıldı
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-dən başlayaraq, istifadəçi kameraya girişdən iki dəfə imtina edərsə, sistem dialoqu daha göstərilmir. Never Ask Again bayrağı avtomatik olaraq qurulur və tətbiq yalnız istifadəçini Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) vasitəsilə sistem parametrlərinə yönləndirə bilər. Tərtibatçı vaxtında ilkin ekranı göstərmək üçün shouldShowRequestPermissionRationale yoxlamasını nəzərdə tutmalıdır.
iOS-da Camera Permission Info.plist-də NSCameraUsageDescription açarı və AVCaptureDevice.requestAccess çağırışı vasitəsilə idarə olunur. Apple sorğunun əsaslılığını ciddi şəkildə yoxlayır: əgər tətbiq kameradan istifadəçi üçün gözlənilməz bir şəkildə istifadə edərsə, App Store tətbiqi rədd edə bilər.
iOS-da kameraya giriş üçün məcburi şərt Info.plist faylına NSCameraUsageDescription açarının əlavə edilməsidir. String dəyəri sistem dialoqunda sorğunun səbəbi kimi göstəriləcək.
<key>NSCameraUsageDescription</key>
<string>Tətbiqin profil şəkilləri çəkmək və QR kodları skan etmək üçün kameraya girişi lazımdır.</string>
Swift-də sorğu AVCaptureDevice.requestAccess statik metodu vasitəsilə yerinə yetirilir. Cavab alındıqdan sonra tətbiq statusu emal edir və çəkiliş sessiyasını işə salır.
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)")
}
}
Kameraya giriş tələb etməzdən əvvəl AVCaptureDevice.authorizationStatus(for: .video) vasitəsilə cari avtorizasiya statusunu yoxlamaq tövsiyə olunur. Bu, lazımsız sistem dialoqu çağırışının qarşısını almağa və istifadəçinin artıq qərar verdiyi halları düzgün emal etməyə imkan verir. Status .notDetermined, .restricted, .denied və ya .authorized ola bilər.
Camera Permission müxtəlif ssenarilərdə tətbiq edilir, sadə skanerdən tutmuş tam hüquqlu video çəkilişinə qədər. Hər bir ssenari icazələrin həyata keçirilməsi və işlənməsi üçün öz tələblərini qoyur.
iOS-da QR kodlarının skan edilməsi üçün Camera Permission tələb edən AVFoundation çərçivəsindən AVCaptureMetadataOutput istifadə olunur. Android-də Google-dan ML Kit Barcode Scanning istifadə etmək tövsiyə olunur. Qeyd etmək vacibdir ki, QR kodlarının skan edilməsi üçün məhz kamera istifadə olunur, təsvir analiz kitabxanası deyil — buna görə də Camera Permission məcburidir.
Standart foto və ya video çəkilişi həm iOS, həm də Android-də Camera Permission tələb edir. Android-də sistem kamera tətbiqini açan Intent(MediaStore.ACTION_IMAGE_CAPTURE) istifadə edilə bilər — bu halda icazəni sistem tətbiqi tələb edir, sizin tətbiqiniz yox. Lakin tətbiq daxilində kameranın ön icmalı üçün (CameraX, Camera2 API) öz icazəniz lazımdır.
Video zəng tətbiqləri (Zoom, Google Meet) və artırılmış reallıq (ARCore, ARKit) ön və ya arxa kameradan video çəkmək üçün Camera Permission tələb edir. Bu halda sorğu xüsusilə diqqətlə izah edilməlidir, çünki istifadəçi AR-sınama mebel tətbiqinin kameraya giriş tələb edəcəyini gözləməyə bilər.
iOS-da kamera ilə işləyərkən çəkiliş parametrlərini AVCaptureDeviceInput və AVCapturePhotoOutput vasitəsilə konfiqurasiya etmək olar. Android-də CameraX ImageCapture, VideoCapture və Preview geri çağırışları vasitəsilə konfiqurasiyanı sadələşdirir. Hər bir konfiqurasiya üçün istənilən rezolyusiya, zoom səviyyəsi və fokus rejimi göstərilməlidir. Düzgün çəkiliş konfiqurasiyasının seçimi birbaşa tətbiqin performansına və batareya sərfiyyatına təsir edir.
Kamera ilə işləyərkən müxtəlif xətalar yarana bilər. Kamera başqa bir tətbiq tərəfindən işğal oluna, sistem məxfilik parametrlərində söndürülə və ya cihazda mövcud olmaya bilər. Android-də CameraManager.openCamera çağırışında CameraAccessException-ın işlənməsi tövsiyə olunur. iOS-da AVCaptureDevice.authorizationStatus-u yoxlamaq və imtinanı düzgün emal edərək istifadəçiyə girişi aktivləşdirmək üçün parametrlərə keçməyi təklif etmək lazımdır. Həmişə icazə tələb etməzdən əvvəl PackageManager.hasSystemFeature vasitəsilə cihazda kameranın mövcudluğunu yoxlayın. Belə yoxlama kamerasız cihazlarda lazımsız sorğuların qarşısını alır və istifadəçi təcrübəsini yaxşılaşdırır.
Performansın optimallaşdırılması kamera ilə işləyərkən tətbiqin hamar işləməsi üçün vacibdir. Yüksək rezolyusiyada video çəkilişi əhəmiyyətli prosessor və batareya resursları sərf edir.
iOS-da tətbiq 4K çəkiliş tələb etmirsə, maksimum rezolyusiya əvəzinə AVCaptureSessionPresetMedium istifadə edin. Android-də CameraX ImageCaptureConfig.Builder vasitəsilə hədəf rezolyusiya ilə ImageCapture konfiqurasiya etməyə imkan verir. Həmçinin tətbiq fon rejiminə keçdikdə kameranı azad etmək və qayıtdıqda yenidən ələ keçirmək vacibdir. Bu, Google və Apple tərəfindən batareya qənaəti üçün tövsiyə edilən standart təcrübədir.
Ən yaxşı təcrübələr Camera Permission təsdiq nisbətini artırmağa və App Store və ya Google Play tərəfindən tətbiqin rədd edilməsinin qarşısını almağa kömək edir.
Sistem dialoqu çağırmazdan əvvəl kameranın necə istifadə ediləcəyinə dair nümunə olan ekran göstərin: skan interfeysinin təsviri, profil şəkli üçün çərçivə, tanınmış QR kod nümunəsi. Vizual izahat mətn izahatından daha yaxşı işləyir. UX Movement (2024) məlumatlarına görə, vizual ön icmalın əlavə edilməsi təsdiq nisbətini 72%-ə qədər artırır.
Heç vaxt Camera Permission-ı tətbiqin ilk açılışında tələb etməyin. Tətbiqi yenicə açmış istifadəçi konteksti başa düşmürsə, daha çox imtina edər. Girişi yalnız istifadəçi kamera tələb edən düyməni basdığı an tələb edin: «Profil şəkli çək», «Kodu skan et», «Video zəngə başla». Kontekstual tetikleyici sorğunun mənalılığını artırır.
İstifadəçi Camera Permission-dan imtina edərsə, alternativ bir hərəkət yolu təklif edin: qalereyadan şəkil seçimi, QR kod məlumatlarının əl ilə daxil edilməsi, cihazdan şəkil yükləmə. İmtina tətbiqin funksionallığını tamamilə bloklamamalıdır — bu, Google Play və App Store-un tətbiq dizaynı tövsiyələrinin tələbidir.
Tez-tez verilən suallar
İcazəsiz kameranı açmağa cəhd etdikdə qəza baş verəcək və səhv alacaqsınız. Android-də checkSelfPermission və ya iOS-da authorizationStatus vasitəsilə əvvəlcədən statusu yoxlamaq və alternativ ssenari təklif etmək lazımdır.
Bəli, kamera vasitəsilə QR kodlarının skan edilməsi Camera Permission tələb edir. Alternativ yanaşma — kamerasız şəkildə şəkildən QR kodun tanınması kitabxanalarından istifadə (məsələn, qalereyadan kodlu şəkil yükləmək), lakin bu Photo Library Permission tələb edir.
Jetpack Compose arxitekturasında composable funksiyasında ActivityResultContracts.RequestPermission ilə rememberLauncherForActivityResult istifadə edilə bilər. UI-siz xidmətlər üçün birbaşa icazə sorğusu mümkün deyil — nəzarət Activity-ə ötürülməlidir.
Ən çox ehtimal olunan səbəb Info.plist-də NSCameraUsageDescription açarının olmamasıdır. iOS 10-dan etibarən bu açar olmadan AVCaptureDevice-ə hər hansı müraciət NSInvalidArgumentException istisnası ilə tətbiqin çökməsinə səbəb olur.
Android-də tətbiq parametrlərini Settings → Apps → [Tətbiq] → İcazələr vasitəsilə sıfırlayın. iOS-da Settings → [Tətbiq] → Camera keçidindən istifadə edin. iOS-da testlərin avtomatlaşdırılması üçün XCUITest resetAuthorizationStatus ilə istifadə edilə bilər.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun