Mobil geliştirmede takvim erişim izni — nedir, nasıl çalışır ve erişim talebi

Yazar: IT Sectr Yayınlanma: 2026-05-22 Okuma süresi: 8 dk

Takvim erişim izni, kullanıcının takvim verilerini yetkisiz okuma ve değiştirmeye karşı koruyan bir mobil işletim sistemi mekanizmasıdır. iOS'ta takvim erişimi, EKEventStore ve EKCalendar sınıflarıyla EventKit çerçevesi aracılığıyla uygulanırken, Android'de — READ_CALENDAR ve WRITE_CALENDAR izinleriyle CalendarContract API'si aracılığıyla uygulanır. Apple Developer Documentation, 2025'e göre, iOS 18+ üzerinde takvime erişmek için sistem diyalogu aracılığıyla açık bir talep gerekir. EventKit, bağlı tüm takvimlerde etkinlikleri okumak ve oluşturmak için birleşik bir arayüz sağlar.

Önemli Noktalar

  • Calendar Permission — iOS ve Android'de kullanıcının takvimine erişmek için korunan bir izin.
  • EventKit — EKEventStore aracılığıyla takvimler ve hatırlatıcılarla çalışmak için Apple'ın çerçevesi.
  • READ_CALENDAR — Kullanıcının takvim etkinliklerini okumak için Android'in tehlikeli izni.
  • EKEventStore — Erişim talep etmek ve etkinliklerle işlem yapmak için merkezi iOS sınıfı.
  • CalendarContract — Takvim verilerine yapılandırılmış erişim sağlayan bir Android ContentProvider.

Takvim erişim izni nedir?

Takvim erişim izni, cihazın takvim uygulamalarındaki etkinliklerin okunmasını ve yazılmasını kontrol eden bir kişisel veri koruma mekanizmasıdır. Takvim hassas bilgiler içerir: toplantılar, son teslim tarihleri, hatırlatıcılar ve kişisel planlar — bu nedenle mobil işletim sistemleri buna erişimi kritik olarak sınıflandırır.

iOS'ta takvim erişimi EventKit çerçevesi tarafından düzenlenir. Bir uygulama etkinliklere okuma ve yazma erişimi talep edebilir ve kullanıcı sistem diyalogu aracılığıyla talebi kabul edebilir veya reddedebilir. Android'de koruma, iki çalışma zamanı iznine dayanır: READ_CALENDAR ve WRITE_CALENDAR.

Pew Research Center (2024) tarafından yapılan bir araştırmaya göre, mobil cihaz kullanıcılarının yaklaşık %45'i düzenli olarak takvim kullanıyor ve bunların %62'si takvim verilerini talep etme nedenini açıklamayan uygulamalara erişimi reddediyor.

Temel ilke — bir uygulama yalnızca takvimle doğrudan ilgili özellikler için erişim talep etmelidir: hatırlatıcı oluşturma, etkinlikleri senkronize etme, programları içe aktarma.

iOS'ta takvim erişim talebi nasıl çalışır

iOS'ta takvim ve hatırlatıcılara erişim, tek bir çerçeve olan EventKit aracılığıyla sağlanır. Merkezi EKEventStore sınıfı tüm işlemleri yönetir: izin talep etme, etkinlikleri okuma, takvim girişleri oluşturma ve düzenleme. requestAccess(to:entityType:) ilk çağrıldığında, sistem bir açıklama ile yerel bir diyalog görüntüler.

EventKit ve EKEventStore

EKEventStore sınıfı, iOS takvim alt sistemine giriş noktasıdır. Erişim talep etmek için requestAccess(to: .event) yöntemini çağırmanız ve varlık türünü (etkinlik veya hatırlatıcı) iletmeniz gerekir. İzin alındıktan sonra, EKEventStore iCloud, Google, Exchange ve diğer sağlayıcılara bağlı tüm takvimlere erişim sağlar.

Önemli bir özellik: EKEventStore ağır bir nesnedir — oluşturulması zaman alır ve kaynak tüketir. Bir kez başlatılması ve uygulama yaşam döngüsü boyunca yeniden kullanılması önerilir. WWDC Session 10117 (2024)'ye göre Apple, performans optimizasyonu için EventStore örneğini önbelleğe almayı önerir.

Erişim türleri: okuma ve yazma

iOS, takvim okuma ve yazma izinlerini ayırmaz — kullanıcı ya tam erişim verir ya da reddeder. Ancak uygulama, kod düzeyinde işlemleri kontrol edebilir: EKEventStore.event ile etkinlikleri okuma, EKEventStore.save ile oluşturma ve EKEventStore.remove ile silme. iOS 18'den itibaren, yalnızca belirli bir varlık türüne (.event veya .reminder) erişim talep etmek mümkündür.

iOS 17+'da Apple geçici erişim mekanizması tanıttı: bazı uygulamalar, kullanıcının tek seferlik onayından sonra 24 saat boyunca erişim elde edebilir. Bu özellik, tek seferlik takvim erişimine ihtiyaç duyan uygulamalar için özellikle yararlıdır — örneğin, bir konferans programını içe aktarmak için.

Android'de takvim erişim talebi nasıl çalışır

Android'de takvim erişimi iki ayrı izinle korunur: READ_CALENDAR ve WRITE_CALENDAR. Her ikisi de tehlikeli kategorisine aittir ve çalışma zamanı talebi gerektirir. Okuma ve yazmanın ayrılması, kullanıcının uygulamanın erişim düzeyini ince ayar yapmasına olanak tanır.

READ_CALENDAR ve WRITE_CALENDAR

READ_CALENDAR izni, uygulamanın kullanıcının tüm takvimlerinden adlar, saatler, katılımcılar ve açıklamalar dahil olmak üzere etkinlikleri okumasına izin verir. WRITE_CALENDAR izni, etkinlik oluşturma, değiştirme ve silmeye izin verir. Her ikisi de bildirim dosyasında uses-permission etiketi aracılığıyla belirtilir ve ActivityResultLauncher aracılığıyla çalışma zamanında talep edilir.

Android 14'ten (API 34) itibaren sistem, bir uygulama her iki izni aynı anda talep ederse kullanıcıyı uyarır. Bunları ayrı ayrı talep etmeniz önerilir: önce okuma için READ_CALENDAR, ardından ilk etkinlik oluşturma girişiminde WRITE_CALENDAR. Google I/O 2024'e göre bu yaklaşım, reddetme oranını %23 azaltır.

CalendarContract ContentProvider

CalendarContract, takvim verilerini ilişkisel tablolarda yapılandıran bir Android ContentProvider'dır. Ana tablolar şunları içerir: Calendars (takvim listesi), Events (etkinlikler), Attendees (katılımcılar), Reminders (bildirimler). Veri erişimi, belirtilen URI ve projeksiyonla ContentResolver.query() aracılığıyla gerçekleştirilir.

Yeni bir etkinlik eklemek için takvimi, başlangıç ve bitiş saatini, başlığı ve açıklamayı belirten ContentValues kullanmanız gerekir. CalendarContract, saat dilimlerini, yinelenen etkinlikleri ve özelleştirilebilir bildirim aralıklarına sahip hatırlatıcıları destekler.

Takvimle çalışmak için kod örnekleri

Takvim erişim taleplerinin uygulanması, platforma özgü özelliklerin dikkate alınmasını gerektirir. Aşağıda, EventKit ve CalendarContract ile doğru çalışmayı gösteren Swift ve Kotlin örnekleri verilmiştir.

Swift'te takvim erişimi

iOS takvim erişim talebi, EKEventStore sınıfının requestAccess yöntemi aracılığıyla yapılır. Aşağıdaki örnek, izin alındıktan sonra bir etkinlik oluşturmayı gösterir.

swift
import EventKit

let eventStore = EKEventStore()

eventStore.requestAccess(to: .event) { granted, error in
    guard granted else {
        print("Takvim erişimi reddedildi")
        return
    }

    let event = EKEvent(eventStore: eventStore)
    event.title = "Ekip toplantısı"
    event.startDate = Date()
    event.endDate = Date(timeIntervalSinceNow: 3600)
    event.calendar = eventStore.defaultCalendarForNewEvents

    do {
        try eventStore.save(event, span: .thisEvent)
        print("Etkinlik oluşturuldu: \(event.eventIdentifier)")
    } catch {
        print("Kaydetme hatası: \(error.localizedDescription)")
    }
}

Kotlin'de takvim erişimi

Android'de READ_CALENDAR ve WRITE_CALENDAR izinlerinin talebi ActivityResultLauncher aracılığıyla yapılır. Örnek, erişim sağlandıktan sonra kullanıcının takviminden etkinlikleri okumayı gösterir.

kotlin
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("Takvim", "Etkinlik: ${it.getString(titleIndex)}")
                }
            }
        } else {
            // Açıklamayı göster ve ayarlara gitmeyi öner
            requestPermissionSettingsRedirect()
        }
    }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    calendarPermissionLauncher.launch(
        arrayOf(Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR)
    )
}

Takvim erişimi talep etmek için en iyi uygulamalar

Takvim izinleriyle çalışmak, her iki platformun gereksinimlerini ve kullanıcı beklentilerini dikkate alan iyi düşünülmüş bir strateji gerektirir. Aşağıdaki önerilere uymak, denetimden geçmeye ve izin verme oranını artırmaya yardımcı olur.

