إذن الوصول إلى التقويم في تطوير تطبيقات الجوال — ما هو، وكيف يعمل، وطلب الوصول

المؤلف: IT Sectr نُشر: 2026-05-22 وقت القراءة: 8 دق

إذن الوصول إلى التقويم هو آلية في أنظمة تشغيل الجوال تحمي بيانات تقويم المستخدم من القراءة والتعديل غير المصرح به. في iOS، يتم تنفيذ الوصول إلى التقويم من خلال إطار العمل EventKit مع الفئتين EKEventStore وEKCalendar، بينما في Android — من خلال إذني READ_CALENDAR وWRITE_CALENDAR المقترنين بواجهة CalendarContract API. وفقًا لـ Apple Developer Documentation, 2025، يتطلب الوصول إلى التقويم في iOS 18+ طلبًا صريحًا عبر حوار النظام. EventKit يوفر واجهة موحدة لقراءة وإنشاء الأحداث في جميع التقاويم المتصلة.

الملامح الرئيسية

  • Calendar Permission — إذن محمي للوصول إلى تقويم المستخدم على iOS وAndroid.
  • EventKit — إطار عمل Apple للعمل مع التقاويم والتذكيرات عبر EKEventStore.
  • READ_CALENDAR — إذن خطير في Android لقراءة أحداث تقويم المستخدم.
  • EKEventStore — الفئة المركزية في iOS لطلب الوصول وتنفيذ العمليات على الأحداث.
  • CalendarContract — موفر محتوى Android يوفر وصولاً منظمًا لبيانات التقويم.

ما هو إذن الوصول إلى التقويم؟

إذن الوصول إلى التقويم هو آلية لحماية البيانات الشخصية تتحكم في قراءة وكتابة الأحداث في تطبيقات التقويم بالجهاز. يحتوي التقويم على معلومات حساسة: الاجتماعات والمواعيد النهائية والتذكيرات والخطط الشخصية — لذلك تصنف أنظمة تشغيل الجوال الوصول إليه كحرج.

في iOS، يتم تنظيم الوصول إلى التقويم بواسطة إطار عمل EventKit. يمكن للتطبيق طلب وصول للقراءة والكتابة إلى الأحداث، ويمكن للمستخدم منح الطلب أو رفضه عبر حوار النظام. في Android، تعتمد الحماية على إذنين زمنيين: READ_CALENDAR وWRITE_CALENDAR.

وفقًا لدراسة Pew Research Center (2024)، حوالي 45% من مستخدمي الأجهزة المحمولة يستخدمون التقويم بانتظام، و62% منهم يرفضون الوصول للتطبيقات التي لا تشرح سبب طلب بيانات التقويم.

المبدأ الأساسي — يجب على التطبيق طلب الوصول فقط للميزات المرتبطة مباشرة بالتقويم: إنشاء التذكيرات، مزامنة الأحداث، استيراد الجداول.

كيف يعمل طلب الوصول إلى التقويم في iOS

في iOS، يتم توفير الوصول إلى التقويم والتذكيرات من خلال إطار عمل واحد — EventKit. الفئة المركزية EKEventStore تدير جميع العمليات: طلب الإذن، قراءة الأحداث، إنشاء وتحرير إدخالات التقويم. عند أول استدعاء لـ requestAccess(to:entityType:)، يعرض النظام حوارًا أصليًا مع شرح.

EventKit و EKEventStore

فئة EKEventStore هي نقطة الدخول إلى نظام التقويم الفرعي في iOS. لطلب الوصول، يجب استدعاء الطريقة requestAccess(to: .event) مع تمرير نوع الكيان (حدث أو تذكير). بعد الحصول على الإذن، يوفر EKEventStore الوصول إلى جميع التقاويم المتصلة بـ iCloud وGoogle وExchange ومزودين آخرين.

ميزة مهمة: EKEventStore كائن ثقيل — إنشاؤه يستغرق وقتًا ويستهلك موارد. يُوصى بتهيئته مرة واحدة وإعادة استخدامه طوال دورة حياة التطبيق. وفقًا لـ WWDC Session 10117 (2024)، توصي Apple بتخزين مثيل EventStore مؤقتًا لتحسين الأداء.

أنواع الوصول: القراءة والكتابة

لا يفصل iOS بين إذني القراءة والكتابة للتقويم — إما أن يمنح المستخدم الوصول الكامل أو يرفضه. ومع ذلك، يمكن للتطبيق التحكم في العمليات على مستوى الكود: قراءة الأحداث عبر EKEventStore.event، إنشاؤها عبر EKEventStore.save وحذفها عبر EKEventStore.remove. منذ iOS 18، أصبح من الممكن طلب الوصول لنوع كيان محدد فقط — .event أو .reminder.

