Dane o dostawcy kontaktów i powiązaniach

Od Androida 10 dane związane z powiązaniem kontaktów, zarządzane przez komponent Provider kontaktów (źródło danych wyświetlanych w aplikacji Kontakty na urządzeniu), są dostępne w inny sposób niż w Androidzie 9 i starszych.

Przed Androidem 10 aplikacje korzystały z usługi Kontakty, aby uzyskiwać dostęp do danych i przenosić je między urządzeniem a usługami internetowymi. Zmiany funkcji Androida 10 dotyczące dostępu do danych, które mają zapewnić większą prywatność użytkowników na wszystkich urządzeniach z Androidem 10 korzystających z usługi dostawcy kontaktów. Po pierwsze, baza danych nie zawiera danych o powiązaniach kontaktów. Aplikacje nie mogą więc zapisywać danych w tym folderze ani ich z niego odczytywać. Zmiany obejmują:

  • Dostawca danych kontaktów nie rejestruje danych związanych z powiązaniem kontaktów, takich jak liczba kontaktów z użytkownikiem, ostatni kontakt, użyta aplikacja, osoba, z którą nawiązano kontakt, ani żadnych powiązanych danych historycznych.
  • Klasa MultiAutoCompleteTextView w interfejsie API autouzupełniania dostawcy kontaktów nie sortuje wyników zapytania według licznika interakcji.
  • Platforma Android nie zapewnia domyślnego rankingu kontaktów. (kontrolowany przez użytkowników, wulgarny ranking kontaktów (np. kontakty oznaczone gwiazdką) pozostaje jednak bez zmian.

Aby wdrożyć te zmiany, wykonaj jedną z tych czynności:

  • Użyj najnowszej wersji dostawcy kontaktów.
  • Zaktualizuj wersję (jeśli używasz wersji odgałęzionej).

Ponadto zaktualizuj wszystkie aplikacje, które korzystają z wycofanych funkcji dostawcy kontaktów. Wersje interfejsu API zaprojektowane jako obejście wycofanych funkcji nie są dozwolone.

W przypadku Androida 9 i starszych dane o interakcjach z kontaktami z usługi Kontakty nie zostały usunięte. Zamiast tego dane o interakcjach z kontaktami są okresowo usuwane (około raz dziennie), aby symulować działanie Androida 10. Dostawca kontaktów przechowuje te informacje tylko tymczasowo.

Zmiany w interfejsie API

Te zmiany mogą mieć duży wpływ na interfejsy API. Na przykład ranking autouzupełniania nie będzie tak skuteczny. Możliwe skutki dla działania interfejsu API:

  • Dostawca kontaktów nie będzie przechowywać w kolumnach tabeli ContactsContract.Contacts preferencji użytkownika ani jego interakcji z kontaktem.
  • Interfejs Autocomplete API nie sortuje wyników według licznika interakcji.
  • Kolumny TIMES_CONTACTED / TIMES_USEDLAST_TIME_CONTACTED / LAST_TIME_USED nie zostaną zaktualizowane.
    • Po przejściu na Androida 10 te wartości zostaną wyczyszczone (ustawione na null lub 0, w zależności od kolumn, których dotyczą).
    • Ranking w interfejsach API zapytań autouzupełniania zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powiązaniach.
    • Wywołania interfejsu API dotyczące kontaktów powtarzających się często (np. przy użyciu ciągu znaków filtra CONTENT_FREQUENT_URI) nie zwracają żadnych wyników.

Ogólnie, jeśli któreś z wycofanych elementów interfejsu API dostawcy kontaktów używają liczników, te liczniki (w wersji Android 10) zawierają wartość 0 i zwracają 0 w przypadku zapytania. Żądania aktualizacji z dotkniętych interfejsów API są ignorowane. Na przykład klasa ContactsContract.DataUsageFeedback została wycofana, więc wywołania metody update i delete dotyczące tej klasy są ignorowane.

Pola, które wpływają na interfejsy API

W Androidzie 10 zmieniły się te pola:

Pola, których dotyczy zmiana w Androidzie 10, mogą występować w różnych interfejsach API, jak wskazano w tabeli poniżej. Wycofane pola interfejsu API zwracają podane zachowania. Jedno z tych przestarzałych pól może być używane w kilku interfejsach API, dlatego sprawdź, czy nie dotyczy to Twoich przypadków użycia.

Kategoria Pola interfejsu API 10 zwrotów
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Te kolumny zawsze zawierają wartość 0, niezależnie od sposobu ich użycia. Próby ich modyfikacji są ignorowane.
Contacts markAsContacted() Brak operacji.
ContactsContract.DataUsageFeedback

update
delete

Brak operacji.
ContactsContract.Contacts Strequent (oznaczone gwiazdką i częste)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Zwraca tylko kontakty oznaczone gwiazdką. Nie znaleziono często kontaktowanych kontaktów.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Interfejsy API do filtrowania (nazywane też interfejsami do autouzupełniania)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Wyniki nie są posortowane według podobieństwa. Są one posortowane według oznaczonych gwiazdką i nazwy.

Alternatywy

Nie ma alternatywy dla wycofanych pól interfejsu API. Obejścia tych ograniczeń, np. w postaci nowych interfejsów API lub nowych pól, są niedozwolone.

Implementacja

Aby wdrożyć te zmiany, nie musisz nic robić. Są one częścią inicjatywy zwiększania prywatności użytkowników na platformie Android. Jeśli jednak Twoje aplikacje korzystają z funkcji wycofanych z użycia, warto je zaktualizować, aby uwzględnić zmiany. Jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz go też zaktualizować.

Brak dostosowywania

Nie dostosowuj ani nie obejdź zmian dotyczących informacji o powiązaniach kontaktów. Są one wbudowane w ramy, a wprowadzenie jakichkolwiek zmian powoduje, że przestajesz spełniać wymagania. Nigdy nie zmieniaj ustawień domyślnych ani nie podawaj alternatywnych.