از 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
شوند یا روی 0 تنظیم می شوند). - رتبهبندی در 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 خود را به روز کنید.
بدون سفارشی سازی
تغییرات اطلاعات وابستگی مخاطبین را سفارشی نکنید یا کار نکنید. آنها در چارچوب تعبیه شده اند و ایجاد هر گونه تغییری شما را از انطباق خارج می کند. هرگز تنظیمات پیش فرض را تغییر ندهید یا گزینه های درب پشتی ارائه نکنید.