في iOS 17+، أدخلت Apple آلية وصول مؤقت: يمكن لبعض التطبيقات الحصول على وصول لمدة 24 ساعة بعد تأكيد المستخدم لمرة واحدة. هذه الميزة مفيدة بشكل خاص للتطبيقات التي تحتاج وصولاً لمرة واحدة إلى التقويم — على سبيل المثال، لاستيراد جدول مؤتمر.

كيف يعمل طلب الوصول إلى التقويم في Android

في Android، الوصول إلى التقويم محمي بإذنين منفصلين: READ_CALENDAR و WRITE_CALENDAR. كلاهما ينتميان إلى الفئة الخطيرة ويتطلبان طلبًا في وقت التشغيل. فصل القراءة والكتابة يتيح للمستخدم ضبط مستوى وصول التطبيق بدقة.

READ_CALENDAR و WRITE_CALENDAR

إذن READ_CALENDAR يسمح للتطبيق بقراءة الأحداث من جميع تقاويم المستخدم، بما في ذلك الأسماء والأوقات والمشاركين والوصف. إذن WRITE_CALENDAR يسمح بإنشاء وتعديل وحذف الأحداث. يتم تحديد كليهما في البيان عبر علامة uses-permission وطلبهما في وقت التشغيل عبر ActivityResultLauncher.

بدءًا من Android 14 (API 34)، يحذر النظام المستخدم إذا طلب التطبيق كلا الإذنين في وقت واحد. يُوصى بطلبهما بشكل منفصل: أولاً READ_CALENDAR للقراءة، ثم WRITE_CALENDAR عند أول محاولة لإنشاء حدث. وفقًا لـ Google I/O 2024، هذا النهج يقلل معدل الرفض بنسبة 23%.

CalendarContract ContentProvider

CalendarContract هو موفر محتوى Android ينظم بيانات التقويم في جداول علائقية. الجداول الرئيسية تشمل: Calendars (قائمة التقاويم)، Events (الأحداث)، Attendees (المشاركون)، Reminders (التذكيرات). يتم الوصول إلى البيانات عبر ContentResolver.query() مع تحديد URI والإسقاط.

لإدراج حدث جديد، يجب استخدام ContentValues مع تحديد التقويم ووقت البدء والانتهاء والعنوان والوصف. يدعم CalendarContract المناطق الزمنية والأحداث المتكررة والتذكيرات بفاصل إشعار قابل للتخصيص.

أمثلة برمجية للعمل مع التقويم

تنفيذ طلبات الوصول إلى التقويم يتطلب مراعاة الخصائص الخاصة بكل منصة. فيما يلي أمثلة بلغتي Swift و Kotlin توضح العمل الصحيح مع EventKit وCalendarContract.

الوصول إلى التقويم في Swift

طلب الوصول إلى التقويم في iOS يتم من خلال طريقة requestAccess لفئة EKEventStore. المثال أدناه يوضح إنشاء حدث بعد الحصول على الإذن.

swift
import EventKit

let eventStore = EKEventStore()

eventStore.requestAccess(to: .event) { granted, error in
    guard granted else {
        print("تم رفض الوصول إلى التقويم")
        return
    }

    let event = EKEvent(eventStore: eventStore)
    event.title = "اجتماع الفريق"
    event.startDate = Date()
    event.endDate = Date(timeIntervalSinceNow: 3600)
    event.calendar = eventStore.defaultCalendarForNewEvents

    do {
        try eventStore.save(event, span: .thisEvent)
        print("تم إنشاء الحدث: \(event.eventIdentifier)")
    } catch {
        print("خطأ في الحفظ: \(error.localizedDescription)")
    }
}

الوصول إلى التقويم في Kotlin

في Android، طلب إذني READ_CALENDAR و WRITE_CALENDAR يتم عبر ActivityResultLauncher. يوضح المثال قراءة الأحداث من تقويم المستخدم بعد الحصول على الوصول.

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("التقويم", "الحدث: ${it.getString(titleIndex)}")
                }
            }
        } else {
            // عرض الشرح واقتراح الانتقال إلى الإعدادات
            requestPermissionSettingsRedirect()
        }
    }

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

أفضل الممارسات لطلب الوصول إلى التقويم

العمل مع أذونات التقويم يتطلب استراتيجية مدروسة تأخذ في الاعتبار متطلبات كلتا المنصتين وتوقعات المستخدم. اتباع التوصيات أدناه يساعد في اجتياز المراجعة وزيادة معدل منح الإذن.

التقليل وسياق الطلب

اطلب الوصول إلى التقويم فقط عندما يقوم المستخدم بإجراء يتطلب بيانات التقويم: «إضافة إلى التقويم»، «مزامنة الجدول»، «استيراد الأحداث». حوار ما قبل الإذن (حوار مخصص قبل حوار النظام) يزيد معدل الموافقة بنسبة 35%، وفقًا لـ Localytics (2024).

في iOS، استخدم المفتاح NSCalendarsUsageDescription في بيان الخصوصية مع نص محدد. بدلاً من «لإنشاء الأحداث»، اكتب «لإضافة التمارين إلى تقويمك». الصياغة المحددة تزيد معدل تحويل الطلب بنسبة 20–30%.

معالجة الرفض وإعادة التوجيه إلى الإعدادات

إذا رفض المستخدم الطلب، لا تظهر حوار النظام مرة أخرى — سيؤدي ذلك إلى تفعيل neverAskAgain في Android أو جعل الحوار غير متاح في iOS. بدلاً من ذلك، قدم الانتقال إلى الإعدادات عبر Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) في Android أو UIApplication.openSettingsURLString في iOS.

عند إعادة الدخول إلى الشاشة، تحقق من حالة الإذن. في iOS، استدع EKEventStore.authorizationStatus(for: .event) وحدث واجهة المستخدم وفقًا للحالة الحالية. في Android، استخدم ContextCompat.checkSelfPermission() للتحقق من الحالة الحالية واتخاذ قرار بشأن إظهار زر الانتقال إلى الإعدادات.

الأسئلة الشائعة

لماذا يحتاج التطبيق إلى الوصول إلى التقويم؟

تطلب التطبيقات الوصول إلى التقويم لإنشاء الأحداث ومزامنة الجداول واستيراد المواعيد النهائية والتكامل مع التذكيرات. أمثلة: متتبعات اللياقة البدنية تضيف التمارين، والمخططون ينشئون المهام، وتطبيقات السفر تستورد الرحلات الجوية إلى تقويم المستخدم.

ما الفرق بين READ_CALENDAR و WRITE_CALENDAR في Android؟

READ_CALENDAR يوفر وصولاً لقراءة جميع الأحداث والتقاويم الخاصة بالمستخدم. WRITE_CALENDAR يسمح بإنشاء وتعديل وحذف الأحداث. يمكن للمستخدم منح إذن دون الآخر، مما يوفر تحكمًا مرنًا في مستوى وصول التطبيق لبيانات التقويم.

كيفية إلغاء الوصول إلى التقويم في iOS؟

افتح الإعدادات — الخصوصية والأمان — التقاويم. اختر التطبيق وأوقف مفتاح الوصول. سيفقد التطبيق القدرة على قراءة وإنشاء الأحداث حتى الطلب الصريح التالي وتأكيد المستخدم.

ماذا يحدث عند رفض الوصول إلى التقويم؟

لن يتمكن التطبيق من قراءة أو إنشاء الأحداث. سيعيد requestAccess القيمة granted = false في iOS، أو سيعيد checkSelfPermission القيمة PERMISSION_DENIED في Android. يجب على المطور تنفيذ التدهور التدريجي — يستمر التطبيق في العمل بدون ميزات التقويم دون تعطل أو ظهور أخطاء.

هل يمكنني الوصول إلى حدث واحد دون إذن كامل؟

في iOS، هذا غير ممكن — يتطلب EventKit وصولاً كاملاً لأي عمليات على الأحداث. في Android، يمكنك استخدام Intent.ACTION_INSERT لإنشاء حدث عبر تطبيق التقويم النظامي، مما لا يتطلب أذونات وقت التشغيل، ولكنه لا يسمح أيضًا بقراءة الأحداث الموجودة.

الملخص

  • Calendar Permission — إذن محمي للوصول إلى بيانات التقويم على المنصات المحمولة.
  • EventKit — إطار العمل الرئيسي في iOS للعمل مع التقاويم والتذكيرات عبر EKEventStore.
  • READ_CALENDAR — إذن خطير في Android لقراءة الأحداث من تقويم المستخدم.
  • WRITE_CALENDAR — إذن منفصل في Android لإنشاء وتحرير الأحداث.
  • CalendarContract — موفر محتوى Android بجداول منظمة: Calendars وEvents وAttendees وReminders.
  • حوار ما قبل الإذن — حوار مخصص مع شرح قبل طلب النظام، يزيد التحويل بنسبة 35%.
  • التدهور التدريجي — يجب أن يعمل التطبيق بشكل صحيح دون الوصول إلى التقويم، متعاملًا مع الرفض دون تعطل.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا