Kontaktanbieter und Informationen zu Affinitäten

Ab Android 10 erfolgt der Zugriff auf kontaktaffinitätsbezogene Daten, die von der Kontaktanbieterkomponente (der in der Kontakt-App eines Geräts angezeigten Datenquelle) verwaltet werden, anders als in Android 9 und niedriger.

Vor Android 10 nutzten Apps den Kontaktanbieter, um auf Daten zuzugreifen und diese zwischen einem Gerät und Onlinediensten zu übertragen. Android 10 bietet Änderungen hinsichtlich der Datenzugänglichkeit, um eine erhöhte Privatsphäre der Benutzer auf allen Android 10-Geräten zu gewährleisten, die den Kontaktanbieter verwenden. Zum einen enthält die zugrunde liegende Datenbank keine Kontaktaffinitätsdaten. Daher können Apps nicht darauf schreiben oder davon lesen. Zu den Änderungen gehören:

  • Der Kontaktanbieter zeichnet keine Daten zur Kontaktaffinität auf, z. B. wie oft ein Benutzer kontaktiert wurde, wann der letzte Kontakt stattfand, welche App verwendet wurde, welche Person kontaktiert wurde oder zugehörige historische Daten.
  • Die MultiAutoCompleteTextView Klasse in der Contacts Provider-API zur automatischen Vervollständigung sortiert Abfrageergebnisse nicht nach Interaktionszähler.
  • Das Android-Framework bietet kein implizites Kontaktranking. (Das benutzergesteuerte, explizite Kontaktranking (z. B. markierte Kontakte) bleibt jedoch bestehen.)

Um diese Änderungen zu implementieren, führen Sie einen der folgenden Schritte aus:

  • Verwenden Sie den neuesten Kontaktanbieter.
  • Aktualisieren Sie Ihre Version (wenn Sie eine gespaltene Version verwenden).

Aktualisieren Sie außerdem alle Apps, die auf den veralteten Funktionen des Kontaktanbieters basieren. API-Versionen, die als Workarounds für die veralteten Funktionen dienen , sind nicht zulässig.

Für Android 9 und niedriger wurden Kontaktinteraktionsdaten vom Kontaktanbieter nicht entfernt. Stattdessen werden Kontaktinteraktionsdaten regelmäßig (ungefähr einmal pro Tag) gelöscht, um das Äquivalent in Android 10 zu simulieren. Der Kontaktanbieter speichert diese Informationen, jedoch nur vorübergehend.

API-Änderungen

Es wird erwartet, dass diese Änderungen große Auswirkungen auf APIs haben werden. Beispielsweise wird die automatische Vervollständigung des Rankings nicht so gut funktionieren. Mögliche Auswirkungen auf das API-Verhalten sind unter anderem:

  • Der Kontaktanbieter speichert die Präferenzen oder Interaktionen eines Benutzers für den Kontakt nicht in den Tabellenspalten ContactsContract.Contacts .
  • Die Autocomplete-API sortiert die Ergebnisse nicht nach Interaktionszähler.
  • Die Spalten TIMES_CONTACTED / TIMES_USED und LAST_TIME_CONTACTED / LAST_TIME_USED werden nicht aktualisiert.
    • Diese werden beim Upgrade auf Android 10 gelöscht (entweder auf null oder auf 0 gesetzt, abhängig von den betroffenen Spalten).
    • Die Rangfolge in den Autocomplete-Abfrage-APIs gibt Ergebnisse alphabetisch sortiert zurück, niemals nach Affinitätsinformationen.
    • API-Aufrufe für häufige Kontakte (z. B. mit der Filterzeichenfolge CONTENT_FREQUENT_URI ) geben keine Ergebnisse zurück.

Wenn eines der veralteten Contacts Provider API-Elemente Zähler verwendet, enthalten diese Zähler (bei Verwendung in Android 10) im Allgemeinen 0 und geben bei Abfrage 0 zurück. Aktualisierungsanfragen von betroffenen APIs werden ignoriert. Beispielsweise war die Klasse ContactsContract.DataUsageFeedback veraltet, daher werden Aktualisierungs- und Löschaufrufe dieser Klasse ignoriert.

Felder, die sich auf APIs auswirken

Diese Felder haben sich in Android 10 geändert:

Die betroffenen Felder in Android 10 können in verschiedenen APIs vorhanden sein, wie in der folgenden Tabelle angegeben. Veraltete API-Felder geben das aufgeführte Verhalten zurück. Da eines dieser veralteten Felder möglicherweise in mehreren Ihrer APIs verwendet wird, überprüfen Sie Ihre Anwendungsfälle.

Klasse API-Felder 10 Retouren
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Diese Spalten enthalten immer 0, unabhängig davon, wie sie verwendet werden. Versuche, sie zu ändern, werden ignoriert.
Contacts markAsContacted() Keine Operation.
ContactsContract.DataUsageFeedback

update
delete

Keine Operation.
ContactsContract.Contacts Strequent ( markiert + häufig)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Gibt nur markierte Kontakte zurück. Es wurden keine häufigen Kontakte zurückgegeben.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Filter-APIs (auch Autovervollständigung genannt).

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Ergebnisse nicht nach Affinität sortiert. Diese sind nach Sternchen und Namen sortiert.

Alternativen

Es gibt keine Alternativen zu den veralteten API-Feldern. Problemumgehungen zur Umgehung dieser Einschränkungen, sei es in Form neuer APIs oder neuer Felder, sind nicht zulässig.

Implementierung

Sie müssen nichts tun, um diese Änderungen umzusetzen. Sie sind Teil der Initiative zur Verbesserung der Privatsphäre der Benutzer auf der Android-Betriebssystemplattform. Wenn Ihre Apps jedoch auf veraltete Funktionen angewiesen sind, möchten Sie möglicherweise Ihre Apps aktualisieren, um etwaige Änderungen auszugleichen. Wenn Sie außerdem eine abgespaltene Version des Kontaktanbieters verwenden, müssen Sie Ihren Kontaktanbieter aktualisieren.

Keine Anpassung

Passen Sie die Änderungen der Affinitätsinformationen der Kontakte nicht an oder umgehen Sie sie nicht. Sie sind in das Framework integriert und jede Änderung führt dazu, dass Sie nicht mehr konform sind. Ändern Sie niemals die Standardeinstellungen und bieten Sie keine Backdoor-Alternativen an.