از Android 10، دادههای مربوط به خویشاوندی مخاطبین که توسط جزء ارائهدهنده مخاطبین (منبع دادههای مشاهدهشده در برنامه مخاطبین دستگاه) مدیریت میشود، به روشی متفاوت از Android 9 و نسخههای پایینتر دردسترس قرار میگیرد.
پیشاز Android 10، برنامهها از «ارائهدهنده مخاطبین» برای دسترسی به دادهها و انتقال آنها بین دستگاه و سرویسهای آنلاین استفاده میکردند. ویژگیهای Android 10 تغییراتی درخصوص دسترسیپذیری دادهها دارد تا حریم خصوصی کاربر در همه دستگاههای Android 10 که از «ارائهدهنده مخاطبین» استفاده میکنند افزایش یابد. برای مثال، پایگاه داده زیربنایی حاوی دادههای قرابت مخاطب نیست. بنابراین برنامهها نمیتوانند در آن بنویسند یا از آن بخوانند. تغییرات شامل موارد زیر میشود:
- «ارائهدهنده مخاطبین» دادههای مربوط به تمایل مخاطبین را ضبط نمیکند، ازجمله تعداد دفعاتی که با کاربر تماس گرفته شده است، آخرین زمان تماس، برنامه استفادهشده، شخص تماسگرفتهشده، یا هرگونه داده سابقه مرتبط.
- کلاس
MultiAutoCompleteTextViewدر میانای برنامهسازی کاربردی تکمیل خودکار «ارائهدهنده مخاطبین» نتایج پُرسمان را براساس شمارنده تعامل مرتب نمیکند. - چارچوب Android رتبهبندی ضمنی مخاطبین را ارائه نمیدهد. (بااینحال، رتبهبندی مخاطبین صریح تحت کنترل کاربر (مثل مخاطبین ستارهدار) باقی میماند).
برای پیادهسازی این تغییرات، یکی از کارهای زیر را انجام دهید:
- از جدیدترین «ارائهدهنده مخاطبین» استفاده کنید.
- نسخه خود را بهروز کنید (اگر از نسخه انشعابی استفاده میکنید).
علاوهبراین، همه برنامههایی را که به ویژگیهای منسوخشده «ارائهدهنده مخاطبین» متکی هستند بهروزرسانی کنید. نسخههای میانای برنامهسازی کاربردی که بهعنوان راهحلهای موقت برای توابع منسوخشده طراحی شدهاند مجاز نیستند.
برای Android 9 و نسخههای پایینتر، دادههای تعامل مخاطب از «ارائهدهنده مخاطبین» برداشته نشده است. درعوض، دادههای تعامل با مخاطب بهصورت دورهای (تقریباً یک بار در روز) پاک میشود تا معادل آن در Android 10 شبیهسازی شود. «ارائهدهنده مخاطبین» این اطلاعات را ذخیره میکند، اما فقط بهطور موقت.
تغییرات میانای برنامهسازی کاربردی
انتظار میرود این تغییرات تأثیر زیادی بر «میاناهای برنامهسازی کاربردی» داشته باشد. برای مثال، رتبهبندی تکمیل خودکار بهخوبی عمل نخواهد کرد. تأثیرات احتمالی بر رفتار میانای برنامهسازی کاربردی شامل موارد زیر است:
- «ارائهدهنده مخاطبین» اولویتهای کاربر را برای مخاطب یا تعاملات با او در ستونهای جدول
ContactsContract.Contactsذخیره نمیکند. - میانای برنامهسازی کاربردی تکمیل خودکار نتایج را براساس شمارنده تعامل مرتب نخواهد کرد.
- ستونهای
TIMES_CONTACTED/TIMES_USEDوLAST_TIME_CONTACTED/LAST_TIME_USEDبهروزرسانی نخواهند شد. - این موارد با ارتقا به Android 10 پاک میشوند (یا به
nullیا به ۰ تنظیم میشوند، بسته به ستونهای تحتتأثیر). - رتبهبندی در میاناهای برنامهسازی کاربردی پُرسمان تکمیل خودکار نتایج را بهترتیب حروف الفبا برمیگرداند و هرگز براساس اطلاعات قرابت نیست.
- فراخوانیهای API برای مخاطبین مکرر (برای مثال، استفاده از رشته فیلتر
CONTENT_FREQUENT_URI) نتیجهای برنمیگرداند.
بهطورکلی، اگر هریک از عناصر منسوخشده «میانای برنامهسازی کاربردی ارائهدهنده مخاطبین» از شمارندهها استفاده کند،
آن شمارندهها (وقتی در Android 10 استفاده میشوند) حاوی ۰ هستند، و
وقتی از آنها پُرسمان میشود، ۰ برمیگردانند. درخواستهای بهروزرسانی از میاناهای برنامهسازی کاربردی تحتتأثیر قرارگرفته نادیده گرفته میشود. برای
مثال، کلاس ContactsContract.DataUsageFeedback
منسوخ شده است، بنابراین تماسهای بهروزرسانی و حذف به این کلاس نادیده گرفته میشوند.
فیلدهایی که بر میاناهای برنامهسازی کاربردی تأثیر میگذارند
این فیلدها در Android 10 تغییر کردهاند:
ContactsContract.ContactOptionsColumns#TIMES_CONTACTEDContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTEDContactsContract.DataUsageStatColumns#TIMES_USEDContactsContract.DataUsageStatColumns#LAST_TIME_USEDContactsContract#CONTENT_STREQUENT_FILTER_URIContactsContract.Contacts#CONTENT_STREQUENT_URIContactsContract.Contacts#CONTENT_FREQUENT_URIContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URIContactsContract.Contacts#CONTENT_FILTER_URI
فیلدهای تحتتأثیر در Android 10 ممکن است در میاناهای برنامهسازی کاربردی مختلفی وجود داشته باشند، همانطور که در جدول زیر نشان داده شده است. فیلدهای منسوخشده API رفتارها را همانگونه که فهرست شده است برمیگردانند. چون ممکن است یکی از این فیلدهای منسوخشده در چند API شما استفاده شود، موارد استفادهتان را درستیسنجی کنید.
| کلاس | فیلدهای میانای برنامهسازی کاربردی | ۱۰ مرجوعی |
|---|---|---|
ContactsContract.ContactsContactsContract.RawContactsContactsContract.DataContactsContract.Entity
|
ContactOptionsColumnsTIMES_CONTACTEDLAST_TIME_CONTACTED
|
این ستونها همیشه حاوی ۰ هستند، صرفنظر از اینکه چگونه استفاده میشوند. تلاش برای تغییر آنها نادیده گرفته میشود. |
Contacts
|
markAsContacted() |
عملیاتی وجود ندارد. |
ContactsContract.DataUsageFeedback
|
|
عملیاتی وجود ندارد. |
ContactsContract.Contacts
|
«ستارهدار» (ستارهدار + پرتکرار)CONTENT_STREQUENT_FILTER_URICONTENT_STREQUENT_URICONTENT_FREQUENT_URI
|
فقط مخاطبین ستارهدار را برمیگرداند. مخاطب همیشگیای برگردانده نشد. |
ContactsContract.CommonDataKinds.EmailContactsContract.CommonDataKinds.PhoneContactsContract.CommonDataKinds.Callable
|
میاناهای برنامهسازی کاربردی فیلتر (تکمیل خودکار نیز نامیده میشود)
|
نتایج براساس قرابت مرتب نشده است. این موارد براساس ستارهدار و نام مرتب شدهاند. |
موارد جایگزین
هیچ جایگزینی برای فیلدهای API منسوخشده وجود ندارد. راهحلهای موقتی که برای دور زدن این محدودیتها طراحی شدهاند، چه در قالب میاناهای برنامهسازی کاربردی جدید یا فیلدهای جدید، مجاز نیستند.
پیادهسازی
برای پیادهسازی این تغییرات لازم نیست کاری انجام دهید. این ویژگیها بخشی از ابتکار عمل برای افزایش حریم خصوصی کاربر در پلاتفرم سیستمعامل Android است. بااینحال، اگر برنامههایتان به ویژگیهای منسوخشده متکی هستند، بهتر است برنامههایتان را بهروزرسانی کنید تا تغییرات را جبران کنید. علاوهبراین، اگر از نسخه انشعابی «ارائهدهنده مخاطبین» استفاده میکنید، باید «ارائهدهنده مخاطبین» خود را بهروز کنید.
بدون سفارشیسازی
تغییرات اطلاعات قرابت مخاطبین را سفارشیسازی یا دور نزنید. این موارد در چارچوب ساخته شدهاند و هرگونه تغییر در آنها شما را از رعایت استانداردها خارج میکند. هرگز تنظیمات پیشفرض را تغییر ندهید یا جایگزینهای درِ پشتی ارائه نکنید.