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