رابطوں تک رسائی کی اجازت ایک موبائل آپریٹنگ سسٹم کا طریقہ کار ہے جو ڈیوائس کی ایڈریس بک پڑھنے سے پہلے صارف کی واضح رضامندی کا تقاضا کرتا ہے۔ iOS پر، رابطوں تک رسائی CNContactStore کے ذریعے کی جاتی ہے، جبکہ Android پر Contacts API اور runtime permissions سسٹم استعمال کیا جاتا ہے۔ Apple Developer Documentation، 2025 کے مطابق، iOS 18 سے تمام ایپس کو متحدہ Contacts Access API استعمال کرنا ہوگا۔ اجازت کی درخواست کا درست نفاذ ایپ اسٹور کی جانچ پڑتال سے منظوری کے امکانات بڑھاتا ہے۔
اہم نکات
رابطوں تک رسائی کی اجازت ایک آپریٹنگ سسٹم کا طریقہ کار ہے جو صارف کی ایڈریس بک کو تیسرے فریق کی ایپس کے غیر مجاز پڑھنے سے بچاتا ہے۔ موبائل آپریٹنگ سسٹم میں، رابطوں کو حساس ڈیٹا سمجھا جاتا ہے کیونکہ ان میں صارف کے گردونواح کے لوگوں کے نام، فون نمبر، ای میل پتے اور تصاویر ہوتی ہیں۔
iOS پر، اجازت Contacts فریم ورک اور CNContactStore کلاس کے ذریعے منظم کی جاتی ہے۔ صارف پہلی رسائی کی درخواست پر ایک سسٹم ڈائیلاگ دیکھتا ہے، جہاں وہ رسائی دینے یا انکار کرنے کا انتخاب کر سکتا ہے۔ Android پر، تحفظ runtime permissions سسٹم پر مبنی ہے: ایپ manifest میں READ_CONTACTS کا اعلان کرتی ہے اور ActivityResultLauncher یا نتیجہ سنبھالنے والے fragment کے ذریعے runtime پر اس کی درخواست کرتی ہے۔
Statista (2025) کے مطابق، 68% سے زیادہ iOS صارفین اور 54% Android صارفین پہلی درخواست پر رابطوں تک رسائی سے انکار کرتے ہیں۔ اس کا مطلب ہے کہ ڈویلپر کو نہ صرف درخواست کو درست طریقے سے نافذ کرنا ہے، بلکہ صارف کو رسائی کی ضرورت کی وجہ بھی بتانی ہے۔
صنعتی معیار — پہلی لانچ پر نہیں، بلکہ صرف اس وقت رسائی کی درخواست کریں جب فعالیت واقعی ضروری ہو۔ یہ طریقہ انکار کی شرح کو کم کرتا ہے اور صارف کے تجربے کو بہتر بناتا ہے۔
Apple کے ماحولیاتی نظام میں، رابطوں تک رسائی Contacts فریم ورک کے ذریعے منظم کی جاتی ہے، جو iOS 9 میں متعارف کرایا گیا تھا۔ CNContactStore کلاس اجازت کی درخواست کرنے اور پڑھنے لکھنے کے آپریشنز کرنے کے طریقے فراہم کرتی ہے۔ requestAccess(for:) کی پہلی کال پر، سسٹم رسائی کی وجہ بتاتے ہوئے ایک مقامی ڈائیلاگ دکھاتا ہے۔
iOS 17 سے شروع کرتے ہوئے، Apple نے واحد رابطہ رسائی موڈ متعارف کرایا۔ صارف ایڈریس بک سے ایک رابطہ منتخب کر سکتا ہے اور پورے ڈیٹا بیس کو ظاہر کیے بغیر اسے ایپ کے ساتھ شیئر کر سکتا ہے۔ یہ موڈ CNContactPickerViewController کے ذریعے لاگو کیا گیا ہے اور اسے requestAccess(for:) کال کرنے کی ضرورت نہیں ہے۔
ڈویلپر کے لیے یہ سمجھنا ضروری ہے: اگر کوئی ایپ مکمل رسائی کی درخواست کرتی ہے لیکن فعال طور پر صرف ایک رابطے کی ضرورت ہے، تو App Store کے جائزہ کار بلڈ کو مسترد کر سکتے ہیں۔ Apple App Review Guidelines (2025) کے مطابق، سیکشن 5.1.1 واضح طور پر کم سے کم ضروری ڈیٹا کا تقاضا کرتا ہے۔
iOS 18 کی ریلیز کے ساتھ، Apple نے Privacy Manifest (privacy.xcprivacy فائل) کی ضروریات کو سخت کر دیا ہے، جہاں ڈویلپر محفوظ ڈیٹا تک رسائی کی وجہ کا اعلان کرتا ہے۔ رابطوں کے لیے، NSContactsUsageDescription کلید استعمال کی جاتی ہے جس میں مقامی متن ہوتا ہے جو سسٹم ڈائیلاگ میں دکھایا جاتا ہے۔
درست privacy manifest کے بغیر، ایپ App Store Connect کی جانچ پڑتال پاس نہیں کر سکتی۔ وضاحت کا متن مخصوص ہونا چاہیے: “کارکردگی بہتر بنانے کے لیے” نہیں، بلکہ “فون نمبر سے دوست تلاش کرنے کے لیے”۔
Android پر، رابطوں تک رسائی READ_CONTACTS اجازت سے محفوظ ہے، جو خطرناک زمرے سے تعلق رکھتی ہے — اسے انسٹالیشن کے دوران نہیں، بلکہ runtime پر درخواست کرنا ضروری ہے۔ runtime permissions کا طریقہ کار Android 6.0 (API 23) میں متعارف کرایا گیا تھا اور حساس ڈیٹا کی حفاظت کا بنیادی طریقہ بنا ہوا ہے۔
READ_CONTACTS اجازت manifest میں uses-permission ٹیگ کے ذریعے اعلان کی جاتی ہے، اور کوڈ میں ActivityResultLauncher یا onRequestPermissionsResult والے fragment کے ذریعے درخواست کی جاتی ہے۔ صارف درخواست کو مسترد کر سکتا ہے یا “دوبارہ کبھی نہ پوچھیں” منتخب کر سکتا ہے، جس کے بعد ایپ کو انکار کو درست طریقے سے سنبھالنا چاہیے۔
Android 14 (API 34) سے شروع کرتے ہوئے، runtime permissions کا رویہ بدل گیا ہے: لگاتار دو انکاروں کے بعد، OS خود بخود neverAskAgain فلیگ سیٹ کر دیتا ہے۔ Google Developer Documentation (2024) کے مطابق، ڈویلپر کو دوبارہ درخواست کرنے سے پہلے shouldShowRequestPermissionRationale کے ذریعے حیثیت چیک کرنی چاہیے۔
رابطے پڑھنے کے لیے، Android ContentProvider نامی ContactsContract استعمال کرتا ہے۔ یہ ContentResolver کے ذریعے قابل رسائی ایک منظم ڈیٹا بیس ہے۔ ڈیٹا کئی جدولوں میں منظم ہے: Contacts (رابطے)، RawContacts (مختلف اکاؤنٹس سے خام ریکارڈ)، Data (تفصیلی معلومات: فون، ای میل، پتے)۔
ContactsContract میں استفسار URI ContactsContract.Contacts.CONTENT_URI کے ذریعے کیا جاتا ہے۔ ڈویلپر کو کم سے کم کالمز کی درخواست کرنی چاہیے اور فیلڈز کو فلٹر کرنے کے لیے پروجیکشن استعمال کرنا چاہیے — اس سے استفسار پر عملدرآمد تیز ہوتا ہے اور میموری کی کھپت کم ہوتی ہے۔
رابطوں تک رسائی کی درخواست کا عملی نفاذ iOS اور Android پر مختلف ہے۔ ذیل میں Swift اور Kotlin میں تمام ممکنہ اجازت کی حالتوں کی ہینڈلنگ کے ساتھ مخصوص مثالیں دی گئی ہیں۔
iOS میں، درخواست CNContactStore کلاس کے requestAccess طریقہ کے ذریعے کی جاتی ہے۔ نتیجہ ایک بُولین قدر اور ایک اختیاری خرابی کے ساتھ closure میں واپس کیا جاتا ہے۔ نیچے دی گئی مثال حیثیت کی ہینڈلنگ کے ساتھ مکمل درخواست سائیکل دکھاتی ہے۔
import Contacts
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in
if granted {
print("رابطوں تک رسائی دی گئی")
// رابطوں کے آپریشنز پر عملدرآمد
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
try? store.enumerateContacts(with: request) { contact, stop in
print("\(contact.givenName) \(contact.familyName)")
}
} else {
print("رسائی مسترد: \(error?.localizedDescription ?? "نامعلوم خرابی")")
}
}
Android میں، درخواست ActivityResultLauncher کے ذریعے RequestPermission معاہدے کے ساتھ کی جاتی ہے۔ نیچے دی گئی مثال اجازت ملنے کے بعد ContactsContract.ContentProvider کے ساتھ کام دکھاتی ہے۔
val requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
if (isGranted) {
val uri = ContactsContract.Contacts.CONTENT_URI
val cursor = contentResolver.query(uri, null, null, null, null)
cursor?.use {
val nameIndex = it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
while (it.moveToNext()) {
val name = it.getString(nameIndex)
Log.d("Contacts", "رابطہ: $name")
}
}
} else {
// صارف کو رسائی کی ضرورت کی وجہ بتائیں
showRationaleDialog()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestPermissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
}
تجربہ کار موبائل ایپ ڈویلپر رابطوں کی اجازت کے ساتھ کام کرتے وقت ثابت شدہ طریقوں کے ایک سیٹ پر عمل کرتے ہیں۔ یہ قواعد ایپ اسٹور کی جانچ پڑتال پاس کرنے اور صارفین کا اعتماد برقرار رکھنے میں مدد کرتے ہیں۔ بہترین طریقوں پر عمل کرنا اشاعت اور دیکھ بھال کے عمل کو نمایاں طور پر آسان بناتا ہے۔
پہلی ایپ لانچ پر کبھی بھی رابطوں تک رسائی کی درخواست نہ کریں۔ پہلی درخواست کسی مخصوص فعالیت کے تناظر میں ہونی چاہیے: دوست تلاش کرنا، شرکاء کو مدعو کرنا، رابطے درآمد کرنا۔ Apptentive (2024) کی تحقیق کے مطابق، جو صارف درخواست کی وجہ سمجھتا ہے وہ 2–3 گنا زیادہ اتفاق کرتا ہے۔
اگر فعالیت کو صرف ایک رابطے تک رسائی کی ضرورت ہے، تو iOS پر CNContactPickerViewController یا Android پر ایک implicit intent ACTION_PICK استعمال کریں۔ ان طریقوں کو پیشگی اجازت کی ضرورت نہیں ہے اور یہ صارف کو ایپ کو پوری ایڈریس بک ظاہر کیے بغیر خود ایک ریکارڈ منتخب کرنے دیتے ہیں۔
ایپ کو ان حالات کو درست طریقے سے سنبھالنا چاہیے جہاں صارف رسائی سے انکار کرتا ہے۔ iOS پر، CNContactStore.authorizationStatus(for:) کے ذریعے حیثیت چیک کریں اور ضرورت پڑنے پر صارف کو ترتیبات پر لے جائیں۔ Android پر، دوبارہ درخواست کرنے سے پہلے اضافی وضاحت دکھانے کے لیے shouldShowRequestPermissionRationale استعمال کریں۔
انکار کے فوراً بعد دوسرا ڈائیلاگ کبھی نہ دکھائیں — اسے جارحانہ سمجھا جاتا ہے اور ایپ کی درجہ بندی کم کرتا ہے۔ بہترین طریقہ: کچھ دیر بعد، وضاحت کے ساتھ ایک اسکرین اور “ترتیبات پر جائیں” بٹن دکھائیں جو Intent کے ذریعے سسٹم کی اجازت کی اسکرین کھولتا ہے۔ حقیقی آلات پر انکار کے منظر نامے کی جانچ کریں — سمیلیٹر ہمیشہ سسٹم اجازت ڈائیلاگ کے رویے کو درست طریقے سے دوبارہ پیش نہیں کرتے۔
اکثر پوچھے گئے سوالات
ایپس دوست تلاش کرنے، شرکاء کو مدعو کرنے، فارم خودکار بھرنے اور سرور کے ساتھ ہم آہنگی جیسی خصوصیات کے لیے رابطوں تک رسائی کی درخواست کرتی ہیں۔ مثالیں: میسنجر فون نمبر سے رابطے تلاش کرتے ہیں، CRM ایپس کلائنٹ درآمد کرتی ہیں۔
واحد رابطہ رسائی (iOS 17+) CNContactPickerViewController کے ذریعے صارف کو پوری ایڈریس بک ظاہر کیے بغیر ایک رابطہ منتخب کرنے دیتی ہے۔ مکمل رسائی ایپ کو CNContactStore کے ذریعے تمام ڈیوائس رابطے پڑھنے دیتی ہے۔ واحد رابطہ رسائی زیادہ محفوظ ہے اور privacy manifest میں NSContactsUsageDescription بتانے کی ضرورت نہیں ہے۔
iOS پر، ترتیبات — رازداری اور سلامتی — رابطوں پر جائیں اور مخصوص ایپ کے لیے رسائی بند کریں۔ Android پر، ترتیبات — ایپس — ایپ منتخب کریں — اجازتیں — رابطے کھولیں اور “انکار کریں” منتخب کریں۔
Privacy Manifest (privacy.xcprivacy فائل) iOS 18+ کے لیے ایک لازمی دستاویز ہے، جس میں ڈویلپر رابطوں سمیت محفوظ ڈیٹا تک رسائی کی وجوہات کا اعلان کرتا ہے۔ NSContactsUsageDescription کلید میں ایک مقامی وضاحت ہوتی ہے جو سسٹم کی اجازت کی درخواست کے ڈائیلاگ میں دکھائی جاتی ہے۔
Android READ_CONTACTS کو خطرناک اجازت کے طور پر درجہ بندی کرتا ہے کیونکہ یہ صارف کے ذاتی ڈیٹا تک رسائی دیتی ہے۔ Android 6.0 میں متعارف کرایا گیا runtime permissions کا طریقہ کار، صرف ایپ انسٹالیشن کے دوران نہیں، بلکہ runtime پر واضح رضامندی کا تقاضا کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں