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. Dlatego aplikacje nie mogą zapisywać ani odczytywać danych z tego pliku. 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 automatycznego uzupełniania danych o kontaktach nie sortuje wyników zapytań według licznika interakcji.
  • Platforma Android nie udostępnia domyślnego rankingu kontaktów. (nadal jednak można sterować wyraźnie określonym przez użytkownika rankingiem kontaktów, np. oznaczonych gwiazdką).

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

  • Użyj najnowszego 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 interakcji 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 często kontaktowanych osób (np. przy użyciu ciągu filtra CONTENT_FREQUENT_URI) nie dają ż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ą wartości zgodnie z poniższą listą. Ponieważ jedno z tych przestarzałych pól może być używane w kilku interfejsach API, sprawdź, czy nie jest to konieczne w Twoim przypadku.

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 autocomplete)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

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

Alternatywy

Nie ma alternatyw dla przestarzałych 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 mającej na celu zwiększenie prywatności użytkowników na platformie Android. Jeśli jednak Twoje aplikacje korzystają z funkcji wycofanych, warto je zaktualizować, aby uwzględnić zmiany. Jeśli używasz odgałęzi wersji dostawcy kontaktów, musisz zaktualizować dostawcę kontaktów.

Brak dostosowywania

Nie dostosowuj ani nie obejdź zmian w informacjach 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 udostępniaj alternatywnych sposobów dostępu.