درخواست های مجوز خود را به حداقل برسانید

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

درخواست مجوز از کاربران، جریان کاری کاربر را مختل می‌کند و کاربران می‌توانند درخواست شما را رد کنند. علاوه بر این، هر بار که مجوز جدیدی را اعلام می‌کنید، باید نحوه درخواست و اشتراک‌گذاری داده‌های کاربر توسط برنامه خود را بررسی کنید . برخی از مجوزها و APIهای بسیار حساس، شما را ملزم به افشای درون‌برنامه‌ای دسترسی، جمع‌آوری، استفاده و اشتراک‌گذاری داده‌ها می‌کنند.

چندین روش جایگزین برای به حداقل رساندن استفاده از مجوزها وجود دارد:

  • اگر برنامه شما فقط به موقعیت مکانی تقریبی نیاز دارد، مجوزهایی را اعلام کنید که اطلاعات تقریبی موقعیت مکانی را ارائه می‌دهند، نه اطلاعات دقیق موقعیت مکانی.
  • فراخوانی APIهایی که به برنامه شما اجازه می‌دهند بدون اعلام مجوزها، عملکرد مورد نظر را انجام دهد.
  • به جای اعلام مجوزها، برای انجام عملکرد، از intentهای خاص یا event handlers استفاده کنید.
  • این سیستم قراردادهای داخلی برای عملیات مختلف فایل ارائه می‌دهد و همچنین از قراردادهای سفارشی پشتیبانی می‌کند.

اگر مجبور به اعلام مجوز هستید، همیشه به تصمیم کاربر احترام بگذارید و راهی برای کاهش تدریجی و محترمانه‌ی تجربه‌ی برنامه‌تان فراهم کنید.

این صفحه چندین مورد استفاده را شرح می‌دهد که برنامه شما می‌تواند بدون اعلام نیاز به هیچ مجوزی، آنها را انجام دهد.

نمایش مکان‌های نزدیک

ممکن است برنامه شما نیاز به دانستن موقعیت مکانی تقریبی کاربر داشته باشد. این برای نمایش اطلاعات مربوط به موقعیت مکانی، مانند رستوران‌های نزدیک، مفید است.

برخی از موارد استفاده فقط به یک تخمین تقریبی از موقعیت مکانی دستگاه نیاز دارند. در این شرایط، بسته به اینکه برنامه شما چند وقت یکبار به اطلاعات موقعیت مکانی نیاز دارد، یکی از موارد زیر را انجام دهید:

  • اگر برنامه شما مرتباً به موقعیت مکانی نیاز دارد، مجوز ACCESS_COARSE_LOCATION را تعریف کنید. این مجوز، تخمینی از موقعیت مکانی دستگاه را از سرویس‌های موقعیت مکانی ارائه می‌دهد، همانطور که در مستندات مربوط به دقت تقریبی موقعیت مکانی توضیح داده شده است.
  • اگر برنامه شما کمتر یا فقط یک بار به موقعیت مکانی نیاز دارد، از کاربر بخواهید آدرس یا کد پستی را وارد کند.

موارد استفاده دیگر نیاز به تخمین دقیق‌تری از موقعیت مکانی دستگاه دارند. این موقعیت‌ها تنها مواقعی هستند که می‌توان مجوز ACCESS_FINE_LOCATION را اعلام کرد.

ایجاد و دسترسی به فایل‌ها

اندروید به شما امکان می‌دهد بدون نیاز به اعلام مجوزهای مربوط به فضای ذخیره‌سازی یا حسگرها، فایل‌ها را ایجاد و به آنها دسترسی داشته باشید.

باز کردن فایل‌های رسانه‌ای

برنامه شما ممکن است به کاربران اجازه دهد از بین عکس‌ها و ویدیوهای خود، مثلاً برای پیوست‌های پیام یا تصاویر پروفایل، انتخاب کنند.

برای پشتیبانی از این قابلیت، از photo picker استفاده کنید. photo picker برای استفاده به هیچ مجوز زمان اجرا نیاز ندارد. هنگامی که کاربر با photo picker تعامل می‌کند تا عکس‌ها یا ویدیوها را برای اشتراک‌گذاری با برنامه شما انتخاب کند، سیستم دسترسی موقت خواندن به URI مرتبط با فایل‌های رسانه‌ای انتخاب شده را اعطا می‌کند.

اگر برنامه شما نیاز دارد بدون استفاده از انتخابگر عکس به فایل‌های رسانه‌ای دسترسی داشته باشد، نیازی به اعلام مجوزهای ذخیره‌سازی ندارید:

  • اگر به فایل‌های رسانه‌ای که برنامه‌تان ایجاد کرده است دسترسی دارید، برنامه شما از قبل به این فایل‌ها در فروشگاه رسانه دسترسی دارد.
  • اگر به فایل‌های رسانه‌ای که برنامه‌های دیگر ایجاد کرده‌اند دسترسی دارید، از Storage Access Framework استفاده کنید .

اسناد باز

