Mobil ishlanmada kontaktlarga kirish ruxsati — bu nima, qanday ishlaydi va kirish so'rovi

Muallif: IT Sectr Nashr etilgan: 2026-05-22 O'qish vaqti: 8 daq

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

  • Contacts Permission — iOS va Android-da foydalanuvchi kontaktlarini o'qish uchun majburiy ruxsat.
  • CNContactStore — Contacts framework orqali manzillar daftariga kirish uchun asosiy iOS sinfi.
  • Runtime permission — Android modeli, bunda READ_CONTACTS ruxsati bajarish vaqtida so'raladi.
  • Privacy manifest — iOS 18+ uchun majburiy fayl, kontaktlarga kirish sababini tavsiflaydi.
  • Bir martalik kirish — iOS 17+ rejimi, foydalanuvchiga manzillar daftarini to'liq ochmasdan bitta kontaktni ulashishga imkon beradi.

Kontaktlarga kirish ruxsati nima?

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.

iOS-da kontaktlarga kirish so'rovi qanday ishlaydi

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.

CNContactStore va bir martalik kirish

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 da Privacy manifest

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 so'rovi qanday ishlaydi

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 va runtime permission

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.

ContactsContract va ContentProvider

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.

Kontakt so'rovi uchun kod misollari

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.

Swift da kirish so'rovi

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.

swift
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")")
    }
}

Kotlin da kirish so'rovi

Android da so'rov RequestPermission kontrakti bilan ActivityResultLauncher orqali amalga oshiriladi. Quyidagi misolda ruxsat olingandan so'ng ContactsContract.ContentProvider bilan ishlash ko'rsatilgan.

kotlin
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)
}

Kontaktlar bilan ishlashning eng yaxshi amaliyotlari

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.

So'raladigan ruxsatlarni minimallashtirish

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.

Kirishni rad etishni qayta ishlash

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

Ilovaga kontaktlarga kirish nima uchun kerak?

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.

iOS da bir martalik va to'liq kirish o'rtasidagi farq nima?

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.

Kontakt ruxsatini qanday bekor qilish mumkin?

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.

iOS 18 da privacy manifest nima?

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.

Nega Android READ_CONTACTS ni aniq so'rashni talab qiladi?

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

  • Contacts Permission — iOS va Android da foydalanuvchining manzillar daftarini o'qish uchun majburiy ruxsat.
  • CNContactStore — Contacts framework orqali kirish so'rovi va kontakt operatsiyalari uchun asosiy iOS sinfi.
  • Runtime permission — Android 6.0+ mexanizmi, bajarish vaqtida READ_CONTACTS ni aniq so'rashni talab qiladi.
  • Privacy manifest — iOS 18+ uchun kontaktlarga kirish sabablari deklaratsiyasi bilan majburiy fayl.
  • Bir martalik kirish — iOS 17+ funksiyasi, bazani to'liq ochmasdan bitta kontaktni tanlash imkonini beradi.
  • Ma'lumotlarni minimallashtirish — kirishni faqat haqiqiy ehtiyoj momentida so'rash, birinchi ishga tushirishda emas.
  • Rad etishni qayta ishlash — ilova so'rovni rad etishga buzilmasdan yoki qayta taklif qilmasdan to'g'ri munosabat bildirishi kerak.

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.

Loyihani muhokama qilish

Shuningdek o'qing