یک مجوز ویژه از دسترسی به منابع سیستمی محافظت می کند که به ویژه حساس هستند یا مستقیماً به حریم خصوصی کاربر مرتبط نیستند. این مجوزها با مجوزهای زمان نصب و مجوزهای زمان اجرا متفاوت هستند.
چند نمونه از مجوزهای ویژه عبارتند از:
- برنامه ریزی دقیق آلارم
- نمایش و ترسیم روی برنامه های دیگر.
- دسترسی به تمام داده های ذخیره سازی
برنامه هایی که مجوز ویژه را اعلام می کنند در صفحه دسترسی به برنامه ویژه در تنظیمات سیستم نشان داده شده اند (شکل 1). برای اعطای مجوز ویژه به برنامه، کاربر باید به این صفحه بروید: تنظیمات > برنامهها > دسترسی به برنامه ویژه .
گردش کار
برای درخواست مجوز ویژه، موارد زیر را انجام دهید:
- در فایل مانیفست برنامه خود، مجوزهای ویژه ای را که ممکن است برنامه شما نیاز به درخواست داشته باشد، اعلام کنید .
- UX برنامه خود را طوری طراحی کنید که اقدامات خاصی در برنامه شما با مجوزهای خاص مرتبط باشد. به کاربران اطلاع دهید که چه اقداماتی ممکن است به آنها نیاز داشته باشد تا به برنامه شما اجازه دسترسی به داده های کاربر خصوصی را بدهند.
- منتظر بمانید تا کاربر کار یا اقدامی را در برنامه شما فراخوانی کند که نیاز به دسترسی به داده های خصوصی کاربر خاص دارد. در آن زمان، برنامه شما میتواند مجوز ویژهای را که برای دسترسی به آن دادهها لازم است درخواست کند.
- بررسی کنید که آیا کاربر قبلاً مجوز خاصی را که برنامه شما به آن نیاز دارد اعطا کرده است یا خیر. برای انجام این کار، از تابع بررسی سفارشی هر مجوز استفاده کنید. اگر اجازه داده شود، برنامه شما میتواند به دادههای کاربر خصوصی دسترسی داشته باشد. اگر نه، به مرحله بعد ادامه دهید. توجه: هر بار که عملیاتی را انجام می دهید که به آن مجوز نیاز دارد، باید بررسی کنید که آیا مجوز دارید یا خیر.
- منطقی را در یک عنصر UI به کاربر ارائه دهید که به وضوح توضیح میدهد که برنامه شما به چه دادههایی دسترسی دارد و در صورت اعطای مجوز ویژه، برنامه چه مزایایی میتواند به کاربر ارائه دهد. علاوه بر این، از آنجایی که برنامه شما کاربران را برای اعطای مجوز به تنظیمات سیستم میفرستد، دستورالعملهای مختصری را نیز شامل شود که توضیح میدهد چگونه کاربران میتوانند مجوز را در آنجا اعطا کنند. رابط کاربری منطقی باید گزینه روشنی را برای کاربر فراهم کند تا از اعطای مجوز انصراف دهد. پس از اینکه کاربر دلیل منطقی را تأیید کرد، به مرحله بعدی ادامه دهید.
- مجوز ویژه ای را که برنامه شما برای دسترسی به داده های خصوصی کاربر نیاز دارد، درخواست کنید . این احتمالاً شامل یک هدف به صفحه مربوطه در تنظیمات سیستم است که در آن کاربر می تواند مجوز را صادر کند. برخلاف مجوزهای زمان اجرا ، هیچ گفتگوی مجوز بازشو وجود ندارد.
- در متد
onResume()
پاسخ کاربر را بررسی کنید - اینکه آیا آنها مجوز ویژه را اعطا کرده یا رد کرده اند. - اگر کاربر به برنامه شما مجوز داده است، می توانید به داده های کاربر خصوصی دسترسی داشته باشید. اگر کاربر به جای آن مجوز را رد کرد، تجربه برنامه خود را بهخوبی کاهش دهید تا بدون اطلاعاتی که توسط آن مجوز محافظت میشود، عملکردی را در اختیار کاربر قرار دهد.
درخواست مجوزهای ویژه
برخلاف مجوزهای زمان اجرا ، کاربر باید مجوزهای ویژه ای را از صفحه دسترسی به برنامه ویژه در تنظیمات سیستم اعطا کند. برنامهها میتوانند کاربران را با استفاده از یک intent به آنجا بفرستند، که برنامه را متوقف میکند و صفحه تنظیمات مربوطه را برای یک مجوز خاص راهاندازی میکند. پس از بازگشت کاربر به برنامه، برنامه می تواند بررسی کند که آیا مجوز در تابع onResume()
داده شده است یا خیر.
کد نمونه زیر نحوه درخواست مجوز ویژه SCHEDULE_EXACT_ALARMS
را از کاربران نشان می دهد:
val alarmManager = getSystemService<AlarmManager>()!!
when {
// if permission is granted, proceed with scheduling exact alarms…
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// ask users to grant the permission in the corresponding settings page
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
نمونه کد برای بررسی مجوز و رسیدگی به تصمیمات کاربر در onResume()
:
override fun onResume() {
// ...
if (alarmManager.canScheduleExactAlarms()) {
// proceed with the action (setting exact alarms)
alarmManager.setExact(...)
}
else {
// permission not yet approved. Display user notice and gracefully degrade
your app experience.
alarmManager.setWindow(...)
}
}
بهترین شیوه ها و نکات
بخشهای زیر برخی از بهترین شیوهها و ملاحظات را هنگام درخواست مجوزهای ویژه ارائه میکنند.
هر مجوز روش بررسی خود را دارد
مجوزهای ویژه متفاوت از مجوزهای زمان اجرا عمل می کنند. در عوض، به صفحه مرجع مجوزهای API مراجعه کنید و از توابع بررسی دسترسی سفارشی برای هر مجوز خاص استفاده کنید. به عنوان مثال می توان به AlarmManager#canScheduleExactAlarms()
برای مجوز SCHEDULE_EXACT_ALARMS
و Environment#isExternalStorageManager()
برای مجوز MANAGE_EXTERNAL_STORAGE
اشاره کرد.
درخواست در متن
مشابه مجوزهای زمان اجرا، برنامه ها باید مجوزهای ویژه ای را در متن درخواست کنند زمانی که کاربر اقدام خاصی را درخواست می کند که به مجوز نیاز دارد. به عنوان مثال، منتظر بمانید تا مجوز SCHEDULE_EXACT_ALARMS
را درخواست کنید تا زمانی که کاربر ایمیلی را برای ارسال در زمان خاصی برنامه ریزی کند.
درخواست را توضیح دهید
قبل از تغییر مسیر به تنظیمات سیستم یک دلیل منطقی ارائه کنید. از آنجایی که کاربران برای اعطای مجوزهای ویژه به طور موقت برنامه را ترک می کنند، قبل از اینکه قصد را در صفحه دسترسی به برنامه ویژه در تنظیمات سیستم راه اندازی کنید، یک رابط کاربری درون برنامه را نشان دهید. این رابط کاربری باید به وضوح توضیح دهد که چرا برنامه به مجوز نیاز دارد و چگونه کاربر باید آن را در صفحه تنظیمات اعطا کند.