Photo Library Permission ایک اجازت ہے جو کسی ایپلیکیشن کے لیے صارف کے آلے پر محفوظ تصاویر اور ویڈیوز تک رسائی حاصل کرنے کے لیے ضروری ہے۔ یہ گیلری سے تصاویر منتخب کرنے، میڈیا فائلیں محفوظ کرنے اور فوٹو البمز کے انتظام کے لیے درکار ہے۔ Apple Developer Documentation, 2024 کے مطابق، iOS 14 سے شروع کرتے ہوئے، ایپلیکیشنز کو تمام تصاویر تک ایک ساتھ نہیں بلکہ محدود لائبریری تک رسائی کی درخواست کرنی چاہیے۔
اہم نکات
Photo Library Permission ایک سسٹم اجازت ہے جو آلے پر محفوظ میڈیا فائلوں تک ایپلیکیشن کی رسائی کو منظم کرتی ہے۔ یہ پڑھنے (تصاویر اور ویڈیوز دیکھنا اور منتخب کرنا) اور لکھنے (گیلری میں نئی فائلیں محفوظ کرنا) دونوں کو احاطہ کرتی ہے۔ موبائل پلیٹ فارمز میڈیا لائبریری کو حساس ڈیٹا سمجھتے ہیں کیونکہ تصاویر میں ذاتی اور نجی معلومات ہو سکتی ہیں۔
Android 13 (API 33) پر، Google نے واحد READ_EXTERNAL_STORAGE اجازت کو تین علیحدہ اجازتوں میں تقسیم کیا: READ_MEDIA_IMAGES تصاویر کے لیے، READ_MEDIA_VIDEO ویڈیوز کے لیے اور READ_MEDIA_AUDIO آڈیو کے لیے۔ یہ صارفین کو صرف ایک مخصوص قسم کی میڈیا فائل تک رسائی دینے کی اجازت دیتا ہے۔ iOS پر، iOS 14 سے شروع کرتے ہوئے، PhotoKit صارفین کو پوری لائبریری کھولنے کے بجائے مخصوص تصاویر منتخب کرنے کی سہولت دیتا ہے۔
Counterpoint Research (2024) کے مطابق، سوشل نیٹ ورکس، مواصلات اور فوٹو ایڈیٹرز کے زمرے میں 70% سے زیادہ موبائل ایپلیکیشنز Photo Library Permission کی درخواست کرتی ہیں۔ اسی وقت، 32% صارفین گیلری تک رسائی سے انکار کر دیتے ہیں اگر وہ نہیں سمجھتے کہ ایپلیکیشن کو ان کی تصاویر کی کیوں ضرورت ہے۔ Apple اور Google مکمل رسائی کی درخواست کیے بغیر انفرادی فائلیں منتخب کرنے کے لیے سسٹم PhotoPicker استعمال کرنے کی سفارش کرتے ہیں۔
Android پر گیلری تک رسائی Android 13 کی ریلیز کے ساتھ نمایاں طور پر تبدیل ہو گئی ہے۔ ایک واحد READ_EXTERNAL_STORAGE اجازت کے بجائے، ہر میڈیا قسم کے لیے دانے دار اجازتیں متعارف کرائی گئی ہیں، جو صارفین کو زیادہ کنٹرول دیتی ہیں۔
Android 13 سے شروع کرتے ہوئے، تصاویر تک رسائی کے لیے READ_MEDIA_IMAGES اور ویڈیو تک رسائی کے لیے READ_MEDIA_VIDEO استعمال کیا جاتا ہے۔ READ_EXTERNAL_STORAGE اجازت اب میڈیا فائلوں تک رسائی فراہم نہیں کرتی — یہ صرف مشترکہ اسٹوریج سے غیر میڈیا فائلیں پڑھنے کے لیے برقرار رکھی گئی ہے۔ مینی فیسٹ میں اعلان اس طرح نظر آتا ہے:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
Android 12 اور نیچے کے ساتھ پسماندہ مطابقت کے لیے، آپ کو READ_EXTERNAL_STORAGE کا بھی اعلان کرنا ہوگا۔ تاہم، Android 13 نئی دانے دار اجازتوں کی موجودگی میں اس اجازت کو خود بخود نظر انداز کر دیتا ہے۔ پرانی اجازت کو نئے ورژنز پر چھپانے کے لیے مینی فیسٹ میں android:maxSdkVersion="32" وصف استعمال کریں۔ یہ Android 13+ چلانے والے آلات پر بے کار درخواستوں کو روکتا ہے۔
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
Android پر Photo Library Permission کے لیے رن ٹائم درخواست Activity Result API کے ذریعے کی جاتی ہے۔ تصاویر تک رسائی کی درخواست کی مثال:
private val photoPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
loadGalleryImages()
} else {
showPermissionDenied()
}
}
fun pickPhoto() {
val permission = if (Build.version.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Manifest.permission.READ_MEDIA_IMAGES
} else {
Manifest.permission.READ_EXTERNAL_STORAGE
}
if (ContextCompat.checkSelfPermission(this, permission)
== PackageManager.PERMISSION_GRANTED) {
loadGalleryImages()
} else {
photoPermissionLauncher.launch(permission)
}
}
iOS پر گیلری تک رسائی PhotoKit فریم ورک اور Info.plist میں NSPhotoLibraryUsageDescription اور NSPhotoLibraryAddUsageDescription کلیدوں کے ذریعے منظم کی جاتی ہے۔ iOS 14 سے شروع کرتے ہوئے، صارفین صرف منتخب تصاویر تک رسائی دے سکتے ہیں (Limited Photo Library)۔
لائبریری سے تصاویر پڑھنے کے لیے NSPhotoLibraryUsageDescription ضروری ہے، جبکہ لکھنے (تصاویر محفوظ کرنے) کے لیے NSPhotoLibraryAddUsageDescription ضروری ہے۔ اگر ایپلیکیشن صرف میڈیا محفوظ کرتی ہے لیکن پڑھتی نہیں ہے، تو دوسری کلید کافی ہے۔
<key>NSPhotoLibraryUsageDescription</key>
<string>ایپ کو پروفائل تصویر منتخب کرنے اور سنیپ شاٹس شائع کرنے کے لیے تصاویر تک رسائی درکار ہے۔</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>ایپ کو پروسیس شدہ تصاویر آپ کی گیلری میں محفوظ کرنے کے لیے رسائی درکار ہے۔</string>
iOS پر تصاویر تک رسائی کی درخواست PHPhotoLibrary.requestAuthorization کے ذریعے کی جاتی ہے۔ iOS 14 سے شروع کرتے ہوئے، .limited اسٹیٹس ظاہر کرتا ہے کہ صارف نے محدود تصاویر کے سیٹ تک رسائی دی ہے۔
import PhotosUI
func requestPhotoLibraryAccess() {
PHPhotoLibrary.requestAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
self.loadPhotoLibrary()
case .limited:
self.loadSelectedPhotos()
case .denied, .restricted:
self.showSettingsAlert()
case .notDetermined:
break
}
}
}
}
private func loadPhotoLibrary() {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let assets = PHAsset.fetchAssets(with: .image, options: fetchOptions)
// درخواست کے نتائج کا انتظام
}
iOS 14+ پر .limited اسٹیٹس کا مطلب ہے کہ صارف نے صرف چند منتخب تصاویر تک رسائی دی ہے۔ ایپلیکیشن PHPhotoLibrary.shared().presentLimitedLibraryPicker کو کال کرکے سسٹم ڈائیلاگ کے ذریعے توسیعی رسائی کی درخواست کر سکتی ہے۔ اس ڈائیلاگ کو صرف اس وقت دکھانے کی سفارش کی جاتی ہے جب صارف واضح طور پر کسی ایسی خصوصیت کی درخواست کرے جس کے لیے اضافی تصاویر درکار ہوں۔
PhotoPicker میڈیا فائلوں کے انتخاب کے لیے ایک سسٹم جزو ہے جسے پوری لائبریری تک رسائی کی اجازت کی ضرورت نہیں۔ Android 13 اور iOS 14 سے شروع کرتے ہوئے، Google اور Apple Photo Library Permission کی درخواست کرنے کے بجائے PhotoPicker استعمال کرنے کی سفارش کرتے ہیں اگر ایپلیکیشن کو صرف ایک یا چند تصاویر منتخب کرنے کی ضرورت ہو۔
Android 13+ پر، بلٹ ان PhotoPicker (ActivityResultContracts.PickVisualMedia) صارفین کو پوری گیلری تک رسائی دیے بغیر تصویر یا ویڈیو منتخب کرنے کی اجازت دیتا ہے۔ ایپلیکیشن کو صرف منتخب فائلوں کا URI ملتا ہے۔ PhotoPicker مینی فیسٹ میں کسی بھی اجازت کا اعلان کیے بغیر کام کرتا ہے۔
private val pickMedia =
registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
if (uri != null) {
// منتخب فائل کا URI، پوری لائبریری تک رسائی کے بغیر
showImage(uri)
}
}
fun selectPhoto() {
pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
iOS 14+ پر PHPickerViewController متعارف کرایا گیا — ایک سسٹم پکر جسے بھی پوری لائبریری تک رسائی کی ضرورت نہیں۔ PHPicker ایک علیحدہ عمل میں چلتا ہے اور اسے ایپلیکیشن کی لائبریری تک رسائی نہیں ہوتی۔ زیادہ تر منظرناموں کے لیے تصاویر منتخب کرنے کا یہ ترجیحی طریقہ ہے۔
import PhotosUI
func presentPhotoPicker() {
var config = PHPickerConfiguration()
config.selectionLimit = 1
config.filter = .images
let picker = PHPickerViewController(configuration: config)
picker.delegate = self
present(picker, animated: true)
}
PhotoPicker موزوں نہیں ہے اگر ایپلیکیشن کو بڑے پیمانے پر کاموں کے لیے پوری لائبریری تک رسائی کی ضرورت ہو: بیک اپ، کلاؤڈ سنکرونائزیشن، گیلری ایپلیکیشن، فائل مینیجر۔ ان صورتوں میں، آپ کو Photo Library Permission کی درخواست کرنی ہوگی اور محدود رسائی (Limited) کو ہینڈل کرنا ہوگا۔ iOS کے لیے، .limited اسٹیٹس کا انتظام شامل کرنا اور صارفین کو رسائی بڑھانے کا اختیار دینا لازمی ہے۔
بہترین طریقے Photo Library Permission کے ساتھ کام کرنے کے لیے انکار کی تعداد کم کرنے اور پلیٹ فارم کی رازداری کی ضروریات کی تعمیل کرنے میں مدد دیتے ہیں۔
ایک یا زیادہ تصاویر منتخب کرنے کے لیے، سسٹم PhotoPicker یا PHPicker استعمال کریں۔ یہ اجزاء اجازتوں کی ضرورت نہیں رکھتے اور بہترین صارف تجربہ فراہم کرتے ہیں۔ مکمل گیلری رسائی کی درخواست صرف اس صورت میں کریں اگر ایپلیکیشن کی فعالیت کو پوری میڈیا لائبریری تک رسائی درکار ہو۔ Google اور Apple اپنی ڈویلپر دستاویز میں واضح طور پر اس نقطہ نظر کی سفارش کرتے ہیں۔
اگر ایپلیکیشن کو واقعی مکمل گیلری رسائی درکار ہے، تو وضاحت کے ساتھ ابتدائی اسکرین دکھائیں۔ بتائیں کہ تمام تصاویر کیوں ضروری ہیں نہ کہ صرف ایک۔ مثال کے طور پر، بیک اپ ایپلیکیشن کو بتانا چاہیے کہ وہ کاپی بنانے کے لیے تمام میڈیا فائلوں کو اسکین کرے گی۔ قبل از اجازت اسکرین محدود رسائی کے طریقہ کار کی وجہ سے iOS کے لیے خاص طور پر اہم ہے۔
اگر ایپلیکیشن صرف تصاویر محفوظ کرتی ہے لیکن انہیں پڑھتی نہیں (مثال کے طور پر، ایک فوٹو ایڈیٹر جو نتیجہ محفوظ کرتا ہے)، تو صرف گیلری میں لکھنے کی اجازت مانگیں۔ Android پر، یہ WRITE_EXTERNAL_STORAGE (Android 12 اور نیچے کے لیے) یا بغیر اجازتوں کے MediaStore API (Android 10+ کے لیے) ہے۔ iOS پر، NSPhotoLibraryUsageDescription کے بغیر NSPhotoLibraryAddUsageDescription استعمال کریں۔
اکثر پوچھے گئے سوالات
Android 10 (API 29) سے شروع کرتے ہوئے، MediaStore کے ذریعے تصاویر محفوظ کرنے کے لیے WRITE_EXTERNAL_STORAGE اجازت کی ضرورت نہیں۔ نظام واضح اجازت کے بغیر تحریر کے لیے مشترکہ اسٹوریج تک رسائی فراہم کرتا ہے۔ دوسرے صارفین کی فائلیں پڑھنے کے لیے اب بھی مناسب اجازت درکار ہے۔
READ_EXTERNAL_STORAGE مشترکہ اسٹوریج سے تمام فائلیں پڑھنے کی پرانی اجازت ہے (Android 12 تک)۔ READ_MEDIA_IMAGES صرف تصاویر پڑھنے کے لیے نئی دانے دار اجازت ہے (Android 13+)۔ صارفین ویڈیو اور آڈیو تک رسائی سے انکار کرتے ہوئے صرف تصاویر تک رسائی دے سکتے ہیں۔
.limited اسٹیٹس کا مطلب ہے کہ صارف نے رسائی کے لیے کچھ تصاویر منتخب کی ہیں۔ ایپلیکیشن PHPhotoLibrary.shared().presentLimitedLibraryPicker کے ذریعے سسٹم توسیعی ڈائیلاگ دکھا سکتی ہے۔ اس ڈائیلاگ کو صرف صارف کی واضح درخواست پر دکھانے کی سفارش کی جاتی ہے، مثال کے طور پر، “مزید تصاویر شامل کریں” بٹن کو چھونے پر۔
ہاں، Photo Library Permission کے ساتھ، ایپلیکیشن EXIF ڈیٹا پڑھ سکتی ہے، جس میں جغرافیائی ٹیگز، کیپچر تاریخ اور کیمرہ ماڈل شامل ہیں۔ iOS پر، جغرافیائی ٹیگز تک رسائی کے لیے اضافی مقام کی اجازت درکار ہو سکتی ہے، کیونکہ Apple GPS کوآرڈینیٹس کو خفیہ ڈیٹا سمجھتا ہے۔
سسٹم پکر استعمال کریں: iOS پر filter = .videos کے ساتھ PHPicker، Android پر VideoOnly کے ساتھ PickVisualMedia۔ Android پر، آپ MediaStore.Video.Media.EXTERNAL_CONTENT_URI کے ساتھ Intent(Intent.ACTION_PICK) بھی استعمال کر سکتے ہیں، لیکن اس کے لیے Android 13 سے نیچے کے ورژنز پر READ_EXTERNAL_STORAGE اجازت درکار ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں