کیلنڈر تک رسائی کی اجازت ایک موبائل OS میکانزم ہے جو صارف کے کیلنڈر ڈیٹا کو غیر مجاز پڑھنے اور تبدیلی سے بچاتا ہے۔ iOS پر، EventKit فریم ورک کے ذریعے EKEventStore اور EKCalendar کلاسز کے ساتھ کیلنڈر تک رسائی لاگو کی جاتی ہے، جبکہ Android پر — READ_CALENDAR اور WRITE_CALENDAR اجازتوں کے ذریعے CalendarContract API کے ساتھ۔ Apple Developer Documentation, 2025 کے مطابق، iOS 18+ پر کیلنڈر تک رسائی کے لیے سسٹم ڈائیلاگ کے ذریعے واضح درخواست ضروری ہے۔ EventKit تمام منسلک کیلنڈرز پر واقعات پڑھنے اور بنانے کے لیے یکساں انٹرفیس فراہم کرتا ہے۔
اہم نکات
کیلنڈر تک رسائی کی اجازت ایک ذاتی ڈیٹا تحفظ میکانزم ہے جو ڈیوائس کی کیلنڈر ایپلیکیشنز میں واقعات کے پڑھنے اور لکھنے کو کنٹرول کرتا ہے۔ کیلنڈر میں حساس معلومات ہوتی ہیں: میٹنگیں، ڈیڈلائنز، یاد دہانیاں اور ذاتی منصوبے — اس لیے موبائل OS اس تک رسائی کو اہم درجہ دیتے ہیں۔
iOS پر، کیلنڈر تک رسائی EventKit فریم ورک کے ذریعے منظم کی جاتی ہے۔ ایک ایپ واقعات تک پڑھنے اور لکھنے کی رسائی کی درخواست کر سکتی ہے، اور صارف سسٹم ڈائیلاگ کے ذریعے درخواست منظور یا مسترد کر سکتا ہے۔ Android پر، تحفظ دو رن ٹائم اجازتوں پر مبنی ہے: READ_CALENDAR اور WRITE_CALENDAR۔
Pew Research Center (2024) کے ایک مطالعہ کے مطابق، تقریباً 45% موبائل ڈیوائس صارفین باقاعدگی سے کیلنڈر استعمال کرتے ہیں، اور ان میں سے 62% ان ایپس تک رسائی سے انکار کرتے ہیں جو کیلنڈر ڈیٹا کی درخواست کی وجہ نہیں بتاتیں۔
بنیادی اصول — ایک ایپ کو صرف ان خصوصیات کے لیے رسائی کی درخواست کرنی چاہیے جو براہ راست کیلنڈر سے متعلق ہوں: یاد دہانیاں بنانا، واقعات کو ہم آہنگ کرنا، نظام الاوقات درآمد کرنا۔
iOS پر، کیلنڈر اور یاد دہانیوں تک رسائی ایک ہی فریم ورک — EventKit کے ذریعے فراہم کی جاتی ہے۔ مرکزی EKEventStore کلاس تمام کارروائیوں کا انتظام کرتی ہے: اجازت کی درخواست، واقعات پڑھنا، کیلنڈر اندراجات بنانا اور ترمیم کرنا۔ requestAccess(to:entityType:) کی پہلی کال پر، سسٹم وضاحت کے ساتھ ایک مقامی ڈائیلاگ دکھاتا ہے۔
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 پر، کیلنڈر تک رسائی دو علیحدہ اجازتوں سے محفوظ ہے: 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 ایک Android ContentProvider ہے جو کیلنڈر ڈیٹا کو متعلقہ جدولوں میں تشکیل دیتا ہے۔ اہم جدولوں میں شامل ہیں: Calendars (کیلنڈرز کی فہرست)، Events (واقعات)، Attendees (شرکاء)، Reminders (اطلاعات)۔ ڈیٹا تک رسائی مخصوص URI اور پروجیکشن کے ساتھ ContentResolver.query() کے ذریعے کی جاتی ہے۔
نیا واقعہ داخل کرنے کے لیے، آپ کو ContentValues استعمال کرنا ہوگا جس میں کیلنڈر، شروع اور ختم ہونے کا وقت، عنوان اور وضاحت متعین ہو۔ CalendarContract ٹائم زونز، بار بار آنے والے واقعات اور حسب ضرورت اطلاع کے وقفوں والی یاد دہانیوں کو سپورٹ کرتا ہے۔
کیلنڈر تک رسائی کی درخواستوں کے نفاذ کے لیے پلیٹ فارم کی مخصوص خصوصیات پر غور کرنا ضروری ہے۔ ذیل میں Swift اور Kotlin میں مثالیں دی گئی ہیں جو EventKit اور CalendarContract کے ساتھ درست کام کو ظاہر کرتی ہیں۔
iOS کیلنڈر تک رسائی کی درخواست EKEventStore کلاس کے requestAccess طریقہ کار کے ذریعے کی جاتی ہے۔ نیچے دی گئی مثال اجازت ملنے کے بعد ایک واقعہ بنانا دکھاتی ہے۔
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)")
}
}
Android پر، READ_CALENDAR اور WRITE_CALENDAR اجازتوں کی درخواست ActivityResultLauncher کے ذریعے کی جاتی ہے۔ مثال رسائی ملنے کے بعد صارف کے کیلنڈر سے واقعات پڑھنا دکھاتی ہے۔
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)
)
}
کیلنڈر کی اجازتوں کے ساتھ کام کرنے کے لیے ایک اچھی طرح سے سوچی گئی حکمت عملی کی ضرورت ہوتی ہے جو دونوں پلیٹ فارمز کی ضروریات اور صارف کی توقعات پر غور کرے۔ نیچے دی گئی سفارشات پر عمل کرنے سے اعتدال کو پاس کرنے اور اجازت دینے کی شرح بڑھانے میں مدد ملتی ہے۔
کیلنڈر تک رسائی صرف اس وقت درخواست کریں جب صارف کوئی ایسا عمل انجام دے جس کے لیے کیلنڈر ڈیٹا کی ضرورت ہو: «کیلنڈر میں شامل کریں»، «نظام الاوقات کو ہم آہنگ کریں»، «واقعات درآمد کریں»۔ پری اجازت ڈائیلاگ (سسٹم ڈائیلاگ سے پہلے ایک حسب ضرورت ڈائیلاگ) Localytics (2024) کے مطابق رضامندی کی شرح کو 35% بڑھاتا ہے۔
iOS پر، پرائیویسی مینی فیسٹ میں مخصوص متن کے ساتھ NSCalendarsUsageDescription کلید استعمال کریں۔ «واقعات بنانے کے لیے» کے بجائے «آپ کے کیلنڈر میں ورزشیں شامل کرنے کے لیے» لکھیں۔ مخصوص الفاظ درخواست کی تبدیلی کی شرح کو 20–30% بڑھاتے ہیں۔
اگر صارف درخواست مسترد کرتا ہے تو سسٹم ڈائیلاگ دوبارہ نہ دکھائیں — یہ Android پر neverAskAgain کو متحرک کرے گا یا iOS پر ڈائیلاگ کو ناقابل رسائی بنا دے گا۔ اس کے بجائے، Android پر Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) یا iOS پر UIApplication.openSettingsURLString کے ذریعے ترتیبات پر جانے کی پیشکش کریں۔
اسکرین پر دوبارہ داخل ہوتے وقت، اجازت کی حیثیت چیک کریں۔ iOS پر، EKEventStore.authorizationStatus(for: .event) کال کریں اور موجودہ حیثیت کے مطابق یوزر انٹرفیس کو اپ ڈیٹ کریں۔ Android پر، موجودہ حالت چیک کرنے اور ترتیبات ری ڈائریکٹ بٹن دکھانے کا فیصلہ کرنے کے لیے ContextCompat.checkSelfPermission() استعمال کریں۔
اکثر پوچھے گئے سوالات
ایپس واقعات بنانے، نظام الاوقات کو ہم آہنگ کرنے، ڈیڈلائن درآمد کرنے اور یاد دہانیوں کے ساتھ انضمام کے لیے کیلنڈر تک رسائی کی درخواست کرتی ہیں۔ مثالیں: فٹنس ٹریکرز ورزشیں شامل کرتے ہیں، منصوبہ ساز کام بناتے ہیں، اور سفری ایپس صارف کے کیلنڈر میں پروازیں درآمد کرتی ہیں۔
READ_CALENDAR صارف کے تمام واقعات اور کیلنڈرز کو پڑھنے کی رسائی فراہم کرتا ہے۔ WRITE_CALENDAR واقعات بنانے، تبدیل کرنے اور حذف کرنے کی اجازت دیتا ہے۔ صارف ایک اجازت دوسرے کے بغیر دے سکتا ہے، جو ایپ کی کیلنڈر ڈیٹا تک رسائی کی سطح پر لچکدار کنٹرول فراہم کرتا ہے۔
ترتیبات — رازداری اور تحفظ — کیلنڈرز کھولیں۔ ایپ منتخب کریں اور رسائی کا سوئچ بند کریں۔ اگلی واضح درخواست اور صارف کی تصدیق تک ایپ واقعات پڑھنے اور بنانے کی صلاحیت کھو دے گی۔
ایپ واقعات نہیں پڑھ سکے گی اور نہ ہی بنا سکے گی۔ requestAccess طریقہ iOS پر granted = false لوٹائے گا، یا checkSelfPermission Android پر PERMISSION_DENIED لوٹائے گا۔ ڈویلپرز کو خوبصورت انحطاط لاگو کرنا چاہیے — ایپ کریش یا خرابی دکھائے بغیر کیلنڈر کی خصوصیات کے بغیر کام کرتی رہتی ہے۔
iOS پر، یہ ممکن نہیں ہے — EventKit کو واقعات پر کسی بھی کارروائی کے لیے مکمل رسائی درکار ہے۔ Android پر، آپ سسٹم کیلنڈر ایپ کے ذریعے واقعہ بنانے کے لیے Intent.ACTION_INSERT استعمال کر سکتے ہیں، جس کے لیے رن ٹائم اجازتوں کی ضرورت نہیں ہے، لیکن موجودہ واقعات پڑھنے کی بھی اجازت نہیں دیتا۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں