Kalendarga kirish ruxsati mobil OT mexanizmi bo'lib, foydalanuvchining kalendar ma'lumotlarini ruxsatsiz o'qish va o'zgartirishdan himoya qiladi. iOS-da kalendarga kirish EventKit freymvorki orqali EKEventStore va EKCalendar sinflari bilan, Android-da esa READ_CALENDAR va WRITE_CALENDAR ruxsatlari CalendarContract API bilan birgalikda amalga oshiriladi. Apple Developer Documentation, 2025 ga ko'ra, iOS 18+ da kalendarga kirish uchun tizim dialogi orqali aniq so'rov talab qilinadi. EventKit barcha ulangan kalendarlarda hodisalarni o'qish va yaratish uchun yagona interfeysni ta'minlaydi.
Asosiy fikrlar
Kalendarga kirish ruxsati — qurilmadagi kalendar ilovalarida hodisalarni o'qish va yozishni boshqaradigan shaxsiy ma'lumotlarni himoya qilish mexanizmi. Kalendar maxfiy ma'lumotlarni o'z ichiga oladi: uchrashuvlar, muddatlar, eslatmalar va foydalanuvchining shaxsiy rejalari, shuning uchun mobil OTlar unga kirishni muhim deb tasniflaydi.
iOS da kalendarga kirish EventKit freymvorki bilan tartibga solinadi. Ilova hodisalarni o'qish va yozish uchun kirish so'rashi mumkin, foydalanuvchi esa tizim dialogi orqali so'rovni qabul qilishi yoki rad etishi mumkin. Android da himoya ikkita ruxsatga asoslanadi: READ_CALENDAR va WRITE_CALENDAR.
Pew Research Center (2024) tadqiqotiga ko'ra, mobil qurilma foydalanuvchilarining taxminan 45% muntazam ravishda kalendardan foydalanadi va ularning 62% kalendar ma'lumotlari so'rovining sababini tushuntirmaydigan ilovalarga kirishni rad etadi.
Asosiy tamoyil — ilova faqat to'g'ridan-to'g'ri kalendar bilan bog'liq funksiyalar uchun kirish so'rashi kerak: eslatmalar yaratish, hodisalarni sinxronlashtirish, jadvalni import qilish.
iOS-da kalendar va eslatmalarga kirish yagona EventKit freymvorki bilan ta'minlanadi. Markaziy sinf EKEventStore barcha operatsiyalarni boshqaradi: ruxsat so'rovi, hodisalarni o'qish, kalendar yozuvlarini yaratish va tahrirlash. requestAccess(to:entityType:) birinchi chaqirilganda tizim tushuntirish bilan mahalliy dialogni ko'rsatadi.
EKEventStore sinfi iOS kalendar quyi tizimiga kirish nuqtasidir. Kirish so'rash uchun requestAccess(to: .event) metodini mavjudlik turini (hodisa yoki eslatma) uzatib chaqirish kerak. Ruxsat olingandan so'ng, EKEventStore iCloud, Google, Exchange va boshqa provayderlar hisoblariga ulangan barcha kalendarlarga kirishni ta'minlaydi.
Muhim xususiyat: EKEventStore og'ir obyektdir, uni yaratish vaqt oladi va resurslarni sarflaydi. Uni bir marta yaratib, ilovaning hayot aylanishi davomida qayta ishlatish tavsiya etiladi. WWDC Session 10117 (2024) ga ko'ra, Apple ishlashni optimallashtirish uchun EventStore nusxasini keshlashni tavsiya qiladi.
iOS kalendarni o'qish va yozish uchun ruxsatlarni ajratmaydi — foydalanuvchi yoki to'liq kirish beradi yoki rad etadi. Biroq, ilova operatsiyalarni kod darajasida boshqarishi mumkin: hodisalarni EKEventStore.event bilan o'qish, EKEventStore.save bilan yaratish va EKEventStore.remove bilan o'chirish. iOS 18 dan boshlab faqat ma'lum bir mavjudlik turiga — .event yoki .reminder — kirish so'rash imkoniyati paydo bo'ldi.
iOS 17+ da Apple vaqtinchalik kirish mexanizmini taqdim etdi: ba'zi ilovalar foydalanuvchining bir martalik tasdig'idan so'ng 24 soat davomida kirish olishi mumkin. Bu funksiya, ayniqsa, kalendarga bir martalik ehtiyoji bo'lgan ilovalar uchun foydalidir — masalan, konferensiya jadvalini import qilish uchun.
Android-da kalendarga kirish ikki alohida ruxsat bilan himoyalangan: READ_CALENDAR va WRITE_CALENDAR. Ikkalasi ham xavfli toifaga kiradi va ish vaqtida so'rovni talab qiladi. O'qish va yozishga bo'linish foydalanuvchiga ilovaning kirish darajasini nozik sozlash imkonini beradi.
READ_CALENDAR ruxsati ilovaga foydalanuvchining barcha kalendarlaridan nomlar, vaqt, ishtirokchilar va tavsifni o'z ichiga olgan holda hodisalarni o'qish imkonini beradi. WRITE_CALENDAR ruxsati hodisalarni yaratish, o'zgartirish va o'chirish imkonini beradi. Ikkalasi manifestda uses-permission tegi orqali ko'rsatiladi va ActivityResultLauncher orqali ish vaqtida so'raladi.
Android 14 (API 34) dan boshlab, agar ilova ikkala ruxsatni bir vaqtda so'rasa, tizim foydalanuvchini ogohlantiradi. Ularni alohida so'rash tavsiya etiladi: avval o'qish uchun READ_CALENDAR, keyin hodisa yaratishga birinchi urinishda WRITE_CALENDAR. Google I/O 2024 ga ko'ra, bu yondashuv rad etish foizini 23% ga kamaytiradi.
CalendarContract — kalendar ma'lumotlarini relyatsion jadvallarga strukturalashtiradigan Android ContentProvider. Asosiy jadvallar: Calendars (kalendarlar ro'yxati), Events (hodisalar), Attendees (ishtirokchilar), Reminders (eslatmalar). Ma'lumotlarga kirish URI va proyeksiyani ko'rsatgan holda ContentResolver.query() orqali amalga oshiriladi.
Yangi hodisa kiritish uchun kalendar, boshlanish va tugash vaqti, sarlavha va tavsifni ko'rsatgan holda ContentValues dan foydalanish kerak. CalendarContract vaqt mintaqalarini, takrorlanuvchi hodisalarni va sozlanishi mumkin bo'lgan ogohlantirish oralig'i bilan eslatmalarni qo'llab-quvvatlaydi.
Kalendarga kirish so'rovini amalga oshirish platforma xususiyatlarini hisobga olishni talab qiladi. Quyida EventKit va CalendarContract bilan to'g'ri ishlashni ko'rsatadigan Swift va Kotlin namunalari keltirilgan.
iOS kalendarga kirish so'rovi EKEventStore sinfining requestAccess metodi orqali amalga oshiriladi. Quyidagi misol ruxsat olingandan so'ng hodisa yaratishni ko'rsatadi.
import EventKit
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event) { granted, error in
guard granted else {
print("Kalendarga kirish rad etildi")
return
}
let event = EKEvent(eventStore: eventStore)
event.title = "Jamoa uchrashuvi"
event.startDate = Date()
event.endDate = Date(timeIntervalSinceNow: 3600)
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
print("Hodisa yaratildi: \(event.eventIdentifier)")
} catch {
print("Saqlash xatosi: \(error.localizedDescription)")
}
}
Android-da READ_CALENDAR va WRITE_CALENDAR ruxsatlarini so'rash ActivityResultLauncher orqali amalga oshiriladi. Misol kirish olingandan so'ng foydalanuvchi kalendaridan hodisalarni o'qishni ko'rsatadi.
val calendarPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
if (permissions[Manifest.permission.READ_CALENDAR] == true) {
val uri = CalendarContract.Events.CONTENT_URI
val projection = arrayOf(
CalendarContract.Events.TITLE,
CalendarContract.Events.DTSTART,
CalendarContract.Events.DTEND
)
val cursor = contentResolver.query(uri, projection, null, null, null)
cursor?.use {
val titleIndex = it.getColumnIndex(CalendarContract.Events.TITLE)
while (it.moveToNext()) {
Log.d("Calendar", "Hodisa: ${it.getString(titleIndex)}")
}
}
} else {
// Tushuntirishni ko'rsat va sozlamalarga o'tishni taklif qil
requestPermissionSettingsRedirect()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
calendarPermissionLauncher.launch(
arrayOf(Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR)
)
}
Kalendar ruxsatlari bilan ishlash ikkala platformaning talablari va foydalanuvchilarning kutishlarini hisobga oladigan o'ylangan strategiyani talab qiladi. Quyidagi tavsiyalarga amal qilish moderatsiyadan o'tishga va kirish foizini oshirishga yordam beradi.
Kalendarga kirishni faqat foydalanuvchi kalendar ma'lumotlarini talab qiladigan harakatni bajarayotganda so'rang: „Kalendarga qo'shish”, „Jadvalni sinxronlashtirish”, „Hodisalarni import qilish”. Ruxsatdan oldingi dialog (tizim dialogidan oldin o'z dialogingiz) bilan oldindan tushuntirish, Localytics (2024) ma'lumotlariga ko'ra, rozilik foizini 35% ga oshiradi.
iOS da privacy manifestda NSCalendarsUsageDescription kalitini aniq matn bilan ishlating. „Hodisalar yaratish uchun” o'rniga „Mashg'ulotlaringizni kalendaringizga qo'shish uchun” deb yozing. Aniq ifoda so'rov konversiyasini 20–30% ga oshiradi.
Agar foydalanuvchi so'rovni rad etgan bo'lsa, tizim dialogini qayta ko'rsatmang — bu Android-da neverAskAgain ishga tushishiga yoki iOS-da dialog mavjud bo'lmasligiga olib keladi. Buning o'rniga Android-da Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) yoki iOS-da UIApplication.openSettingsURLString orqali sozlamalarga o'tishni taklif qiling.
Ekranqa qayta kirganda ruxsat holatini tekshiring. iOS da EKEventStore.authorizationStatus(for: .event) ni chaqiring va UI ni joriy holatga mos ravishda yangilang. Android da joriy holatni tekshirish va sozlamalarga o'tish tugmasini ko'rsatish to'g'risida qaror qabul qilish uchun ContextCompat.checkSelfPermission() dan foydalaning.
Tez-tez beriladigan savollar
Ilovalar hodisalar yaratish, jadvalni sinxronlashtirish, muddatlarni import qilish va eslatmalar bilan integratsiya qilish uchun kalendarga kirishni so'raydi. Misollar: fitness trekerlari mashg'ulotlarni qo'shadi, rejalashtiruvchilar vazifalarni yaratadi, sayohat ilovalari esa foydalanuvchi kalendariga parvozlarni import qiladi.
READ_CALENDAR foydalanuvchining barcha hodisalari va kalendarlarini o'qish imkonini beradi. WRITE_CALENDAR hodisalarni yaratish, o'zgartirish va o'chirish imkonini beradi. Foydalanuvchi bir ruxsatni boshqarisiz berishi mumkin, bu esa ilovaning kalendar ma'lumotlariga kirish darajasi ustidan moslashuvchan nazoratni ta'minlaydi.
Sozlamalar — Maxfiylik va xavfsizlik — Kalendarlar bo'limini oching. Ilovani tanlang va kirish kalitini o'chiring. Ilova keyingi aniq so'rov va foydalanuvchi tasdig'igacha hodisalarni o'qish va yaratish qobiliyatini yo'qotadi.
Ilova hodisalarni o'qiy olmaydi yoki yarata olmaydi. requestAccess metodi iOS da granted = false qaytaradi yoki checkSelfPermission Android da PERMISSION_DENIED qaytaradi. Dasturchi graceful degradation — ilovaning kalendar funksiyalarisiz ishlashda davom etishi, qulamasligi va xatolarni ko'rsatmasligini ta'minlashi kerak.
iOS da bunday imkoniyat yo'q — EventKit hodisalar bilan har qanday operatsiyalar uchun to'liq kirishni talab qiladi. Android da tizim kalendar ilovasi orqali hodisa yaratish uchun Intent.ACTION_INSERT dan foydalanishingiz mumkin, bu ish vaqti ruxsatlarini talab qilmaydi, lekin mavjud hodisalarni o'qish imkonini ham bermaydi.
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.