Ab Android 10 wird auf Daten zur Kontaktaffinität, die von der Komponente Contacts Provider (die Datenquelle in der Kontakt-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. Android 10 enthält Änderungen bei der Datenzugänglichkeit, um den Datenschutz auf allen Android 10-Geräten mit dem Kontaktdatenanbieter 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 kein implizites Ranking von Kontakten. Die nutzergesteuerte explizite Kontaktrangfolge (z. B. markierte Kontakte) bleibt jedoch erhalten.
So implementieren Sie diese Änderungen:
- Verwenden Sie den neuesten Anbieter für Kontakte.
- 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 niedrigeren Versionen werden Daten zu Kontaktinteraktionen vom Kontaktdatenanbieter 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. Das Ranking für die automatische Vervollständigung funktioniert beispielsweise nicht mehr so gut. Mögliche Auswirkungen auf das API-Verhalten:
- Der Kontaktdatenanbieter speichert die Einstellungen eines Nutzers für den Kontakt oder seine 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 (entweder auf
null
oder auf 0 gesetzt, je nach den betroffenen Spalten). - Bei der Sortierung in den APIs für Autocomplete-Abfragen werden die Ergebnisse alphabetisch sortiert, niemals nach Affinitätsinformationen.
- API-Aufrufe für häufig kontaktierte Personen (z. B. mit dem Filterstring
CONTENT_FREQUENT_URI
) geben keine Ergebnisse zurück.
Wenn für eines der eingestellten Elemente der Contacts Provider API Zähler verwendet werden, enthalten diese Zähler in Android 10 in der Regel den Wert 0 und geben bei einer Abfrage den Wert 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 angegeben. 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 prüfen.
Klasse | API-Felder | 10 Rücksendungen |
---|---|---|
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äufig verwendeten 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 diese Einschränkungen umgehen sollen, z. B. in Form neuer APIs oder neuer Felder, sind nicht zulässig.
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 Apps jedoch auf eingestellte Funktionen angewiesen sind, sollten Sie sie aktualisieren, um mögliche Änderungen zu kompensieren. 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. Ändern Sie niemals die Standardeinstellungen und stellen Sie keine Backdoor-Alternativen bereit.