Kontaktlarga kirish ruxsati mobil OT mexanizmi bo'lib, qurilmaning manzillar daftarini o'qishdan oldin foydalanuvchining aniq roziligini talab qiladi. iOS-da kontaktlarga kirish CNContactStore orqali, Android-da esa Contacts API va runtime permissions tizimi orqali amalga oshiriladi. Apple Developer Documentation, 2025 ma'lumotlariga ko'ra, iOS 18 dan boshlab barcha ilovalar yagona Contacts Access API dan foydalanishi shart. To'g'ri amalga oshirish ruxsat so'rovi ilovalar do'konlari moderatsiyasi tomonidan ma'qullanish imkoniyatini oshiradi.
Asosiy fikrlar
Kontaktlarga kirish ruxsati foydalanuvchining manzillar daftarini uchinchi tomon ilovalari tomonidan ruxsatsiz o'qilishidan himoya qiluvchi operatsion tizim mexanizmidir. Mobil OTlarda kontaktlar maxfiy ma'lumotlar hisoblanadi, chunki ular foydalanuvchi atrofidagi odamlarning ismlari, telefon raqamlari, elektron pochta manzillari va fotosuratlarini o'z ichiga oladi.
iOS-da ruxsat Contacts framework va CNContactStore sinfi tomonidan tartibga solinadi. Foydalanuvchi birinchi kirish so'rovida tizim dialogini ko'radi, bu erda kirishni taqdim etish yoki so'rovni rad etishni tanlashi mumkin. Android-da himoya runtime permissions tizimiga asoslanadi: ilova manifestda READ_CONTACTS ni belgilaydi va bajarish vaqtida ActivityResultLauncher yoki natijani qayta ishlash bilan fragment orqali so'raydi.
Statista (2025) ma'lumotlariga ko'ra, iOS foydalanuvchilarining 68% dan ortig'i va Android foydalanuvchilarining 54% i birinchi ilova so'rovida kontaktlarga kirishni rad etadi. Bu shuni anglatadiki, dasturchi nafaqat so'rovni to'g'ri amalga oshirishi, balki foydalanuvchiga kirish zaruriyatining sababini tushuntirishi kerak.
Sanoat standarti — kirishni faqat funksionallik haqiqatan ham zarur bo'lganda so'rash, birinchi ishga tushirishda emas. Bunday yondashuv rad etish foizini kamaytiradi va foydalanuvchi tajribasini yaxshilaydi.
Apple ekotizimida kontaktlarga kirish iOS 9 da taqdim etilgan Contacts framework tomonidan tartibga solinadi. CNContactStore sinfi ruxsat so'rash va o'qish/yozish operatsiyalarini bajarish uchun usullarni taqdim etadi. requestAccess(for:) birinchi chaqiruvida tizim kirish sababini tushuntirish bilan native dialog ko'rsatadi.
iOS 17 dan boshlab, Apple bir martalik kirish (single contact access) rejimini taqdim etdi. Foydalanuvchi manzillar daftaridan bitta kontaktni tanlab, butun bazani ochmasdan ilovaga uzatishi mumkin. Rejim CNContactPickerViewController orqali amalga oshiriladi va requestAccess(for:) chaqiruvini talab qilmaydi.
Dasturchi tushunishi kerak: agar ilova to'liq kirishni so'rasa, ammo funksional jihatdan bitta kontakt yetarli bo'lsa, App Store moderatorlari buildni rad etishi mumkin. Apple App Review Guidelines (2025), 5.1.1 bo'limi, aniq ravishda minimal zarur ma'lumotlar hajmini talab qiladi.
iOS 18 chiqishi bilan Apple Privacy Manifest — privacy.xcprivacy fayliga talablarni kuchaytirdi, unda dasturchi himoyalangan ma'lumotlarga kirish sababini deklaratsiya qiladi. Kontaktlar uchun tizim dialogida ko'rsatiladigan lokalizatsiya qilingan matn bilan NSContactsUsageDescription kaliti ishlatiladi.
To'g'ri privacy manifest bo'lmasa, ilova App Store Connect moderatsiyasidan o'tmaydi. Tavsif matni aniq bo'lishi kerak: “Ishni yaxshilash uchun” emas, balki “Telefon raqami orqali do'stlarni qidirish uchun”.
Android-da kontaktlarga kirish xavfli (dangerous) toifasiga kiruvchi READ_CONTACTS ruxsati bilan himoyalangan — uni nafaqat o'rnatish vaqtida, balki bajarish vaqtida ham so'rash kerak. Runtime permissions mexanizmi Android 6.0 (API 23) da joriy qilingan va maxfiy ma'lumotlarni himoya qilishning asosiy usuli bo'lib qolmoqda.
READ_CONTACTS ruxsati manifestda uses-permission tegi orqali ko'rsatiladi va kodda ActivityResultLauncher yoki onRequestPermissionsResult bilan fragment orqali so'raladi. Foydalanuvchi so'rovni rad etishi yoki “Boshqa so'rama” variantini tanlashi mumkin, shundan so'ng ilova rad etishni to'g'ri qayta ishlashi kerak.
Android 14 (API 34) dan boshlab, runtime permissions xatti-harakati o'zgardi: ketma-ket ikkita so'rov rad etilganda, OT avtomatik ravishda neverAskAgain bayrog'ini o'rnatadi. Google Developer Documentation (2024) ga ko'ra, dasturchi qayta so'rovdan oldin shouldShowRequestPermissionRationale orqali holatni tekshirishi kerak.
Kontaktlarni o'qish uchun Android ContactsContract nomli ContentProvider dan foydalanadi. Bu ContentResolver orqali kirish mumkin bo'lgan tuzilgan ma'lumotlar bazasidir. Ma'lumotlar bir nechta jadvallarda tashkil etilgan: Contacts (kontaktlar), RawContacts (turli hisoblardan xom yozuvlar), Data (batafsil ma'lumot: telefonlar, elektron pochta, manzillar).
ContactsContract so'rovi ContactsContract.Contacts.CONTENT_URI orqali amalga oshiriladi. Dasturchi minimal ustunlarni so'rashi va maydonlarni filtrlash uchun proyeksiyadan foydalanishi kerak — bu so'rov bajarilishini tezlashtiradi va xotira sarfini kamaytiradi.
Kontaktlarga kirish so'rovining amaliy bajarilishi iOS va Android da farqlanadi. Quyida Swift va Kotlin tillarida ruxsatning barcha mumkin bo'lgan holatlarini qayta ishlash bilan aniq misollar keltirilgan.
iOS da so'rov CNContactStore sinfining requestAccess metodi orqali amalga oshiriladi. Natija mantiqiy qiymat va ixtiyoriy xato bilan closure da qaytariladi. Quyidagi misol holatni qayta ishlash bilan to'liq so'rov siklini namoyish etadi.
import Contacts
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in
if granted {
print("Kontaktlarga kirish olindi")
// Kontakt operatsiyalarini bajarish
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("Kirish rad etildi: \(error?.localizedDescription ?? "noma'lum xato")")
}
}
Android da so'rov RequestPermission kontrakti bilan ActivityResultLauncher orqali amalga oshiriladi. Quyidagi misolda ruxsat olingandan so'ng ContactsContract.ContentProvider bilan ishlash ko'rsatilgan.
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", "Contact: $name")
}
}
} else {
// Foydalanuvchiga kirish zaruriyati sababini tushuntirish
showRationaleDialog()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestPermissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
}
Tajribali mobil ilova dasturchilari kontaktlarga kirish ruxsati bilan ishlashda bir qator tasdiqlangan amaliyotlarga amal qiladilar. Ushbu qoidalar ilovalar do'konlari moderatsiyasidan o'tishga va foydalanuvchilarning ishonchini saqlashga yordam beradi. Eng yaxshi amaliyotlarga rioya qilish nashr qilish va ilovani qo'llab-quvvatlash jarayonini sezilarli darajada soddalashtiradi.
Hech qachon ilovani birinchi ishga tushirishda kontaktlarga kirishni so'ramang. Birinchi so'rov aniq funksiya kontekstida bo'lishi kerak: do'stlarni qidirish, ishtirokchilarni taklif qilish, kontaktlarni import qilish. So'rov sababini tushunadigan foydalanuvchi Apptentive (2024) tadqiqotlari ko'rsatganidek, 2-3 marta ko'proq rozi bo'ladi.
Agar funksionallik bitta kontakt uchun yetarli bo'lsa — iOS da CNContactPickerViewController yoki Android da implicit intent ACTION_PICK dan foydalaning. Bu usullar oldindan ruxsat talab qilmaydi va foydalanuvchiga butun manzillar daftarini ilovaga ochmasdan mustaqil ravishda yozuv tanlash imkonini beradi.
Ilova foydalanuvchi so'rovni rad etgan vaziyatni to'g'ri qayta ishlashi kerak. iOS da holatni CNContactStore.authorizationStatus(for:) orqali tekshiring va kerak bo'lganda foydalanuvchini Sozlamalarga yo'naltiring. Android da qayta so'rovdan oldin qo'shimcha tushuntirish ko'rsatish uchun shouldShowRequestPermissionRationale dan foydalaning.
Rad etishdan so'ng darhol takroriy dialog ko'rsatmang — bu tajovuzkorlik sifatida qabul qilinadi va ilova reytingini pasaytiradi. Eng yaxshi amaliyot: bir muncha vaqt o'tgach, tushuntirish va “Sozlamalarga o'tish” tugmasi bilan ekranni ko'rsating, u Intent orqali tizim ruxsatlar ekranini ochadi. Rad etish stsenariysini haqiqiy qurilmalarda sinab ko'ring — simulyatorlar har doim ham tizim ruxsat dialoglarining xatti-harakatini to'g'ri aks ettirmaydi.
Tez-tez so'raladigan savollar
Ilovalar do'stlarni qidirish, ishtirokchilarni taklif qilish, formalarni avtomatik to'ldirish va server bilan sinxronizatsiya funksiyalari uchun kontaktlarga kirishni so'raydi. Misollar: messenjerlar telefon raqami bo'yicha kontaktlarni qidiradi, CRM ilovalari mijozlarni import qiladi.
Bir martalik kirish (iOS 17+) CNContactPickerViewController orqali foydalanuvchiga butun manzillar daftarini ochmasdan bitta kontaktni tanlash imkonini beradi. To'liq kirish ilovaga CNContactStore orqali qurilmaning barcha kontaktlarini o'qishga ruxsat beradi. Bir martalik kirish xavfsizroq va privacy manifest da NSContactsUsageDescription ko'rsatilishini talab qilmaydi.
iOS da Sozlamalar — Maxfiylik va xavfsizlik — Kontaktlar bo'limiga o'ting va ma'lum bir ilova uchun kirishni o'chiring. Android da Sozlamalar — Ilovalar — ilovani tanlang — Ruxsatlar — Kontaktlar bo'limini oching va “Rad etish” ni tanlang.
Privacy Manifest (privacy.xcprivacy fayli) — iOS 18+ uchun majburiy hujjat bo'lib, unda dasturchi kontaktlar ham kiradigan himoyalangan ma'lumotlarga kirish sabablarini deklaratsiya qiladi. NSContactsUsageDescription kaliti ruxsat so'rovi tizim dialogida ko'rsatiladigan lokalizatsiya qilingan tavsifni o'z ichiga oladi.
Android READ_CONTACTS ni xavfli ruxsat (dangerous permission) sifatida tasniflaydi, chunki u foydalanuvchining shaxsiy ma'lumotlariga kirish beradi. Android 6.0 da joriy qilingan runtime permissions mexanizmi faqat o'rnatish vaqtida emas, balki bajarish vaqtida ham aniq rozilik talab qiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.