برنامه شما ممکن است اسنادی را که کاربر ایجاد کرده است، چه در برنامه شما و چه در برنامه دیگری، نشان دهد. یک مثال رایج، یک فایل متنی است.

در این شرایط، READ_EXTERNAL_STORAGE را فقط برای سازگاری با دستگاه‌های قدیمی‌تر تعریف کنید. android:maxSdkVersion را روی 28 تنظیم کنید.

بسته به اینکه سند توسط کدام برنامه ایجاد شده است، یکی از موارد زیر را انجام دهید:

عکس بگیرید

کاربران ممکن است با استفاده از برنامه دوربین از پیش نصب شده سیستم، در برنامه شما عکس بگیرند.

در این شرایط، مجوز CAMERA را اعلام نکنید. در عوض، اکشن ACTION_IMAGE_CAPTURE را فراخوانی کنید.

ضبط ویدیو

کاربران ممکن است با استفاده از برنامه دوربین از پیش نصب شده سیستم، در برنامه شما ویدیو ضبط کنند.

در این شرایط، مجوز CAMERA را اعلام نکنید. در عوض، اکشن ACTION_VIDEO_CAPTURE را فراخوانی کنید.

دستگاهی را که نمونه‌ای از برنامه شما را اجرا می‌کند، شناسایی کنید

ممکن است یک نمونه خاص از برنامه شما نیاز داشته باشد بداند روی کدام دستگاه اجرا می‌شود. این برای برنامه‌هایی که تنظیمات یا پیام‌رسانی خاص دستگاه دارند، مانند لیست‌های پخش مختلف برای دستگاه‌های تلویزیون و دستگاه‌های پوشیدنی، مفید است.

در این شرایط، مستقیماً به IMEI دستگاه دسترسی پیدا نکنید. در واقع، از اندروید ۱۰ به بعد، نمی‌توانید این کار را انجام دهید. در عوض، یکی از کارهای زیر را انجام دهید:

  • با استفاده از کتابخانه Instance ID، یک شناسه دستگاه منحصر به فرد برای نمونه برنامه خود دریافت کنید.
  • شناسه‌ی خودتان را که به فضای ذخیره‌سازی برنامه‌تان محدود می‌شود، ایجاد کنید. از توابع پایه‌ی سیستم، مانند randomUUID() استفاده کنید.

جفت شدن با دستگاه از طریق بلوتوث

برنامه شما ممکن است با انتقال داده به دستگاه دیگر از طریق بلوتوث، تجربه کاربری بهتری ارائه دهد.

برای پشتیبانی از این قابلیت، مجوزهای ACCESS_FINE_LOCATION ، ACCESS_COARSE_LOCATIION یا BLUETOOTH_ADMIN را اعلام نکنید. در عوض، از جفت‌سازی دستگاه همراه استفاده کنید.

وارد کردن خودکار شماره کارت پرداخت

سرویس‌های گوگل پلی کتابخانه‌ای ارائه می‌دهند که به شما امکان می‌دهد به‌طور خودکار شماره کارت پرداخت را وارد کنید. به‌جای اعلام مجوز CAMERA ، می‌توانید از کتابخانه تشخیص کارت‌های نقدی و اعتباری استفاده کنید.

مدیریت تماس‌های تلفنی و پیامک‌ها

سرویس‌های اندروید و گوگل پلی کتابخانه‌هایی ارائه می‌دهند که به شما امکان می‌دهند تماس‌های تلفنی و پیام‌های متنی را بدون نیاز به اعلام مجوزهای مربوط به تماس‌های تلفنی یا پیام‌های متنی مدیریت کنید.

وارد کردن خودکار رمز عبور یکبار مصرف

برای ساده‌سازی گردش کار احراز هویت دو مرحله‌ای، برنامه شما ممکن است به طور خودکار کد عبور یک‌بار مصرفی را که برای تأیید هویت کاربر به دستگاه او ارسال می‌شود، وارد کند.

برای پشتیبانی از این قابلیت در دستگاه‌هایی که از سرویس‌های گوگل پلی استفاده می‌کنند، مجوز READ_SMS را اعلام نکنید. در عوض، از API بازیابی پیامک استفاده کنید.

در دستگاه‌های دیگر، اگر برنامه شما اندروید ۸.۰ (سطح API ۲۶) یا بالاتر را هدف قرار می‌دهد، با استفاده از createAppSpecificSmsToken() یک توکن مخصوص برنامه ایجاد کنید. این توکن را به برنامه یا سرویس دیگری که می‌تواند پیامک تأیید ارسال کند، ارسال کنید.

شماره تلفن کاربر را تأیید کنید

برای اینکه برنامه شما بتواند شماره تلفن کاربر را به طور ایمن تأیید کند، راه‌حل پیشنهادی، API اعتبارنامه‌های دیجیتال است. استفاده از این API چه به طور مستقیم و چه از طریق طیف گسترده‌ای از تجمیع‌کننده‌های سازگار، به شما امکان می‌دهد اطلاعات حساب کاربری را بدون درخواست مجوزهای حساس دستگاه، به طور قابل اعتمادی تأیید کنید. برای یک راه‌حل Firebase، به تأیید شماره تلفن Firebase مراجعه کنید.

