در Android 10، دادههای مرتبط با مخاطبین که توسط مؤلفه Contacts Provider (منبع دادههای مشاهده شده در برنامه مخاطبین دستگاه) مدیریت میشوند، متفاوت از Android 9 و پایینتر قابل دسترسی هستند.
قبل از Android 10، برنامه ها از Contacts Provider برای دسترسی به داده ها و انتقال آن بین دستگاه و سرویس های آنلاین استفاده می کردند. Android 10 تغییراتی را در مورد دسترسی به داده ها برای اطمینان از افزایش حریم خصوصی کاربر در همه دستگاه های Android 10 که از Contacts Provider استفاده می کنند، دارد. برای یکی، پایگاه داده زیربنایی حاوی داده های وابستگی تماس نیست. بنابراین برنامه ها نمی توانند روی آن بنویسند یا از آن بخوانند. تغییرات شامل موارد زیر است:
- ارائهدهنده مخاطبین، دادههای مرتبط با مخاطبین را ثبت نمیکند، مانند تعداد دفعاتی که با کاربر تماس گرفته شده، آخرین بار تماس، برنامه استفادهشده، فرد تماسگرفته، یا هر داده تاریخی مرتبط.
- کلاس
MultiAutoCompleteTextView
در API تکمیل خودکار Contacts Provider نتایج پرس و جو را بر اساس شمارنده تعامل مرتب نمی کند. - چارچوب Android رتبهبندی ضمنی مخاطبین را ارائه نمیکند. (با این حال، رتبه بندی مخاطبین صریح و کنترل شده توسط کاربر (مانند مخاطبین ستاره دار ) باقی می ماند).
برای اجرای این تغییرات یکی از موارد زیر را انجام دهید:
- از آخرین ارائه دهنده مخاطبین استفاده کنید.
- نسخه خود را به روز کنید (اگر از نسخه فورکی استفاده می کنید).
علاوه بر این، برنامههایی را که به ویژگیهای منسوخ ارائهدهنده مخاطبین متکی هستند، بهروزرسانی کنید. نسخههای API که برای راهحلی برای عملکردهای منسوخ طراحی شدهاند، مجاز نیستند.
برای Android 9 و پایینتر، دادههای تعامل با مخاطبین از ارائهدهنده مخاطبین حذف نشده است. در عوض، دادههای تعامل تماس بهصورت دورهای (تقریباً یک بار در روز) برای شبیهسازی معادل آن در Android 10 پاک میشود. ارائهدهنده مخاطبین این اطلاعات را ذخیره میکند، اما فقط بهطور موقت.
API تغییر می کند
انتظار می رود این تغییرات تاثیر زیادی بر API ها داشته باشد. برای مثال، رتبهبندی تکمیل خودکار به خوبی عمل نمیکند. اثرات بالقوه بر رفتار API شامل موارد زیر است:
- ارائه دهنده مخاطبین، تنظیمات برگزیده کاربر یا تعامل با آن مخاطب را در ستون های جدول
ContactsContract.Contacts
ذخیره نمی کند. - API تکمیل خودکار نتایج را بر اساس شمارنده تعامل مرتب نمیکند.
-
TIMES_CONTACTED
/TIMES_USED
وLAST_TIME_CONTACTED
/LAST_TIME_USED
نمیشوند. - پس از ارتقاء به Android 10، این موارد پاک می شوند (بسته به ستون های آسیب دیده روی
null
یا صفر تنظیم می شوند). - رتبهبندی در APIهای جستجوی تکمیل خودکار، نتایجی را که بر اساس حروف الفبا مرتب شدهاند، برمیگرداند، نه بر اساس اطلاعات وابستگی.
- تماسهای API برای مخاطبین مکرر (مثلاً با استفاده از رشته فیلتر
CONTENT_FREQUENT_URI
) هیچ نتیجهای ندارد.
به طور کلی، اگر هر یک از عناصر API ارائهدهنده مخاطبین منسوخ از شمارندهها استفاده میکند، آن شمارندهها (زمانی که در Android 10 استفاده میشوند) حاوی 0 هستند و در صورت درخواست، 0 را برمیگردانند. درخواستهای بهروزرسانی از APIهای آسیبدیده نادیده گرفته میشوند. به عنوان مثال، کلاس ContactsContract.DataUsageFeedback
منسوخ شده است، بنابراین به روز رسانی و حذف تماس های این کلاس نادیده گرفته می شود.
فیلدهایی که بر API ها تأثیر می گذارند
این فیلدها در اندروید 10 تغییر کرده اند:
-
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
-
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
-
ContactsContract.DataUsageStatColumns#TIMES_USED
-
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
-
ContactsContract#CONTENT_STREQUENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_STREQUENT_URI
-
ContactsContract.Contacts#CONTENT_FREQUENT_URI
-
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_FILTER_URI
فیلدهای آسیب دیده در Android 10 ممکن است در API های مختلف وجود داشته باشند، همانطور که در جدول زیر نشان داده شده است. فیلدهای API منسوخ شده رفتارهای فهرست شده را برمی گرداند. از آنجا که یکی از این فیلدهای منسوخ شده ممکن است در چندین API شما استفاده شود، موارد استفاده خود را تأیید کنید.
کلاس | فیلدهای API | 10 برمی گرداند |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | این ستون ها صرف نظر از نحوه استفاده از آنها همیشه حاوی 0 هستند. تلاش برای اصلاح آنها نادیده گرفته می شود. |
Contacts | markAsContacted() | بدون عملیات |
ContactsContract.DataUsageFeedback | | بدون عملیات |
ContactsContract.Contacts | شدید ( ستاره دار + مکرر)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | فقط مخاطبین ستاره دار را برمی گرداند. هیچ مخاطب مکرری برگردانده نشد. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | فیلتر کردن (همچنین به نام تکمیل خودکار) API | نتایج بر اساس قرابت مرتب نشده اند. اینها بر اساس ستاره دار و نام مرتب شده اند. |
جایگزین، گزینه ها
هیچ جایگزینی برای فیلدهای API منسوخ شده وجود ندارد. راهحلهایی که برای دور زدن این محدودیتها طراحی شدهاند، چه در قالب APIهای جدید یا فیلدهای جدید، مجاز نیستند.
پیاده سازی
برای اجرای این تغییرات نیازی به انجام هیچ کاری نیست. آنها بخشی از ابتکار عمل برای افزایش حریم خصوصی کاربر در پلتفرم سیستم عامل اندروید هستند. با این حال، اگر برنامههای شما به ویژگیهای منسوخ شده متکی هستند، ممکن است بخواهید برنامههای خود را برای جبران هرگونه تغییر بهروزرسانی کنید. بعلاوه، اگر از نسخه فورک شده Contacts Provider استفاده می کنید، باید Contacts Provider خود را به روز کنید.
بدون سفارشی سازی
تغییرات اطلاعات وابستگی مخاطبین را سفارشی نکنید یا کار نکنید. آنها در چارچوب تعبیه شده اند و ایجاد هر گونه تغییری شما را از انطباق خارج می کند. هرگز تنظیمات پیش فرض را تغییر ندهید یا گزینه های درب پشتی ارائه نکنید.