Kontaktanbieter und Affinitätsinformationen

Ab Android 10 wird anders als in Android 9 und niedriger auf kontaktaffinitätsbezogene Daten zugegriffen, die von der Contacts Provider -Komponente verwaltet werden (die Datenquelle, die in der Kontakte-App eines Geräts angezeigt wird).

Vor Android 10 verwendeten Apps den Kontaktanbieter, um auf Daten zuzugreifen und sie zwischen einem Gerät und Onlinediensten zu übertragen. Android 10 bietet Änderungen in Bezug auf den Datenzugriff, um die 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 Daten zu Kontaktaffinitäten. Daher können Apps nicht darauf schreiben oder daraus lesen. Zu den Änderungen gehören die folgenden:

  • Der Kontaktanbieter zeichnet keine kontaktaffinitätsbezogenen Daten auf, wie z. B. wie oft ein Benutzer kontaktiert wurde, die letzte Kontaktzeit, die verwendete App, die kontaktierte Person oder ähnliche historische Daten.
  • Die MultiAutoCompleteTextView -Klasse in der Autocomplete-API des Kontaktanbieters sortiert Abfrageergebnisse nicht nach Interaktionszähler.
  • Das Android-Framework bietet keine implizite Kontaktrangfolge. (Das benutzergesteuerte, explizite Kontaktranking (z. B. markierte Kontakte) bleibt jedoch bestehen).

Führen Sie einen der folgenden Schritte aus, um diese Änderungen zu implementieren:

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

Aktualisieren Sie außerdem alle Apps, die auf die veralteten Funktionen des Kontaktanbieters angewiesen sind . API-Versionen, die als Workarounds für die veralteten Funktionen konzipiert sind, 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, aber nur vorübergehend.

API-Änderungen

Diese Änderungen werden voraussichtlich große Auswirkungen auf APIs haben. Beispielsweise wird das Autocomplete-Ranking nicht so gut funktionieren. Mögliche Auswirkungen auf das API-Verhalten umfassen Folgendes:

  • Der Kontaktanbieter speichert keine Benutzereinstellungen oder Interaktionen mit dem Kontakt in den Tabellenspalten „ ContactsContract.Contacts “.
  • Die Autocomplete-API sortiert Ergebnisse nicht nach Interaktionszähler.
  • Die 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).
    • Das Ranking in den APIs zur automatischen Vervollständigung von Abfragen 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 Kontakte-Provider-API-Elemente Zähler verwendet, enthalten diese Zähler (bei Verwendung in Android 10) im Allgemeinen 0 und geben 0 zurück, wenn sie abgefragt werden. Aktualisierungsanfragen von betroffenen APIs werden ignoriert. Beispielsweise wurde die ContactsContract.DataUsageFeedback -Klasse als veraltet markiert, sodass Aktualisierungs- und Löschaufrufe an diese Klasse ignoriert werden.

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 Verhalten wie aufgeführt 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. Keine häufigen Kontakte zurückgegeben.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
APIs zum Filtern (auch als Autocomplete bezeichnet).

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Ergebnisse nicht nach Affinität sortiert. Diese sind nach Stern und Name sortiert.

Alternativen

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

Implementierung

Sie müssen nichts tun, um diese Änderungen zu implementieren. Sie sind Teil der Initiative zur Verbesserung der Privatsphäre der Benutzer auf der Android OS-Plattform. Wenn Ihre Apps jedoch auf veraltete Funktionen angewiesen sind, möchten Sie Ihre Apps möglicherweise aktualisieren, um etwaige Änderungen auszugleichen. Wenn Sie eine gegabelte Version des Kontaktanbieters verwenden, müssen Sie außerdem 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 wenn Sie Änderungen vornehmen, verlieren Sie die Compliance. Ändern Sie niemals die Standardeinstellungen oder stellen Sie Backdoor-Alternativen bereit.