Təqvimə giriş icazəsi mobil ƏS-lərin istifadəçinin təqvim məlumatlarını icazəsiz oxunma və dəyişdirilmədən qoruyan mexanizmidir. iOS-da təqvimə giriş EventKit çərçivəsi vasitəsilə EKEventStore və EKCalendar sinifləri ilə, Android-də isə READ_CALENDAR və WRITE_CALENDAR icazələri CalendarContract API ilə birlikdə həyata keçirilir. Apple Developer Documentation, 2025-yə görə, iOS 18+ təqvimə giriş üçün sistem dialoqu vasitəsilə açıq sorğu tələb edir. EventKit bütün qoşulmuş təqvimlərdə hadisələri oxumaq və yaratmaq üçün vahid interfeys təmin edir.
Əsas məqamlar
Təqvimə giriş icazəsi — cihazın təqvim tətbiqlərində hadisələrin oxunmasını və yazılmasını idarə edən şəxsi məlumatların qorunması mexanizmidir. Təqvim məxfi məlumatları ehtiva edir: görüşlər, son tarixlər, xatırlatmalar və istifadəçinin şəxsi planları, buna görə mobil ƏS-lər ona girişi kritik olaraq təsnif edir.
iOS-da təqvimə giriş EventKit çərçivəsi ilə tənzimlənir. Tətbiq hadisələri oxumaq və yazmaq üçün giriş istəyə bilər, istifadəçi isə sistem dialoqu vasitəsilə sorğunu qəbul edə və ya rədd edə bilər. Android-də qoruma iki icazəyə əsaslanır: READ_CALENDAR və WRITE_CALENDAR.
Pew Research Center (2024) tədqiqatına görə, mobil cihaz istifadəçilərinin təxminən 45%-i mütəmadi olaraq təqvimdən istifadə edir və onların 62%-i təqvim məlumatlarının sorğunun səbəbini izah etməyən tətbiqlərə girişi rədd edir.
Əsas prinsip — tətbiq yalnız birbaşa təqvimlə əlaqəli funksiyalar üçün giriş istəməlidir: xatırlatmaların yaradılması, hadisələrin sinxronlaşdırılması, cədvəlin idxalı.
iOS-da təqvimə və xatırlatmalara giriş vahid EventKit çərçivəsi ilə təmin edilir. Mərkəzi sinif EKEventStore bütün əməliyyatları idarə edir: icazə sorğusu, hadisələrin oxunması, təqvim qeydlərinin yaradılması və redaktəsi. requestAccess(to:entityType:) ilk çağırıldıqda sistem izahatla birlikdə yerli dialoqu göstərir.
EKEventStore sinfi iOS təqvim alt sisteminə giriş nöqtəsidir. Giriş istəmək üçün requestAccess(to: .event) metodunu varlıq növünü (hadisə və ya xatırlatma) ötürək çağırmaq lazımdır. İcazə alındıqdan sonra EKEventStore iCloud, Google, Exchange və digər provayderlərin hesablarına qoşulmuş bütün təqvimlərə giriş təmin edir.
Əhəmiyyətli xüsusiyyət: EKEventStore ağır obyektdir, onun yaradılması vaxt aparır və resurslar sərf edir. Bir dəfə yaradılması və tətbiqin həyat dövrü ərzində təkrar istifadə edilməsi tövsiyə olunur. WWDC Session 10117 (2024)-yə görə, Apple performansı optimallaşdırmaq üçün EventStore nüsxəsinin keşlənməsini tövsiyə edir.
iOS təqvimin oxunması və yazılması üçün icazələri ayırmır — istifadəçi ya tam giriş verir, ya da rədd edir. Bununla belə, tətbiq əməliyyatları kod səviyyəsində idarə edə bilər: hadisələri EKEventStore.event ilə oxumaq, EKEventStore.save ilə yaratmaq və EKEventStore.remove ilə silmək. iOS 18-dən etibarən yalnız müəyyən varlıq növünə — .event və ya .reminder — giriş istəmək imkanı yaranmışdır.
iOS 17+ Apple müvəqqəti giriş mexanizmini təqdim etdi: bəzi tətbiqlər istifadəçinin bir dəfəlik təsdiqindən sonra 24 saat müddətinə giriş əldə edə bilər. Bu funksiya xüsusilə təqvimə bir dəfəlik ehtiyacı olan tətbiqlər üçün faydalıdır — məsələn, konfrans cədvəlini idxal etmək üçün.
Android-də təqvimə giriş iki ayrı icazə ilə qorunur: READ_CALENDAR və WRITE_CALENDAR. Hər ikisi təhlükəli kateqoriyaya aiddir və icra zamanı sorğu tələb edir. Oxuma və yazmaya bölünmə istifadəçiyə tətbiqin giriş səviyyəsini incə tənzimləməyə imkan verir.
READ_CALENDAR icazəsi tətbiqə istifadəçinin bütün təqvimlərindən adlar, vaxt, iştirakçılar və təsvir daxil olmaqla hadisələri oxumaq imkanı verir. WRITE_CALENDAR icazəsi hadisələri yaratmağa, dəyişdirməyə və silməyə imkan verir. Hər ikisi manifestdə uses-permission etiketi ilə göstərilir və ActivityResultLauncher vasitəsilə icra zamanı sorğulur.
Android 14-dən (API 34) başlayaraq, sistem tətbiq hər iki icazəni eyni anda sorğduqda istifadəçini xəbərdar edir. Onları ayrılıqda sorğmaq tövsiyə olunur: əvvəlcə oxuma üçün READ_CALENDAR, sonra hadisə yaratmağa ilk cəhddə WRITE_CALENDAR. Google I/O 2024-yə görə, bu yanaşma imtina faizini 23% azaldır.
CalendarContract — təqvim məlumatlarını relasiya cədvəllərinə strukturlaşdıran Android ContentProvider-dır. Əsas cədvəllər: Calendars (təqvimlər siyahısı), Events (hadisələr), Attendees (iştirakçılar), Reminders (xatırlatmalar). Məlumatlara giriş URI və proyeksiya ilə ContentResolver.query() vasitəsilə həyata keçirilir.
Yeni hadisə daxil etmək üçün təqvim, başlanğıc və bitiş vaxtı, başlıq və təsvir göstərilməklə ContentValues istifadə edilməlidir. CalendarContract saat qurşaqlarını, təkrarlanan hadisələri və konfiqurasiya edilə bilən xəbərdarlıq intervalı ilə xatırlatmaları dəstəkləyir.
Təqvimə giriş sorğusunun tətbiqi platforma xüsusiyyətlərinin nəzərə alınmasını tələb edir. Aşağıda EventKit və CalendarContract ilə düzgün işi nümayiş etdirən Swift və Kotlin nümunələri verilmişdir.
iOS təqvimə giriş sorğusu EKEventStore sinfinin requestAccess metodu vasitəsilə həyata keçirilir. Aşağıdakı nümunə icazə alındıqdan sonra hadisə yaratmağı göstərir.
import EventKit
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event) { granted, error in
guard granted else {
print("Təqvimə giriş rədd edildi")
return
}
let event = EKEvent(eventStore: eventStore)
event.title = "Komanda görüşü"
event.startDate = Date()
event.endDate = Date(timeIntervalSinceNow: 3600)
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
print("Hadisə yaradıldı: \(event.eventIdentifier)")
} catch {
print("Yaddaş xətası: \(error.localizedDescription)")
}
}
Android-də READ_CALENDAR və WRITE_CALENDAR icazələrinin sorğusu ActivityResultLauncher vasitəsilə həyata keçirilir. Nümunə giriş əldə edildikdən sonra istifadəçinin təqvimindən hadisələrin oxunmasını göstərir.
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", "Hadisə: ${it.getString(titleIndex)}")
}
}
} else {
// İzahı göstər və tənzimləmələrə keçməyi təklif et
requestPermissionSettingsRedirect()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
calendarPermissionLauncher.launch(
arrayOf(Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR)
)
}
Təqvim icazələri ilə iş hər iki platformanın tələblərini və istifadəçilərin gözləntilərini nəzərə alan düşünülmüş strategiya tələb edir. Aşağıdakı tövsiyələrə əməl etmək moderasiyadan keçməyə və giriş faizini artırmağa kömək edir.
Təqvimə girişi yalnız istifadəçi təqvim məlumatları tələb edən hərəkət etdikdə sorışın: “Təqvimə əlavə et”, “Cədvəli sinxronlaşdır”, “Hadisələri idxal et”. İcazə öncəsi dialoq (sistem dialoqundan əvvəl öz dialoqu) ilə əvvəlcədən izah etmə, Localytics (2024) məlumatlarına görə, razılıq faizini 35% artırır.
iOS-da privacy manifest-də NSCalendarsUsageDescription açarını konkret mətnlə istifadə edin. “Hadisələr yaratmaq üçün” əvəzinə “Təlimlərinizi təqviminizə əlavə etmək üçün” yazın. Konkret ifadə sorğunun konversiyasını 20–30% artırır.
İstifadəçi sorğunu rədd edɐrsə, sistem dialoqunu təkrar göstərməyin — bu Android-də neverAskAgain işə düşməsinə və ya iOS-da dialoqun əlçatan olmamasına səbəb olar. Bunun əvəzinə Android-də Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) və ya iOS-da UIApplication.openSettingsURLString vasitəsilə tənzimləmələrə keçməyi təklif edin.
Ekrana təkrar daxil olarkən icazə statusunu yoxlayın. iOS-da EKEventStore.authorizationStatus(for: .event) çağırın və UI-ni cari statusa uyğun yeniləyin. Android-də cari vəziyyəti yoxlamaq və tənzimləmələrə keçid düməsini göstərmək qərarı vermək üçün ContextCompat.checkSelfPermission() istifadə edin.
Tez-tez verilən suallar
Tətbiqlər hadisələr yaratmaq, cədvəli sinxronlaşdırmaq, son tarixləri idxal etmək və xatırlatmalarla inteqrasiya etmək üçün təqvimə giriş istəyir. Nümunələr: fitnes trekerləri məşqlər əlavə edir, planlayıcılar tapşırıqlar yaradır, səyahət tətbiqləri isə istifadəçinin təqviminə uçuşları idxal edir.
READ_CALENDAR istifadəçinin bütün hadisə və təqvimlərini oxumağa imkan verir. WRITE_CALENDAR hadisələr yaratmağa, dəyişdirməyə və silməyə imkan verir. İstifadəçi digəri olmadan bir icazə verə bilər ki, bu da tətbiqin təqvim məlumatlarına giriş səviyyəsi üzərində çevik nəzarət təmin edir.
Tənzimləmələr — Məxfilik və təhlükəsizlik — Təqvimlər bölməsini açın. Tətbiqi seçin və giriş açarını söndürün. Tətbiq növbəti açıq sorğu və istifadəçinin təsdiqinə qədər hadisələri oxumaq və yaratmaq qabiliyyətini itirəcək.
Tətbiq hadisələri oxuya və ya yarada bilməyɐcək. requestAccess metodu iOS-da granted = false qaytaracaq və ya checkSelfPermission Android-də PERMISSION_DENIED qaytaracaq. Tərtibatçı graceful degradation — tətbiqin təqvim funksiyaları olmadan işləməyə davam etməsi, çökməməsi və xəta göstərməməsi — təmin etməlidir.
iOS-da belə bir imkan yoxdur — EventKit hadisələrlə hər hansı əməliyyat üçün tam giriş tələb edir. Android-də sistem təqvim tətbiqi vasitəsilə hadisə yaratmaq üçün Intent.ACTION_INSERT istifadə edə bilərsiniz, bu icra zamanı icazələri tələb etmir, lakin mövcud hadisələri oxumağa da imkan vermir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun