Ab Android 10 wird auf Daten zur Kontaktaffinität, die von der Komponente Contacts Provider (die Datenquelle in der Kontakte-App eines Geräts) verwaltet werden, anders zugegriffen als unter Android 9 und niedriger.
Vor Android 10 nutzten Apps den Kontaktdatenanbieter, um auf Daten zuzugreifen und sie zwischen einem Gerät und Onlinediensten zu übertragen. Bei Android 10 wurden Änderungen im Hinblick auf den Datenzugriff vorgenommen, um den Datenschutz für Nutzer auf allen Android 10-Geräten, auf denen der Kontaktanbieter verwendet wird, zu verbessern. Zum einen enthält die zugrunde liegende Datenbank keine Daten zu Kontaktaffinitäten. Apps können daher nicht darauf schreiben oder daraus lesen. Zu den Änderungen gehören:
- Der Anbieter von Kontaktdaten erfasst keine Daten zur Affinität von Kontakten, z. B. wie oft ein Nutzer kontaktiert wurde, wann der letzte Kontakt stattfand, die verwendete App, die kontaktierte Person oder zugehörige Verlaufsdaten.
- Die Klasse
MultiAutoCompleteTextView
in der Autocomplete API des Kontaktdatenanbieters sortiert die Abfrageergebnisse nicht nach dem Interaktionszähler. - Das Android-Framework bietet keine implizite Kontaktrangfolge. Das von Nutzern gesteuerte Ranking der Kontakte (z. B. gekennzeichnete Kontakte) bleibt jedoch erhalten.
Führen Sie einen der folgenden Schritte aus, um diese Änderungen zu implementieren:
- Verwenden Sie die neueste Version von Contacts Provider.
- Aktualisieren Sie Ihre Version, falls Sie eine gegabelte Version verwenden.
Aktualisieren Sie außerdem alle Apps, die auf den veralteten Funktionen des Kontaktdatenanbieters basieren. API-Versionen, die als Umgehung für die eingestellten Funktionen dienen, sind nicht zulässig.
Unter Android 9 und niedriger wurden Daten zu Kontaktinteraktionen vom Contacts Provider nicht entfernt. Stattdessen werden Daten zu Kontaktinteraktionen regelmäßig (etwa einmal täglich) gelöscht, um das Äquivalent in Android 10 zu simulieren. Der Kontaktdatenanbieter speichert diese Informationen, aber nur vorübergehend.
API-Änderungen
Diese Änderungen werden voraussichtlich große Auswirkungen auf APIs haben. So ist beispielsweise das Ranking der automatischen Vervollständigung nicht so effektiv. Mögliche Auswirkungen auf das API-Verhalten:
- Der Kontaktanbieter speichert die Einstellungen eines Nutzers oder Interaktionen mit dem Kontakt nicht in den Tabellenspalten
ContactsContract.Contacts
. - Die Autocomplete API sortiert die Ergebnisse nicht nach dem Interaktionszähler.
- Die Spalten
TIMES_CONTACTED
/TIMES_USED
undLAST_TIME_CONTACTED
/LAST_TIME_USED
werden nicht aktualisiert. - Diese werden beim Upgrade auf Android 10 gelöscht (je nach betroffener Spalte entweder auf
null
oder auf 0 gesetzt). - Das Ranking in den Abfrage-APIs für die automatische Vervollständigung gibt Ergebnisse zurück, die alphabetisch und niemals nach Affinitätsinformationen sortiert sind.
- API-Aufrufe für häufige Kontakte (z. B. mit dem Filterstring
CONTENT_FREQUENT_URI
) geben keine Ergebnisse zurück.
Allgemein gilt: Wenn eines der verworfenen Elemente der Contacts Provider API Zähler verwendet, enthalten diese (bei Verwendung in Android 10) 0 und geben bei der Abfrage 0 zurück. Aktualisierungsanfragen von betroffenen APIs werden ignoriert. Die Klasse ContactsContract.DataUsageFeedback
wurde beispielsweise eingestellt. Aufrufe zum Aktualisieren und Löschen dieser Klasse werden daher ignoriert.
Felder, die sich auf APIs auswirken
Diese Felder wurden in Android 10 geändert:
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
ContactsContract.DataUsageStatColumns#TIMES_USED
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
ContactsContract#CONTENT_STREQUENT_FILTER_URI
ContactsContract.Contacts#CONTENT_STREQUENT_URI
ContactsContract.Contacts#CONTENT_FREQUENT_URI
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
ContactsContract.Contacts#CONTENT_FILTER_URI
Die betroffenen Felder in Android 10 können in verschiedenen APIs vorhanden sein, wie in der folgenden Tabelle dargestellt. Für verworfene API-Felder wird das in der Liste angegebene Verhalten zurückgegeben. Da eines dieser veralteten Felder in mehreren Ihrer APIs verwendet werden kann, sollten Sie Ihre Anwendungsfälle überprüfen.
Klasse | API-Felder | 10 Retouren |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Diese Spalten enthalten immer den Wert „0“, unabhängig von ihrer Verwendung. Versuche, sie zu ändern, werden ignoriert. |
Contacts
|
markAsContacted() |
Kein Vorgang. |
ContactsContract.DataUsageFeedback
|
|
Kein Vorgang. |
ContactsContract.Contacts
|
Häufig (markiert + häufig)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Es werden nur markierte Kontakte zurückgegeben. Es wurden keine häufigen Kontakte zurückgegeben. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
Filter-APIs (auch Autocomplete-APIs genannt)
|
Ergebnisse werden nicht nach Affinität sortiert. Sie werden nach markiert und Name sortiert. |
Alternativen
Es gibt keine Alternativen zu den eingestellten API-Feldern. Umgehungen, die darauf abzielen, diese Einschränkungen zu umgehen, sind nicht zulässig, unabhängig davon, ob sie in Form neuer APIs oder neuer Felder erfolgen.
Implementierung
Sie müssen nichts unternehmen, um diese Änderungen zu implementieren. Sie sind Teil der Initiative zur Verbesserung des Datenschutzes für Nutzer auf der Android-Betriebssystemplattform. Wenn Ihre Anwendungen jedoch nicht mehr unterstützte Funktionen benötigen, sollten Sie sie aktualisieren, um Änderungen auszugleichen. Wenn Sie eine abgezweigte Version des Kontaktdatenanbieters verwenden, müssen Sie ihn ebenfalls aktualisieren.
Keine Anpassung
Passen Sie die Änderungen an den Informationen zur Kundenaffinität nicht an und umgehen Sie sie nicht. Sie sind in das Framework eingebunden und Änderungen führen zu Verstößen gegen die Compliance. Ändere niemals die Standardeinstellungen und biete Alternativen für die Backdoor an.