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

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

فیلدهای آسیب دیده در 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

update
delete

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

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

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

جایگزین، گزینه ها

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

پیاده سازی

برای اجرای این تغییرات نیازی به انجام هیچ کاری نیست. آنها بخشی از ابتکار عمل برای افزایش حریم خصوصی کاربر در پلتفرم سیستم عامل اندروید هستند. با این حال، اگر برنامه‌های شما به ویژگی‌های منسوخ شده متکی هستند، ممکن است بخواهید برنامه‌های خود را برای جبران هرگونه تغییر به‌روزرسانی کنید. بعلاوه، اگر از نسخه فورک شده Contacts Provider استفاده می کنید، باید Contacts Provider خود را به روز کنید.

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

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