درخواست مجوزهای ویژه

یک مجوز ویژه، دسترسی به منابع سیستمی که به طور خاص حساس هستند یا ارتباط مستقیمی با حریم خصوصی کاربر ندارند را محافظت می‌کند. این مجوزها با مجوزهای زمان نصب و مجوزهای زمان اجرا متفاوت هستند.

صفحه «دسترسی ویژه به برنامه‌ها» در تنظیمات سیستم اندروید، فهرستی از برنامه‌ها و وضعیت مجوزهای ویژه آنها را نشان می‌دهد.
شکل ۱. صفحه دسترسی به برنامه‌های ویژه در تنظیمات سیستم.

برخی از نمونه‌های مجوزهای ویژه عبارتند از:

  • برنامه‌ریزی دقیق آلارم‌ها
  • نمایش و ترسیم روی برنامه‌های دیگر
  • دسترسی به تمام داده‌های ذخیره‌سازی

برنامه‌هایی که مجوز ویژه اعلام می‌کنند، در صفحه دسترسی ویژه به برنامه در تنظیمات سیستم (شکل ۱) نشان داده شده‌اند. برای اعطای مجوز ویژه به برنامه، کاربر باید به این صفحه مراجعه کند: تنظیمات > برنامه‌ها > دسترسی ویژه به برنامه .

گردش کار

برای درخواست مجوز ویژه، موارد زیر را انجام دهید:

  1. در فایل مانیفست برنامه خود، مجوزهای ویژه‌ای را که ممکن است برنامه شما نیاز به درخواست آنها داشته باشد، اعلام کنید .
  2. تجربه کاربری (UX) برنامه خود را طوری طراحی کنید که اقدامات خاص در برنامه شما با مجوزهای ویژه مرتبط باشند. به کاربران اطلاع دهید که کدام اقدامات ممکن است نیاز به اعطای مجوز به برنامه شما برای دسترسی به داده‌های خصوصی کاربر داشته باشد.
  3. منتظر بمانید تا کاربر وظیفه یا عملی را در برنامه شما که نیاز به دسترسی به داده‌های خصوصی کاربر دارد، فراخوانی کند . در آن زمان، برنامه شما می‌تواند مجوز ویژه‌ای را که برای دسترسی به آن داده‌ها لازم است، درخواست کند.
  4. بررسی کنید که آیا کاربر قبلاً مجوز ویژه‌ای را که برنامه شما نیاز دارد، اعطا کرده است یا خیر. برای انجام این کار، از تابع بررسی سفارشی هر مجوز استفاده کنید. در صورت اعطا، برنامه شما می‌تواند به داده‌های خصوصی کاربر دسترسی پیدا کند. در غیر این صورت، به مرحله بعدی بروید. توجه: هر بار که عملیاتی را انجام می‌دهید که به آن مجوز نیاز دارد، باید بررسی کنید که آیا مجوز را دارید یا خیر.
  5. در یک عنصر رابط کاربری، یک دلیل منطقی به کاربر ارائه دهید که به وضوح توضیح دهد برنامه شما به چه داده‌هایی دسترسی دارد و در صورت اعطای مجوز ویژه، برنامه چه مزایایی می‌تواند برای کاربر فراهم کند. علاوه بر این، از آنجایی که برنامه شما کاربران را برای اعطای مجوز به تنظیمات سیستم می‌فرستد، دستورالعمل‌های مختصری را نیز در آن بگنجانید که توضیح دهد چگونه کاربران می‌توانند در آنجا مجوز را اعطا کنند. رابط کاربری دلیل باید گزینه روشنی برای انصراف کاربر از اعطای مجوز ارائه دهد. پس از اینکه کاربر دلیل را پذیرفت، به مرحله بعدی بروید.
  6. درخواست مجوز ویژه‌ای که برنامه شما برای دسترسی به داده‌های خصوصی کاربر نیاز دارد. این احتمالاً شامل یک اینتنت به صفحه مربوطه در تنظیمات سیستم است که کاربر می‌تواند در آنجا مجوز را اعطا کند. برخلاف مجوزهای زمان اجرا ، هیچ پنجره محاوره‌ای برای صدور مجوز وجود ندارد.
  7. پاسخ کاربر را بررسی کنید - اینکه آیا او تصمیم به اعطای مجوز ویژه یا رد آن گرفته است - در متد onResume() .
  8. اگر کاربر به برنامه شما اجازه دسترسی داده باشد، می‌توانید به داده‌های خصوصی کاربر دسترسی پیدا کنید. اگر کاربر این اجازه را رد کرده باشد، به طرز ماهرانه‌ای تجربه برنامه خود را کاهش دهید تا برنامه شما بدون اطلاعاتی که توسط آن اجازه محافظت می‌شوند، عملکردی را در اختیار کاربر قرار دهد.
نموداری که گردش کار اعلان و درخواست مجوزهای ویژه در اندروید را نشان می‌دهد، از اعلان مانیفست گرفته تا منطق کاربر، تغییر مسیر تنظیمات سیستم و مدیریت تصمیم کاربر.
شکل ۲. گردش کار برای اعلام و درخواست مجوزهای ویژه در اندروید.

درخواست مجوزهای ویژه

برخلاف مجوزهای زمان اجرا ، کاربر باید مجوزهای ویژه را از صفحه دسترسی ویژه برنامه در تنظیمات سیستم اعطا کند. برنامه‌ها می‌توانند کاربران را با استفاده از یک 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 تا زمانی که کاربر ارسال ایمیل را در زمان خاصی برنامه‌ریزی کند، صبر کنید.

درخواست را توضیح دهید

قبل از هدایت به تنظیمات سیستم، یک دلیل منطقی ارائه دهید. از آنجایی که کاربران برای اعطای مجوزهای ویژه، موقتاً برنامه را ترک می‌کنند، قبل از اجرای اینتنت به صفحه دسترسی ویژه به برنامه در تنظیمات سیستم، یک رابط کاربری درون برنامه‌ای نمایش دهید. این رابط کاربری باید به وضوح توضیح دهد که چرا برنامه به مجوز نیاز دارد و چگونه کاربر باید آن را در صفحه تنظیمات اعطا کند.