از طرف دیگر، می‌توانید شماره تلفن کاربر را با استفاده از یک کد عبور یکبار مصرف، با استفاده از API بازیابی پیامک ، تأیید کنید.

شماره تلفن کاربر را به صورت خودکار وارد کنید

برای ارائه فروش یا پشتیبانی کارآمدتر، برنامه شما ممکن است به کاربر اجازه دهد شماره تلفن دستگاه خود را به طور خودکار وارد کند.

برای پشتیبانی از این قابلیت در دستگاه‌هایی که از سرویس‌های گوگل پلی استفاده می‌کنند، مجوز READ_PHONE_STATE را اعلام نکنید. در عوض، از کتابخانه Phone Number Hint استفاده کنید.

فیلتر کردن تماس‌های تلفنی

برای به حداقل رساندن وقفه‌های غیرضروری برای کاربر، برنامه شما ممکن است تماس‌های تلفنی را برای هرزنامه فیلتر کند.

برای پشتیبانی از این قابلیت، مجوز READ_PHONE_STATE را اعلام نکنید. در عوض، از API CallScreeningService استفاده کنید.

تماس‌های تلفنی برقرار کنید

ممکن است برنامه شما قابلیت برقراری تماس تلفنی با لمس اطلاعات مخاطب را ارائه دهد.

برای پشتیبانی از این قابلیت، به جای عمل ACTION_DIAL از عمل ACTION_CALL استفاده کنید. ACTION_CALL به مجوز زمان نصب CALL_PHONE نیاز دارد که از نصب برنامه شما توسط دستگاه‌هایی که نمی‌توانند تماس برقرار کنند، مانند برخی تبلت‌ها، جلوگیری می‌کند.

مکث رسانه هنگام قطع شدن برنامه

اگر کاربر تماس تلفنی دریافت کند، یا اگر زنگ هشداری که توسط کاربر تنظیم شده است رخ دهد، برنامه شما باید پخش هرگونه رسانه را تا زمانی که برنامه دوباره فوکوس صوتی را به دست آورد، متوقف کند.

برای پشتیبانی از این قابلیت، مجوز READ_PHONE_STATE را اعلام نکنید. در عوض، رویداد onAudioFocusChange() را پیاده‌سازی کنید که به طور خودکار هنگام تغییر فوکوس صوتی سیستم اجرا می‌شود. درباره نحوه پیاده‌سازی فوکوس صوتی بیشتر بدانید.

بارکدها را اسکن کنید

اندروید شامل پشتیبانی از API اسکنر کد گوگل (Google Code Scanner API ) است که توسط سرویس‌های گوگل پلی پشتیبانی می‌شود و به شما امکان می‌دهد بارکدها را بدون اعلام هیچ گونه مجوز دوربین رمزگشایی کنید. این API به حفظ حریم خصوصی کاربر کمک می‌کند و احتمال نیاز به ایجاد یک رابط کاربری سفارشی برای مورد استفاده اسکن بارکد شما را کاهش می‌دهد.

این API بارکد را اسکن می‌کند و فقط نتایج اسکن را به برنامه شما برمی‌گرداند. تصاویر روی دستگاه پردازش می‌شوند و گوگل هیچ داده یا نتیجه اسکنی را ذخیره نمی‌کند.

اگر برنامه شما نیاز به پشتیبانی از موارد استفاده پیچیده یا قالب‌های بارکد دارد، یا اگر به یک رابط کاربری سفارشی نیاز دارد، به جای آن از API اسکن بارکد ML Kit استفاده کنید.

مجوزهای استفاده نشده را بازنشانی کنید

اندروید روش‌های متعددی برای تنظیم مجدد مجوزهای زمان اجرا که استفاده نشده‌اند به حالت پیش‌فرض و رد شده آنها ارائه می‌دهد.

راهنمای طراحی را مطالعه کنید.

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

پس از اینکه ارزیابی کردید که برنامه شما نیاز به اعلام و درخواست مجوزهای زمان اجرا دارد، برای انجام این کار، یک گردش کار خاص را دنبال کنید.

راهنمای طراحی را مطالعه کنید.

توضیح دهید که چرا برنامه شما به مجوزها نیاز دارد

استفاده از requestPermissions() یک کادر محاوره‌ای نمایش می‌دهد که نشان می‌دهد برنامه شما می‌خواهد از کدام مجوزها استفاده کند، اما دلیل آن را توضیح نمی‌دهد، که ممکن است برای کاربر گیج‌کننده باشد.

برای جزئیات بیشتر و توصیه‌هایی در مورد نحوه و زمان نمایش این کادر محاوره‌ای، راهنمای طراحی را مطالعه کنید.

مدیریت رد مجوزها

برنامه شما باید به کاربران کمک کند تا پیامدهای رد مجوز را قبل و بعد از تصمیم به انجام این کار درک کنند.

راهنمای طراحی را مطالعه کنید.