Talebin en aza indirilmesi ve bağlam

Takvim erişimini yalnızca kullanıcı takvim verileri gerektiren bir işlem yaptığında talep edin: “Takvime ekle”, “Programı senkronize et”, “Etkinlikleri içe aktar”. Ön izin diyaloğu (sistem diyaloğundan önce özel bir diyalog), Localytics (2024)'e göre onay oranını %35 artırır.

iOS'ta, gizlilik bildiriminde belirli bir metinle NSCalendarsUsageDescription anahtarını kullanın. “Etkinlik oluşturmak için” yerine “Takviminize antrenman eklemek için” yazın. Belirli bir ifade, talep dönüşüm oranını %20–30 artırır.

Reddetmeyi yönetme ve ayarlara yönlendirme

Kullanıcı talebi reddederse, sistem diyaloğunu tekrar göstermeyin — bu, Android'de neverAskAgain'i tetikler veya iOS'ta diyaloğu kullanılamaz hale getirir. Bunun yerine, Android'de Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) veya iOS'ta UIApplication.openSettingsURLString aracılığıyla ayarlara gitmeyi önerin.

Ekrana yeniden girildiğinde izin durumunu kontrol edin. iOS'ta EKEventStore.authorizationStatus(for: .event) öğesini çağırın ve geçerli duruma göre kullanıcı arayüzünü güncelleyin. Android'de, geçerli durumu kontrol etmek ve ayarlar yönlendirme düğmesini gösterip göstermemeye karar vermek için ContextCompat.checkSelfPermission() kullanın.

Sıkça Sorulan Sorular

Bir uygulamanın neden takvim erişimine ihtiyacı var?

Uygulamalar, etkinlik oluşturmak, programları senkronize etmek, son teslim tarihlerini içe aktarmak ve hatırlatıcılarla entegre olmak için takvim erişimi talep eder. Örnekler: fitness takipçileri antrenman ekler, planlayıcılar görev oluşturur ve seyahat uygulamaları kullanıcının takvimine uçuşları içe aktarır.

Android'de READ_CALENDAR ve WRITE_CALENDAR arasındaki fark nedir?

READ_CALENDAR, kullanıcının tüm etkinliklerini ve takvimlerini okuma erişimi sağlar. WRITE_CALENDAR, etkinlik oluşturma, değiştirme ve silmeye izin verir. Kullanıcı, diğeri olmadan bir izni verebilir ve bu da uygulamanın takvim verilerine erişim düzeyi üzerinde esnek kontrol sağlar.

iOS'ta takvim erişimi nasıl iptal edilir?

Ayarlar — Gizlilik ve Güvenlik — Takvimler'i açın. Uygulamayı seçin ve erişim anahtarını kapatın. Bir sonraki açık talep ve kullanıcı onayına kadar uygulama etkinlikleri okuma ve oluşturma yeteneğini kaybeder.

Takvim erişimi reddedilirse ne olur?

Uygulama etkinlikleri okuyamaz veya oluşturamaz. requestAccess yöntemi iOS'ta granted = false döndürür veya checkSelfPermission Android'de PERMISSION_DENIED döndürür. Geliştiriciler zarif bozulma uygulamalıdır — uygulama çökmeden veya hata göstermeden takvim özellikleri olmadan çalışmaya devam eder.

Tam izin olmadan tek bir etkinliğe erişebilir miyim?

iOS'ta bu mümkün değildir — EventKit, etkinliklerle ilgili herhangi bir işlem için tam erişim gerektirir. Android'de, sistem takvim uygulaması aracılığıyla bir etkinlik oluşturmak için Intent.ACTION_INSERT kullanabilirsiniz; bu, çalışma zamanı izinleri gerektirmez ancak mevcut etkinlikleri okumaya da izin vermez.

Özet

  • Calendar Permission — mobil platformlarda takvim verilerine erişmek için korunan bir izin.
  • EventKit — EKEventStore aracılığıyla takvimler ve hatırlatıcılarla çalışmak için birincil iOS çerçevesi.
  • READ_CALENDAR — Kullanıcının takviminden etkinlikleri okumak için Android'in tehlikeli izni.
  • WRITE_CALENDAR — Etkinlik oluşturmak ve düzenlemek için ayrı bir Android izni.
  • CalendarContract — Yapılandırılmış tablolara sahip bir Android ContentProvider: Calendars, Events, Attendees, Reminders.
  • Ön izin diyaloğu — Sistem talebinden önce açıklama içeren özel bir diyalog, dönüşümü %35 artırır.
  • Zarif bozulma — Uygulama, çökmeden reddetmeyi yöneterek takvim erişimi olmadan doğru şekilde çalışmalıdır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun