ارائه‌دهنده مخاطبین و اطلاعات وابستگی‌ها

از 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 تغییر کرده‌اند:

فیلدهای تحت‌تأثیر در Android 10 ممکن است در میاناهای برنامه‌سازی کاربردی مختلفی وجود داشته باشند، همان‌طور که در جدول زیر نشان داده شده است. فیلدهای منسوخ‌شده API رفتارها را همان‌گونه که فهرست شده است برمی‌گردانند. چون ممکن است یکی از این فیلدهای منسوخ‌شده در چند API شما استفاده شود، موارد استفاده‌تان را درستی‌سنجی کنید.

کلاس فیلدهای میانای برنامه‌سازی کاربردی ‫۱۰ مرجوعی
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
این ستون‌ها همیشه حاوی ۰ هستند، صرف‌نظر از اینکه چگونه استفاده می‌شوند. تلاش برای تغییر آن‌ها نادیده گرفته می‌شود.
Contacts markAsContacted() عملیاتی وجود ندارد.
ContactsContract.DataUsageFeedback

update
delete

عملیاتی وجود ندارد.
ContactsContract.Contacts «ستاره‌دار» (ستاره‌دار + پرتکرار)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
فقط مخاطبین ستاره‌دار را برمی‌گرداند. مخاطب همیشگی‌ای برگردانده نشد.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
میاناهای برنامه‌سازی کاربردی فیلتر (تکمیل خودکار نیز نامیده می‌شود)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

نتایج براساس قرابت مرتب نشده است. این موارد براساس ستاره‌دار و نام مرتب شده‌اند.

موارد جایگزین

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

پیاده‌سازی

برای پیاده‌سازی این تغییرات لازم نیست کاری انجام دهید. این ویژگی‌ها بخشی از ابتکار عمل برای افزایش حریم خصوصی کاربر در پلاتفرم سیستم‌عامل Android است. بااین‌حال، اگر برنامه‌هایتان به ویژگی‌های منسوخ‌شده متکی هستند، بهتر است برنامه‌هایتان را به‌روزرسانی کنید تا تغییرات را جبران کنید. علاوه‌براین، اگر از نسخه انشعابی «ارائه‌دهنده مخاطبین» استفاده می‌کنید، باید «ارائه‌دهنده مخاطبین» خود را به‌روز کنید.

بدون سفارشی‌سازی

تغییرات اطلاعات قرابت مخاطبین را سفارشی‌سازی یا دور نزنید. این موارد در چارچوب ساخته شده‌اند و هرگونه تغییر در آن‌ها شما را از رعایت استانداردها خارج می‌کند. هرگز تنظیمات پیش‌فرض را تغییر ندهید یا جایگزین‌های درِ پشتی ارائه نکنید.