درخواستهای مجوز، اطلاعات حساس موجود در دستگاه را محافظت میکنند و فقط باید زمانی استفاده شوند که دسترسی به اطلاعات برای عملکرد برنامه شما ضروری باشد. این سند نکاتی را در مورد روشهایی که ممکن است بتوانید بدون نیاز به دسترسی به چنین اطلاعاتی به عملکرد مشابه (یا بهتر) دست یابید، ارائه میدهد. این یک بحث جامع در مورد نحوه عملکرد مجوزها در سیستم عامل اندروید نیست.
برای نگاهی کلیتر به مجوزهای اندروید، لطفاً به «مرور کلی مجوزها» مراجعه کنید. برای جزئیات بیشتر در مورد نحوه کار با مجوزها در کد خود، به «درخواست مجوزهای برنامه» مراجعه کنید.
مجوزها در اندروید ۶.۰+
در اندروید ۶.۰ (سطح API ۲۳) و بالاتر، برنامهها میتوانند در زمان اجرا از کاربر درخواست مجوز کنند، نه قبل از نصب. این به برنامهها اجازه میدهد زمانی که واقعاً به سرویسها یا دادههای محافظتشده توسط سرویسها نیاز دارند، درخواست مجوز کنند. اگرچه این امر (لزوماً) رفتار کلی برنامه را تغییر نمیدهد، اما چند تغییر مرتبط با نحوه مدیریت دادههای حساس کاربر ایجاد میکند:
افزایش زمینه موقعیتی
در زمان اجرا، در متن برنامه شما، از کاربران خواسته میشود تا برای دسترسی به عملکردهای تحت پوشش آن گروههای مجوز، مجوز دریافت کنند. کاربران نسبت به زمینهای که مجوز در آن درخواست میشود، حساستر هستند و اگر بین آنچه درخواست میکنید و هدف برنامه شما تطابقی وجود نداشته باشد، ارائه توضیح دقیق به کاربر در مورد دلیل درخواست مجوز، اهمیت بیشتری پیدا میکند. در صورت امکان، باید توضیحی در مورد درخواست خود، چه در زمان درخواست و چه در گفتگوی بعدی در صورت رد درخواست توسط کاربر، ارائه دهید.
برای افزایش احتمال پذیرش درخواست مجوز، فقط زمانی که به یک ویژگی خاص نیاز است، درخواست دهید. به عنوان مثال، فقط زمانی که کاربر روی دکمه میکروفون کلیک میکند، درخواست دسترسی به میکروفون را ارسال کنید. احتمال اینکه کاربران مجوزی را که انتظار دارند، بپذیرند، بیشتر است.
انعطافپذیری بیشتر در اعطای مجوزها
کاربران میتوانند در زمان درخواست و در تنظیمات، دسترسی به مجوزهای خاص را رد کنند، اما ممکن است همچنان از اختلال در عملکرد در نتیجهی این کار شگفتزده شوند. ایدهی خوبی است که تعداد کاربرانی که مجوزها را رد میکنند را رصد کنید (مثلاً با استفاده از Google Analytics) تا بتوانید برنامهی خود را برای جلوگیری از وابستگی به آن مجوز، اصلاح کنید یا توضیح بهتری در مورد اینکه چرا برای عملکرد صحیح برنامه به این مجوز نیاز دارید، ارائه دهید. همچنین باید مطمئن شوید که برنامهی شما در صورت رد درخواستهای مجوز یا غیرفعال کردن مجوزها در تنظیمات، استثنائات را مدیریت میکند.
افزایش بار تراکنشی
از کاربران خواسته میشود که دسترسی به گروههای مجوز را به صورت جداگانه و نه به صورت مجموعهای اعطا کنند. این امر به حداقل رساندن تعداد مجوزهای درخواستی را بسیار مهم میکند. این امر بار کاربر را برای اعطای مجوزها افزایش میدهد و بنابراین احتمال رد شدن حداقل یکی از درخواستها را افزایش میدهد.
مجوزهایی که نیاز به تبدیل شدن به یک کنترلکننده پیشفرض دارند
برخی از برنامهها به دسترسی به اطلاعات حساس کاربر مربوط به گزارشهای تماس و پیامکها وابسته هستند. اگر میخواهید مجوزهای خاص گزارشهای تماس و پیامکها را درخواست کنید و برنامه خود را در فروشگاه Play منتشر کنید، باید قبل از درخواست این مجوزهای زمان اجرا، از کاربر بخواهید که برنامه شما را به عنوان کنترلکننده پیشفرض برای یک عملکرد اصلی سیستم تنظیم کند.
برای اطلاعات بیشتر در مورد کنترلکنندههای پیشفرض، از جمله راهنمایی در مورد نمایش اعلان کنترلکننده پیشفرض به کاربران، به راهنمای مجوزهایی که فقط در کنترلکنندههای پیشفرض استفاده میشوند، مراجعه کنید .
کتابخانههایی که با آنها کار میکنید را بشناسید
گاهی اوقات، کتابخانههایی که در برنامه خود استفاده میکنید، به مجوزها نیاز دارند. برای مثال، کتابخانههای تبلیغات و تجزیه و تحلیل ممکن است برای پیادهسازی قابلیتهای مورد نیاز، نیاز به دسترسی به گروه مجوزهای LOCATION داشته باشند. اما از دیدگاه کاربر، درخواست مجوز از برنامه شما میآید، نه از کتابخانه.
همانطور که کاربران برنامههایی را انتخاب میکنند که از مجوزهای کمتری برای عملکرد مشابه استفاده میکنند، توسعهدهندگان نیز باید کتابخانههای خود را بررسی کرده و SDK های شخص ثالثی را انتخاب کنند که از مجوزهای غیرضروری استفاده نمیکنند. به عنوان مثال، اگر از کتابخانهای استفاده میکنید که قابلیت موقعیت مکانی را ارائه میدهد، مطمئن شوید که مجوز FINE_LOCATION را درخواست نمیکنید، مگر اینکه از قابلیت هدفگیری مبتنی بر موقعیت مکانی استفاده کنید.
محدود کردن دسترسی پسزمینه به موقعیت مکانی
وقتی برنامه شما در پسزمینه اجرا میشود، دسترسی به موقعیت مکانی باید برای عملکرد اصلی برنامه حیاتی باشد و مزیت آشکاری برای کاربران داشته باشد.
برای هر دو مدل مجوز آزمایش کنید
در اندروید ۶.۰ (سطح API ۲۳) و بالاتر، کاربران به جای انجام این کار هنگام نصب برنامه، در زمان اجرا مجوزهای برنامه را اعطا و لغو میکنند. در نتیجه، شما باید برنامه خود را تحت طیف وسیعتری از شرایط آزمایش کنید. قبل از اندروید ۶.۰، منطقاً میتوانستید فرض کنید که اگر برنامه شما در حال اجرا باشد، تمام مجوزهایی را که در مانیفست برنامه اعلام کرده است، دارد. اکنون، کاربر میتواند مجوزها را برای هر برنامهای، صرف نظر از سطح API، فعال یا غیرفعال کند. شما باید آزمایش کنید تا از عملکرد صحیح برنامه خود در سناریوهای مختلف مجوز اطمینان حاصل کنید.
نکات زیر به شما کمک میکند تا مشکلات مربوط به کد مربوط به مجوزها را در دستگاههایی که سطح API 23 یا بالاتر را اجرا میکنند، پیدا کنید:
- مجوزهای فعلی برنامه و مسیرهای کد مرتبط را شناسایی کنید.
- جریانهای کاربری را در سرویسها و دادههای دارای مجوز آزمایش کنید.
- با ترکیبهای مختلفی از مجوزهای اعطا شده یا لغو شده آزمایش کنید. برای مثال، یک برنامه دوربین ممکن است
CAMERA،READ_CONTACTSوACCESS_FINE_LOCATIONدر مانیفست خود فهرست کند. شما باید برنامه را با هر یک از این مجوزها روشن و خاموش آزمایش کنید تا مطمئن شوید که برنامه میتواند تمام پیکربندیهای مجوز را به درستی مدیریت کند. - از ابزار adb برای مدیریت مجوزها از خط فرمان استفاده کنید:
- فهرست کردن مجوزها و وضعیتها بر اساس گروه:
$ adb shell pm list permissions -d -g
- اعطای یا لغو یک یا چند مجوز:
$ adb shell pm [grant|revoke] <permission-name> ...
- فهرست کردن مجوزها و وضعیتها بر اساس گروه:
- برنامه خود را برای سرویسهایی که از مجوزها استفاده میکنند، تجزیه و تحلیل کنید.
منابع اضافی
- دستورالعملهای طراحی متریال برای مجوزهای اندروید
- اندروید مارشمالو ۶.۰: درخواست مجوز : این ویدیو مدل مجوزدهی زمان اجرای اندروید و روش صحیح درخواست مجوز از کاربران را توضیح میدهد.
- توضیح دهید که چرا برنامه به مجوزها نیاز دارد
- بهترین شیوهها برای شناسههای منحصر به فرد