Informacje o dostawcy kontaktów i powinowactwach

Począwszy od Androida 10, dostęp do danych związanych z powinowactwami kontaktów zarządzanych przez komponent Contacts Provider (źródło danych widocznych w aplikacji kontaktów na urządzeniu) jest uzyskiwany inaczej niż w Androidzie 9 i starszych wersjach.

Przed wersją Androida 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 korzystających z dostawcy kontaktów. Po pierwsze, podstawowa baza danych nie zawiera danych o powinowactwach kontaktów. Dlatego aplikacje nie mogą na nim zapisywać ani czytać. Zmiany obejmują:

  • Dostawca kontaktów nie rejestruje danych związanych z powinowactwami kontaktów, takich jak liczba kontaktów z użytkownikiem, czas ostatniego kontaktu, używana aplikacja, osoba, z którą się kontaktowano, ani żadne powiązane dane historyczne.
  • Klasa MultiAutoCompleteTextView w interfejsie API autouzupełniania dostawcy kontaktów nie sortuje wyników zapytań według licznika interakcji.
  • Struktura systemu Android nie zapewnia ukrytego rankingu kontaktów. (Jednakże kontrolowany przez użytkownika, jawny ranking kontaktów (takich jak kontakty oznaczone gwiazdką ) pozostaje).

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

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

Ponadto zaktualizuj wszystkie aplikacje korzystające z przestarzałych funkcji dostawcy kontaktów . Wersje interfejsu API zaprojektowane jako obejścia przestarzałych funkcji są niedozwolone.

W przypadku Androida 9 i starszych wersji dane dotyczące interakcji z kontaktami od dostawcy kontaktów nie zostały usunięte. Zamiast tego dane dotyczące interakcji kontaktowych są czyszczone okresowo (mniej więcej raz dziennie) w celu symulacji odpowiednika w systemie Android 10. Dostawca kontaktów przechowuje te informacje, ale tylko tymczasowo.

Zmiany w API

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

  • Dostawca kontaktów nie będzie przechowywać preferencji użytkownika ani interakcji z kontaktem w kolumnach tabeli ContactsContract.Contacts .
  • Interfejs API autouzupełniania nie sortuje wyników według licznika interakcji.
  • Kolumny TIMES_CONTACTED / TIMES_USED i LAST_TIME_CONTACTED / LAST_TIME_USED nie zostaną zaktualizowane.
    • Są one usuwane (na wartość null lub ustawianą na 0, w zależności od kolumn, których to dotyczy) po aktualizacji do Androida 10.
    • Ranking w interfejsach API zapytań autouzupełniania zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powinowactwie.
    • Wywołania API dotyczące częstych kontaktów (na przykład przy użyciu ciągu filtrującego CONTENT_FREQUENT_URI ) nie zwracają żadnych wyników.

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

Pola mające wpływ na interfejsy API

Te pola uległy zmianie w Androidzie 10:

Pola, których to dotyczy, w systemie Android 10 mogą występować w różnych interfejsach API, jak pokazano w poniższej tabeli. Przestarzałe pola API zwracają zachowania zgodnie z listą. Ponieważ jedno z tych przestarzałych pól może być używane w kilku interfejsach API, sprawdź swoje przypadki użycia.

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

update
delete

Bez operacji.
ContactsContract.Contacts Silny ( gwiazdkowany + częsty)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Zwraca tylko kontakty oznaczone gwiazdką . Nie zwrócono żadnych częstych kontaktów.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Filtruj (zwane także autouzupełnianiem) interfejsy API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Wyniki nie są posortowane według powinowactwa. Są one posortowane według oznaczenia gwiazdką i nazwy .

Alternatywy

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

Realizacja

Aby wdrożyć te zmiany, nie musisz nic robić. Są częścią inicjatywy mającej na celu zwiększenie prywatności użytkowników na platformie systemu operacyjnego Android. Jeśli jednak Twoje aplikacje korzystają z przestarzałych funkcji, możesz je zaktualizować, aby skompensować wszelkie zmiany. Ponadto, jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz zaktualizować swojego dostawcę kontaktów.

Brak dostosowywania

Nie dostosowuj ani nie obchodź zmian w informacjach o koligacji kontaktów. Są wbudowane w framework i wprowadzenie jakichkolwiek zmian powoduje utratę zgodności. Nigdy nie zmieniaj ustawień domyślnych ani nie udostępniaj alternatyw typu backdoor.