Informacje o dostawcy kontaktów i powiązaniach

Począwszy od Androida 10, dostęp do danych związanych z koligacjami kontaktów, zarządzanych przez komponent Contacts Provider (źródło danych widocznych w aplikacji kontaktów urządzenia) jest inny niż w Androidzie 9 i niższych.

W wersjach wcześniejszych niż Android 10 aplikacje korzystały z dostawcy kontaktów w celu uzyskiwania dostępu do danych i przesyłania ich między urządzeniem a usługami online. W systemie Android 10 wprowadzono zmiany dotyczące dostępności danych, aby zapewnić większą prywatność użytkowników na wszystkich urządzeniach z systemem Android 10, które korzystają z dostawcy kontaktów. Po pierwsze, podstawowa baza danych nie zawiera danych powiązań kontaktów. Dlatego aplikacje nie mogą z niego pisać ani czytać. Zmiany obejmują:

  • Dostawca kontaktów nie rejestruje danych związanych z powinowactwem kontaktów, takich jak liczba kontaktów z użytkownikiem, ostatni kontakt, używana aplikacja, osoba, z którą się kontaktowano, ani żadne powiązane dane historyczne.
  • Klasa MultiAutoCompleteTextView w interfejsie API autouzupełniania Contacts Provider nie sortuje wyników zapytania według licznika interakcji.
  • Platforma Android nie zapewnia niejawnego rankingu kontaktów. (Jednak pozostaje kontrolowany przez użytkownika, jawny ranking kontaktów (takich jak kontakty oznaczone gwiazdką )).

Aby wprowadzić te zmiany, wykonaj jedną z następujących czynności:

  • Skorzystaj z najnowszego dostawcy kontaktów.
  • Zaktualizuj swoją wersję (jeśli używasz wersji rozwidlonej).

Ponadto zaktualizuj wszystkie aplikacje, które korzystają z przestarzałych funkcji dostawcy kontaktów . Wersje interfejsu API przeznaczone do obejścia przestarzałych funkcji nie są dozwolone.

W przypadku systemu Android 9 i starszych dane dotyczące interakcji z kontaktami od dostawcy kontaktów nie zostały usunięte. Zamiast tego dane dotyczące interakcji z kontaktami są okresowo usuwane (mniej więcej raz dziennie), aby zasymulować odpowiednik w systemie Android 10. Dostawca kontaktów przechowuje te informacje, ale tylko tymczasowo.

Zmiany API

Oczekuje się, że te zmiany będą miały duży wpływ na interfejsy API. Na przykład ranking autouzupełniania nie będzie równie skuteczny. Potencjalny wpływ na zachowanie interfejsu API obejmuje:

  • Dostawca kontaktów nie przechowuje preferencji użytkownika ani interakcji z kontaktem w kolumnach tabeli ContactsContract.Contacts .
  • Interfejs API autouzupełniania nie sortuje wyników według licznika interakcji.
  • TIMES_CONTACTED / TIMES_USED i LAST_TIME_CONTACTED / LAST_TIME_USED nie zostaną zaktualizowane.
    • Są one jasne (na null lub ustawione na 0, w zależności od kolumn, których dotyczy problem) po uaktualnieniu do systemu Android 10.
    • Ranking w interfejsach API autouzupełniania zapytań zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powinowactwie.
    • Wywołania interfejsu API dla częstych kontaktów (na przykład przy użyciu ciągu filtru CONTENT_FREQUENT_URI ) nie zwracają żadnych wyników.

Ogólnie rzecz biorąc, jeśli którykolwiek z przestarzałych elementów interfejsu Contacts Provider API używa liczników, te liczniki (jeśli są używane w systemie Android 10) zawierają 0 i zwracają 0 w przypadku zapytania. Żądania aktualizacji z interfejsów API, których dotyczy problem, są ignorowane. Na przykład klasa ContactsContract.DataUsageFeedback jest przestarzała, więc wywołania aktualizacji i usuwania do tej klasy są ignorowane.

Pola wpływające na interfejsy API

Te pola zmieniły się w Androidzie 10:

Odpowiednie pola w systemie Android 10 mogą występować w różnych interfejsach API, jak wskazano w poniższej tabeli. Przestarzałe pola interfejsu API zwracają wymienione zachowania. Ponieważ jedno z tych przestarzałych pól może być używane w kilku Twoich interfejsach API, sprawdź przypadki użycia.

Klasa Pola API 10 zwrotów
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Te kolumny zawsze zawierają 0, niezależnie od tego, jak są używane. Próby ich modyfikacji są ignorowane.
Contacts markAsContacted() Bez operacji.
ContactsContract.DataUsageFeedback

update
delete

Bez operacji.
ContactsContract.Contacts Częste (oznaczone gwiazdką + częste)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Zwraca tylko kontakty oznaczone gwiazdką . Nie zwrócono częstych kontaktów.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Filtruj (zwane również autouzupełnianiem) API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Wyniki nie są sortowane według podobieństwa. Są one posortowane według gwiazdek i nazw .

Alternatywy

Nie ma alternatyw dla przestarzałych pól interfejsu API. Obejścia mające na celu obejście tych ograniczeń, zarówno w postaci nowych interfejsów API, jak i nowych pól, są niedozwolone.

Realizacja

Nie musisz nic robić, aby wprowadzić te zmiany. Są częścią inicjatywy mającej na celu zwiększenie prywatności użytkowników na platformie Android OS. Jeśli jednak Twoje aplikacje opierają się na przestarzałych funkcjach, możesz chcieć zaktualizować swoje aplikacje, aby zrekompensować wszelkie zmiany. Ponadto, jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz zaktualizować swojego dostawcę kontaktów.

Brak dostosowywania

Nie dostosowuj ani nie omijaj zmian informacji o powinowactwie kontaktów. Są one wbudowane w platformę, a wprowadzanie jakichkolwiek zmian powoduje utratę zgodności. Nigdy nie zmieniaj ustawień domyślnych ani nie udostępniaj alternatywnych tylnych drzwi.