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

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

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

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

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

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

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

نمایش جاهای اطراف

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

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

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

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

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

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

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

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

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

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

باز کردن اسناد

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

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

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

عکس گرفتن

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

در این شرایط، اجازه CAMERA را اعلام نکنید. به‌جای آن، کنش قصد ACTION_IMAGE_CAPTURE را فراخوانی کنید.

ضبط ویدیو

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

در این شرایط، اجازه CAMERA را اعلام نکنید. به‌جای آن، کنش قصد ACTION_VIDEO_CAPTURE را فراخوانی کنید.

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

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

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

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

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

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

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

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

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

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

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

وارد کردن خودکار گذرنویسه یک‌بارمصرف

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

برای پشتیبانی از این عملکرد در دستگاه‌هایی که از «خدمات Google Play» استفاده می‌کنند، اجازه READ_SMS را اعلام نکنید. درعوض، از SMS Retriever API استفاده کنید.

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

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

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

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

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

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

برای پشتیبانی از این عملکرد در دستگاه‌هایی که از «خدمات Google Play» استفاده می‌کنند، اجازه READ_PHONE_STATE را اعلام نکنید. درعوض، از کتابخانه نکته شماره تلفن استفاده کنید.

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

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

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

برقراری تماس تلفنی

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

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

توقف موقت رسانه هنگام ایجاد وقفه در برنامه

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

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

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

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

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

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

بازنشانی اجازه‌های استفاده‌نشده

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

راهنمای طراحی را بخوانید.

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

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

راهنمای طراحی را بخوانید.

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

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

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

رسیدگی به رد اجازه‌ها

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

راهنمای طراحی را بخوانید.