راهنمای دسترسیها
در هر برنامهای با توجه به کارکرد آن، دسترسیهایی به دستگاه و اطلاعات کاربر وجود دارد که برخی از آنها به عنوان دسترسیهای حساس شناخته میشوند. منظور از دسترسیهای حساس، مواردیست که به موجب آنها، اطلاعات شخصی کاربر در اختیار برنامه قرار میگیرد. معمولا برای امنیت هر چه بیشتر کاربر، این نوع از دسترسی برنامه به صورت اینتنت پیادهسازی میشود. اینتنت این مزیت را دارد که کاربر را از فرآیندی که قصد انجام آن را دارد آگاه میکند و کاربر متوجه خواهد شد که چه برنامهای خواهان این دسترسیها است.
ایجاد فضای امن برای کاربران همواره از دغدغههای اصلی بازار بودهاست. کاربران هم میخواهند با اطمینان خاطر به دانلود برنامهها از بازار بپردازند. بنابراین در ادامه به بررسی دسترسیهای اندروید میپردازیم.
نکته: توسعه دهنده برای هر دسترسی برنامه که از آنها استفاده میکند باید یک توضیح شفاف داشته باشد، در غیر این صورت برنامه از سمت بازار منتشر نخواهد شد. |
دسترسیها همان مجوزهایی هستند که سیستم عامل به اپلیکیشن میدهد. گاهی اوقات برنامه نیازمند دسترسی به بخشهای خاصی همانند گالری یا لیست مخاطبین است و به دلیل حفظ حریم شخصی، تنها در صورتی مجوز استفاده از این قسمتها صادر میشود که کاربران اجازه دهند. برنامهها برای فعالیت به این مجوزها نیاز دارند و بدون آنها نمیتوانند عملکرد درستی داشته باشند. مثلا برنامههای مسیریابی اگر به "Location" دستگاه دسترسی نداشته باشند، امکان موقعیتیابی محل وجود ندارد و برنامه همانند یک نقشه ساده عمل خواهد کرد.
نمونههایی از دسترسی برنامه حساس و کاربرد مجاز و غیرمجاز آنها را میتوانید در ادامه ببینید:
- خواندن رویدادها از روی تقویم دستگاه یا حساب گوگل (android.permission.READ_CALENDAR)
در هر دستگاه چندین حساب برای تقویم وجود دارد از جمله حساب خود دستگاه، حساب ایمیل همگامسازی شده و …
هر حساب چندین رویداد مستقل دارد. با استفاده از این دسترسی در مرحلهی اول تمام حسابهای تقویم و در مرحلهی دوم تمام رویدادهای مربوط به آن حساب که شامل شناسه رویداد، توضیحات، نام، تاریخ، ساعت شروع و پایان و … دریافت میشود.
تنها برنامههایی که بخشی از عملکرد آنها وابسته به تقویم دستگاه و نمایش رویدادهای آن است، امکان استفاده از این دسترسی را خواهند داشت.
مثل: تقویم اذان گو بادصبا
- ایجاد، حذف و تغییر در رویدادهای تقویم دستگاه (android.permission.WRITE_CALENDAR)
افزودن، تغییر و یا حذف رویداد بر روی تقویم از امکانات این دسترسی است. نکتهی مهم در مورد این دسترسی این است که در عملهایی مانند حذف یا تغییر، توسعهدهنده نیاز به دسترسی "Read" نیز خواهد داشت. دلیل این مورد پیدا کردن شناسه رویداد مورد نظر و اجرای عملیات بر روی آن رویداد خاص است. این دسترسی زمانی مورد استفاده قرار میگیرد که لازم باشد توسعهدهنده تمام فرایند را داخل برنامه انجام دهد.
در غیر اینصورت تمامی عملکردهایی که این دسترسی در اختیار برنامه قرار میدهد توسط "Intent" نیز قابل پیادهسازی است، به این صورت که صفحه آن رویداد خاص توسط برنامه اصلی تقویم باز میشود و کاربر میتواند تغییرات مدنظر خود را بر روی آن اعمال کند.
بنابراین اگر برنامه شما نیازمند ایجاد تغییرات "Native" (ایجاد، ویرایش و حذف) در تقویم دستگاه کاربر است، میتوانید از این دسترسی استفاده کنید. توجه کنید که در اکثر مواقع پیادهسازی این تغییرات از طریق "Intent" امکانپذیر است.
مثل: تقویم آسمان
*برای پیادهسازی این دسترسی از طریق "Intent" میتوانید از مستندات «افزودن رویداد در تقویم از طریق "Intent"» استفاده کنید.
- دوربین (android.permission.CAMERA)
برای دسترسی به دوربین جلو یا عقب در مواقعای که برنامه مستقیم از "widget" دوربین در داخل برنامه استفاده کند، احتیاج به استفاده از این دسترسی است. در بعضی شرایط خاص دسترسی به برخی اطلاعات سختافزاری مربوط به دوربین دستگاه از اندروید «۱۰» به بالا نیاز به این دسترسی خواهد داشت. جهت ثبت تصویر و دریافت تصویر ثبتشده در برنامه میشود از "Intent" استفاده کرد، به این صورت که کاربر به دوربین پیشفرض دستگاه منتقل میشود، تصویر برداری انجام میشود و سپس به برنامه برگشت داده خواهد شد. استفاده از دوربین دستگاه جهت ثبت، ذخیره و دریافت تصاویر به منظور تغییر عکس پروفایل، بارگذاری تصاویر آگهی و ... با استفاده از "Intent" انجام میشود و به این دسترسی(دوربین) نیازی ندارد.
مثل: بارکد اسکنرها (QR & Barcode Scanner)
*برای پیادهسازی این دسترسی از طریق "Intent" میتوانید از مستندات «پیادهسازی دوربین بدون دسترسی» استفاده کنید.
- خواندن مخاطبین (android.permission.READ_CONTACTS)
این دسترسی به برنامه اجازه میدهد تا اطلاعات تمام مخاطبین ذخیره شود، از جمله شماره تلفن، نام و ... .
انتخاب و دریافت اطلاعات یک مخاطب با استفاده از "Intent" بدون استفاده از این دسترسی امکان پذیر است. این دسترسی زمانی کاربرد خواهد داشت که برنامه نیاز به اطلاعات تمامی مخاطبین داشته باشد و یا عملکرد انتخابی نیاز را برطرف نکند. به عنوان مثال زمانی که برنامه بخواهد نام یک شمارهی خاص را نمایش دهد، میتواند از این دسترسی استفاده کند. تنها برنامههایی با ویژگی نمایش لیستی از مخاطبین و اطلاعات آن درون برنامه مجاز به استفاده از این دسترسی هستند. انتخاب یک مخاطب خاص توسط کاربر، دریافت و نمایش اطلاعات آن در برنامه از طریق "Intent" قابل پیادهسازی است و نیاز به استفاده از این دسترسی نیست.
مثل: پیامرسانها (WhatsApp Messenger)
*برای پیادهسازی و بازیابی مخاطبین ذخیره شده میتوانید از مستندات «نمایش لیست مخاطبین از طریق "Intent"» استفاده کنید.
- تغییر، ایجاد و یا حذف مخاطبین بدون دخالت کاربر (android.permission.WRITE_CONTACTS)
این دسترسی برای ایجاد، تغییر و یا حذف یک مخاطب به شناسه آن مخاطب نیاز دارد و دریافت شناسه تماماً از توضیحات مربوط به دسترسی "Read" پیروی میکند.اگر برنامه شما نیازمند ویرایش، حذف و یا افزودن مخاطب جدید بر روی دفترچه تلفن دستگاه است، میتوانید از این دسترسی استفاده کنید. توجه کنید که پیادهسازی تمامی این موارد با استفاده از "Intent" نیز امکانپذیر است.
مثل: اضافه کردن مخاطب (Contacts)
*برای پیادهسازی این دسترسی برنامه از طریق "Intent" میتوانید از مستندات «افزودن رویداد در تقویم از طریق "Intent"» استفاده کنید.
- دریافت موقعیت مکانی دقیق با خطای چند متر (android.permission.ACCESS_FINE_LOCATION)
دسترسی دقیق موقعیت مکانی به صورت ترکیبی از "Network Provider" و "Gps Provider" استفاده میکند. با استفاده از این دسترسی، توسعهدهنده میتواند برای محاسبهی موقعیت مکانی به تنهایی از "GPS" استفاده کند یا برای دقیقتر شدن محاسبات به صورت ترکیبی از "GPS" و "Network" استفاده کند. این مورد موجب میشود که موقعیت کاربر با کمترین خطا نمایش داده شود. توجه کنید که برنامههای نمایشدهنده آبوهوا و برنامههایی با تبلیغات هدفمند و … امکان استفاده از این دسترسی را ندارند و میتوانند از دسترسی موقعیت مکانی تقریبی استفاده کنند.
- دریافت موقعیت مکانی تقریبی کاربر در مقیاس شهر یا محله (android.permission.ACCESS_COARSE_LOCATION)
موقعیت مکانی تقریبی فقط امکان استفاده از "Network Provider" را فراهم میکند. با توجه به اینکه "Gps Provider" در این دسترسی ارائه نمیشود، برنامه تنها با استفاده از "Cell Towers" و "Wi-Fi" میتواند موقعیت را تشخیص دهد که خطای آن نسبت به این دو متغیر، تغییر خواهد کرد. اگر برای عملکرد صحیح برنامه نیازمند دریافت اطلاعات موقعیت مکانی تقریبی کاربر هستید، میتوانید از این دسترسی استفاده کنید.
استفاده از این دسترسی برای کارکرد صحیح سرویسهای تبلیغاتی نیز امکانپذیر است.
- ضبط صدا از طریق میکروفون دستگاه (android.permission.RECORD_AUDIO)
برنامههایی با قابلیت تماس صوتی یا تصویری، دستیار صوتی هوشمند، نمایش "Visualiser" در برنامه و برنامههایی که برای ارائه عملکرد صحیح نیازمند استفاده از میکروفون دستگاه هستند، میتوانند از این دسترسی استفاده کنند. برنامههایی که در عملکرد خود از دستیار صوتی «گوگل» استفاده میکنند، احتیاجی به استفاده از این دسترسی ندارند.
مثل: پیامرسانها (WhatsApp Messenger)
- تماس مستقیم با شماره تلفن بدون دخالت کاربر (android.permission.CALL_PHONE)
تماس مستقیم و بدون دخالت کاربر با شماره تماس خاص، هزینهبر خواهد بود. این دسترسی امکان اجرای "USSD" و ارزش افزوده به همراه دارد.
میتوان این دسترسی را از طریق "Intent" نیز پیادهسازی کرد. به صورتی که آخرین مرحله از انجام فرایند توسط کاربر صورت میگیرد. اگر به دلایل کافی (مانند اجرای کدهای USSD) امکان پیادهسازی ویژگیهای دسترسی تماس از طریق "Intent" وجود ندارد، میتوان از این دسترسی استفاده کرد.
مثل: ستاره پونصد
*برای پیادهسازی این دسترسی توسط "Intent" میتوانید از مستندات «برقرار تماس از طریق "Intent"» استفاده کنید.
- پاسخدهی خودکار به تماسهای ورودی (android.permission.ANSWER_PHONE_CALLS)
این دسترسی برای پاسخ خودکار به تماسهای ورودی بدون دخالت کاربر در اندروید «۸» به بالا استفاده میشود. روشهای پاسخدهی این دسترسی منسوخ شده است ولی همچنان کاربرد دارد. پاسخ به تماس ورودی راههای دیگری نیز دارد که ممکن است نیاز به این دسترسی نداشته باشد، بنابراین تنها درموارد خاص مانند برنامههای منشی تلفنی امکان استفاده از این دسترسی وجود دارد. اظهارنظر نهایی در مورد امکان استفاده از این دسترسی پس از بررسی کامل برنامه ممکن خواهد بود.
- خواندن لیست تماسها (android.permission.READ_CALL_LOG)
با این دسترسی، تمامی اطلاعات بخش گزارش تماس، شامل شماره تلفن، وضعیت تماس، زمان تماس، مدت زمان برقراری تماس و ... دریافت میشود.این دسترسی جایگزین دیگری ندارد و تمام گزارشات موجود را فراخوانی میکند. اظهارنظر نهایی در مورد امکان استفاده از این دسترسی پس از بررسی کامل برنامه ممکن خواهد بود.
مثل : برنامه پشتیبانگیری از اطلاعات (Super Backup & Restore)
- اضافه کردن، حذف یا تغییر در لیست تماسها (android.permission.WRITE_CALL_LOG)
این دسترسی نیاز به شناسه دارد که این شناسه را از دسترسی "Read" به دست میآورد. تغییراتی که این دسترسی بر روی یک سطر از لاگ ایجاد میکند محدود است. به صورتی که اگر شماره تماس یک لاگ تغییر کند و آن شماره تماس متعلق به شخص دیگری باشد و به عنوان مخاطب ذخیره شده باشد، نام هم به نسبت شماره تغییر میکند. در بخش لاگ امکان تغییر وضعیت تماس با این دسترسی در یک سطر از لاگ وجود ندارد اما امکان تغییر تاریخ تماس در این دسترسی وجود دارد.
مثل: ویرایش لیست تماس (Phone by Google - Caller ID & Spam Protection)
- ارسال پیامک بدون دخالت کاربر (android.permission.SEND_SMS)
توسط این دسترسی امکان ارسال پیامک بدون دخالت و اطلاع کاربرها با متن دلخواه وجود دارد. اظهار نظر نهایی در مورد امکان استفاده از این دسترسی پس از بررسی کامل برنامه ممکن خواهد بود. توجه کنید که ارسال پیامک از طریق "Intent" نیز امکانپذیر است.
مثل: ارسال پیامک (Google Messages)
*برای پیادهسازی این دسترسی توسط "Intent" میتوانید از مستندات «ارسال پیام کوتاه از طریق "Intent"» استفاده کنید.
- دریافت پیامک (android.permission.RECEIVE_SMS)
این دسترسی امکان دریافت اطلاعات پیامک دریافت شده مانند نام، متن پیامک، شماره ارسالکننده و زمان ارسال را فراهم میکند. این دسترسی به محض دریافت پیامک به اطلاعات آن دسترسی خواهد داشت و معمولا برای درج خودکار کد فعالسازی استفاده میشود.
*لازم به ذکر است برنامهها توسط "Google SMS Retriever API" میتوانند پیامک فعالسازی را به صورت خودکار وارد کنند. برای اطلاعات بیشتر و استفاده از این API در برنامه خود میتوانید از مستندات «نحوهی پیادهسازی Google SMS Retriever API جهت درج خودکار پیامک فعالسازی» استفاده کنید.
- خواندن پیامک (android.permission.READ_SMS)
این دسترسی امکان خواندن تمامی پیامکهای دریافتشده بدون در نظر گرفتن بازه زمانی آن را فراهم میکند. اطلاعاتی شامل متن پیامک، تاریخ دریافت، تایپ پیام و شماره تماس ارسالکننده در دسترس خواهد بود. توجه کنید که درج خودکار کد فعالسازی در برنامه به این دسترسی نیاز ندارد.
مثل: خواندن پیامکهای بانکی برای حسابداری شخصی (مدیریت مالی شخصی نیوُ | Nivo PFM)
- تغییر در پیامک (android.permission.WRITE_SMS)
این دسترسی از کلاس مانیفست حذف شده است ولی همچنان امکان اضافه کردن آن وجود دارد اما استفاده از این دسترسی ممکن نیست.
- بستن سایر برنامهها (android.permission.KILL_BACKGROUND_PROCESSES)
این دسترسی شبیهساز گزینه "Force Stop" در تنظیمات برنامه است که تمام فعالیتهای برنامه بسته میشود. با این دسترسی میتوان پردازش هر برنامه دلخواه در دستگاه کاربر را متوقف کرد. بستن(اتمام، خاتمه دادن) فعالیتها و پردازشهای برنامه خود در محیط سیستم عامل به این دسترسی نیازی ندارد.
مثل: بهینهسازها ( Phone Cleaner - Android Clean, Master Antivirus)
- نمایش و ترسیم پیغام، خارج از محیط برنامه (android.permission.SYSTEM_ALERT_WINDOW)
با استفاده از این دسترسی امکان ترسیم بر روی منوی دستگاه و برنامههای دیگر برای یک برنامه ممکن میشود. از اندروید «۱۰» به بالا باز شدن فعالیتهای برنامه توسط سرویسها نیاز به این دسترسی دارد که معمولاً در هنگام زنگ خوردن برای نمایش صفحه تماس از آن استفاده میشود. نمایش دیالوگ با استفاده این دسترسی امکانپذیر است ولی قابلقبول نیست و لازم است از راه حل جایگزین استفاده کنید. تنها در صورت نمایش قسمتی از برنامه خارج از محیط آن و یا باز کردن برنامه از طریق سرویس آن، به استفاده این دسترسی نیاز خواهد بود.
نمایش یک پیغام ساده در محیط برنامه نیازی به این دسترسی ندارد.
مثل: کلیدها و ابزارهای شناور (فست دیکشنری)، قفل برنامهها (AppLock)، ویدیو پلیرهایی که قابلیت نمایش شناور دارند (VLC)
- خواندن اطلاعات مرورگر (com.android.browser.permission.READ_HISTORY_BOOKMARKS)
این دسترسی امکان خواندن "Bookmark" و تاریخچه را همزمان فراهم میکند. امکان دریافت اطلاعات مذکور از تمام مرورگرهای نصبشده به دلخواه توسعهدهنده نیز وجود دارد. اظهارنظر نهایی در مورد امکان استفاده از این دسترسی پس از بررسی کامل برنامه ممکن خواهد بود.
- درخواست نصب برنامه (android.permission.REQUEST_INSTALL_PACKAGES)
استفاده از این دسترسی باید با ماهیت برنامه ارتباط مستقیم داشته باشد. تنها برنامههایی که نیاز به اجرای فایل نصبی برنامهها (apk) برای انجام عملکرد اصلی خود دارند، مجاز به استفاده از این دسترسی هستند.
مثل: پیامرسانها (WhatsApp)، برنامههای مدیریت دانلود (ADM)
- پاک کردن دادههای نهان (android.permission.CLEAR_APP_CACHE)
این دسترسی شبیهساز گزینه "Clear Cache" در تنظیمات برنامه است. توسط این دسترسی میتوان حافظهی نهان برنامههای نصبشده بر روی دستگاه را حذف کرد. برای حذف دادههای نهان برنامه خود به استفاده از این دسترسی نیازی نیست.
مثل: برنامههای مدیریت حافظه (Avast Cleanup)
- ضبط ویدئو (android.permission.RECORD_VIDEO)
اگر برنامه اقدام به استفاده از ویجت سختافزاری دوربین، برای ضبط ویدیو درون برنامه میکند، به این دسترسی نیاز دارد. اگر برای ضبط ویدیو از دوربین دستگاه استفاده میکنید، لازم است فرایند مذکور را بدون استفاده از این دسترسی و از طریق "Intent" پیادهسازی کنید.
- نصب برنامه (android.permission.INSTALL_PACKAGES)
فقط برنامههای سیستمی میتوانند از این دسترسی استفاده کنند. این دسترسی امکان نصب برنامه بدون دخالت کاربر رو فراهم میکند. استفاده از این دسترسی باید با ماهیت برنامه ارتباط مستقیم داشته باشد در غیر این صورت امکان استفاده از این دسترسی وجود ندارد.
- دریافت بستههای نصب شده روی دستگاه (android.permission.QUERY_ALL_PACKAGES)
این دسترسی امکان دسترسی به تمامی بستههای نصب شده در اندروید «۱۱» به بالا را فراهم میکند (All Package Visibility). جستجوی یک برنامه با نام بسته مشخص بدون استفاده از این دسترسی ممکن است. جستجوی لیستی از برنامههای با "Intent filter" مشخص بدون دریافت این دسترسی امکانپذیر است. بنابراین با توجه به وجود راههای جایگزین، امکان استفاده از این دسترسی وجود ندارد.
*برای پیادهسازی این دسترسی توسط راههای جایگزین، میتوانید از مستندات «نمایش بسته نصب شده بدون استفاده از دسترسی "android.permission.QUERY_ALL_PACKAGES"» استفاده کنید.
اگر در مورد دسترسی برنامه و روند انجام آن ابهامی وجود دارد، سوالات خود را با پشتیبانی توسعهدهندگان (developers@cafebazaar.ir) با موضوعِ (subject) «راهنمای دسترسیها» در میان بگذارید.
به مطالب ارائه شده چه امتیازی میدهید؟
اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.
زمان انتشار: ۱۴۰۰-۰۴-۰۸ ۱۲:۲۶
آخرین بهروزرسانی: ۱۴۰۱-۰۸-۰۱ ۱۰:۰۳