Was ist die GAID und wie ruft man sie programmgesteuert ab? Die Google Advertising ID (GAID) ist eine vom Nutzer zurücksetzbare Softwarekennung von Google Play-Diensten zur Leistungsmessung von Marketingaktivitäten. Sie wird programmgesteuert außerhalb des Hauptthreads über die AdvertisingIdClient-API abgerufen, nachdem sichergestellt wurde, dass das zusammengeführte App-Manifest bei Bedarf die AD_ID-Berechtigung enthält.
Die Google Advertising ID (GAID), auch bekannt als Android Advertising ID (AAID), ist eine vom Nutzer zurücksetzbare, eindeutige Zeichenfolge, die von Google Play-Diensten für die Marketing-Attribution, personalisierte Werbeausrichtung und Analysen auf Android-Geräten bereitgestellt wird. Apps, die auf Android 13 (API-Level 33) oder höher abzielen, müssen sicherstellen, dass das zusammengeführte Manifest die Berechtigung
com.google.android.gms.permission.AD_IDenthält, wenn sie auf die Werbe-ID der Google Play-Dienste zugreifen; andernfalls gibt die API einen reinen Null-Wert zurück.
| Begriff | Definition |
|---|---|
| GAID | Google Advertising ID, bereitgestellt von Google Play-Diensten zur Messung von Marketingmaßnahmen. |
| AdvertisingIdClient | Die Google Play-Dienste-API, die zum Abfragen von Metadaten der Werbe-ID verwendet wird. |
| AD_ID-Berechtigung | Die für Apps ab API-Level 33 erforderliche Berechtigung im Android-Manifest beim Zugriff auf die Werbe-ID der Google Play-Dienste. |
| Null-Kennung | Der aus Nullen bestehende Platzhalterwert (00000000-0000-0000-0000-000000000000), der zurückgegeben wird, wenn die Werbe-ID nicht verfügbar ist oder zurückgehalten wird. |
Was ist die GAID und wie funktioniert die Google Advertising ID?
Der technische Aufbau der Werbe-ID
Die Google Advertising ID (GAID) wird von Google Play-Diensten als undurchsichtige Kennungszeichenfolge zurückgegeben, die gewöhnlich als 128-Bit-UUID im Hexadezimalformat mit Kleinbuchstaben formatiert ist (z. B. 38400000-8cf0-11bd-b23e-10b96e4ef00d). Anwendungen sollten die zurückgegebene Zeichenfolge als undurchsichtige Kennung behandeln, anstatt Geschäftslogik aus ihrer Formatierung abzuleiten.
Im Gegensatz zu Kennungen auf Hardwareebene ist die GAID mit expliziten Datenschutzsteuerungen ausgestattet:
- Vom Nutzer zurücksetzbar: Nutzer können jederzeit über die Geräteeinstellungen eine neue, zufällige Kennung generieren.
- Vom Nutzer löschbar: Seit Android 12 können Nutzer ihre Werbe-ID löschen und damit Google Play-Dienste anweisen, Werbekennungen für alle Apps zurückzuhalten.
- Geräteumfang pro Profil: Werbe-IDs sind im Allgemeinen geräteübergreifend für dasselbe Nutzerprofil verfügbar, wobei jedoch verschiedene Android-Nutzer- oder Gastprofile auf demselben physischen Gerät unterschiedliche Werbekennungen erhalten.
Die Rolle von Google Play-Diensten bei der Verwaltung des Kennungsstatus
Die GAID ist nicht Teil des Open-Source-Android-Kernframeworks. Es handelt sich um einen Dienst auf Anwendungsebene, der dynamisch von der proprietären Client-Bibliothek der Google Play-Dienste (com.google.android.gms:play-services-ads-identifier) verwaltet und bereitgestellt wird.
Wenn eine Anwendung Google Play-Dienste aufruft, führt der Client eine blockierende Kommunikation mit den Google Play-Diensten durch, um die aktuelle Werbekennung und die Präferenz des Nutzers bezüglich der Werbeeinschränkung abzurufen.
Warum die GAID Hardware-Kennungen ersetzt hat
In frühen Android-Versionen verfolgten Werbenetzwerke und Entwickler Conversion-Ereignisse mithilfe von nicht zurücksetzbaren Hardware-Kennungen:
- International Mobile Equipment Identity (IMEI): An die Mobilfunkhardware des Geräts gebunden.
- Media Access Control (MAC)-Adresse: An die Netzwerkschnittstellenhardware gebunden.
- ANDROID_ID (SSAID): In modernen Android 8.0+-Versionen ist diese Kennung pro Kombination aus App-Signaturschlüssel, Nutzer und Gerät gültig, anstatt als universeller App-übergreifender Werbeschlüssel zu fungieren.
Für Werbeanwendungsfälle bei Google Play müssen Entwickler die Werbe-ID verwenden, wenn diese verfügbar ist, anstatt eine andere persistente Gerätekennung zu nutzen.
Siehe auch: GAID ──> Architektur der mobilen Attribution
Berechtigungsanforderungen für Android 13: Die Deklaration im AD_ID-Manifest
Das Durchsetzungsmodell für API-Level 33
Mit Android 13 (API-Level 33) hat Google die Berechtigung com.google.android.gms.permission.AD_ID eingeführt:
- Ziel-SDK 33 und höher: Anwendungen, die auf Android 13 oder höher abzielen, müssen die
AD_ID-Berechtigung in ihrem Manifest deklarieren. Wenn die Berechtigung weggelassen wird, geben die Google Play-Dienste eine Zeichenfolge aus Nullen zurück (00000000-0000-0000-0000-000000000000). - Ziel-SDK 32 und niedriger: Die
AD_ID-Berechtigung ist im Manifest nicht erforderlich. Die Werbe-ID kann jedoch aufgrund von Datenschutzeinstellungen des Nutzers für die Werbe-ID (einschließlich Einstellungen zur Werbeeinschränkung oder zum Löschstatus) dennoch unverkennbar oder auf Null gesetzt sein. - Richtlinienerklärungen im Play Store: Beim Einreichen eines Updates, das auf API-Level 33+ abzielt, müssen Entwickler die aktuelle Erklärung zur Werbe-ID in der Google Play Console ausfüllen und angeben, ob und wie die App die Kennung verwendet.

Konfiguration von AndroidManifest.xml und Gradle-Abhängigkeiten
Um die Berechtigung zu deklarieren, fügen Sie das Tag <uses-permission> in die Datei AndroidManifest.xml ein. Fügen Sie in der Datei build.gradle Ihres App-Moduls die offizielle Abhängigkeit play-services-ads-identifier hinzu.
Die folgende Konfiguration veranschaulicht die Syntax der Manifest-Berechtigung und die Einrichtung der Gradle-Abhängigkeit:
```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- Required on API 33+ to access non-zero GAID -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<!-- Application Components -->
</application>
</manifest>
// Location: app/build.gradle
// Note: Example dependency versions shown; verify current stable releases in official repositories before production use.
dependencies {
// Official Google Play services Ads Identifier library
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
// Kotlin Coroutines for off-main-thread asynchronous execution
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}
Manifest-Zusammenführung verstehen: Transitive SDK-Injektion
Beim Erstellen einer Android-APK oder eines Android App Bundle (AAB) führt das Gradle-Build-System Manifeste aus allen importierten Bibliotheken von Drittanbietern in einer einzigen finalen AndroidManifest.xml zusammen.
Wenn ein importiertes Werbenetzwerk-SDK, Analysetool oder Attributions-Framework com.google.android.gms.permission.AD_ID in seinem internen Manifest deklariert, wird diese Berechtigung automatisch in Ihren finalen Build übernommen. Entwickler können app/build/outputs/logs/manifest-merger-release-report.txt überprüfen, um festzustellen, welche Abhängigkeit die Berechtigung eingeführt hat.
Programmatischer Abruf: Abrufen der GAID über AdvertisingIdClient in Kotlin
Die verbindliche Regel zur Ausführung außerhalb des Hauptthreads
Das Aufrufen von AdvertisingIdClient.getAdvertisingIdInfo(context) initiiert einen synchronen Aufruf an Google Play-Dienste. Google untersagt ausdrücklich die Ausführung dieser Methode im Haupt-Thread (UI-Thread).
Das Aufrufen von getAdvertisingIdInfo() im Hauptthread löst sofort eine IllegalStateException aus:
java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock
Um ANR-Fehler (Application Not Responding) und Laufzeitabstürze der Anwendung zu vermeiden, müssen Entwickler den Extraktionsaufruf in einem Hintergrund-Worker oder mithilfe von Kotlin Coroutines über Dispatchers.IO ausführen.

Implementierung von Hintergrund-Worker-Aufgaben mit Kotlin Coroutines
Die folgende Kotlin-Implementierung demonstriert einen threadsicheren AdvertisingIdManager, der die Extraktion außerhalb des Hauptthreads ausführt, Ausnahmen bezüglich der Verfügbarkeit von Google Play-Diensten verarbeitet und die Integrität der Kennung überprüft:
package com.example.myapp.analytics
import android.content.Context
import android.util.Log
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.android.gms.common.GooglePlayServicesNotAvailableException
import com.google.android.gms.common.GooglePlayServicesRepairableException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.IOException
data class GaidResult(
val gaid: String?,
val isLimitAdTrackingEnabled: Boolean,
val isZeroed: Boolean,
val isAvailable: Boolean
)
object AdvertisingIdManager {
private const val TAG = "AdvertisingIdManager"
private const val ZEROED_GAID = "00000000-0000-0000-0000-000000000000"
/**
* Programmatically retrieves the Google Advertising ID off the main execution thread.
* Automatically handles exceptions, zeroed states, and user opt-outs.
*/
suspend fun fetchGaid(context: Context): GaidResult = withContext(Dispatchers.IO) {
try {
// Invokes blocking Google Play services IPC on the IO coroutine dispatcher
val adInfo: AdvertisingIdClient.Info = AdvertisingIdClient.getAdvertisingIdInfo(context)
val rawId = adInfo.id
val isLAT = adInfo.isLimitAdTrackingEnabled
val isZeroed = rawId == null || rawId.equals(ZEROED_GAID, ignoreCase = true)
if (isZeroed) {
Log.w(TAG, "Advertising ID is unavailable or zeroed.")
GaidResult(
gaid = null,
isLimitAdTrackingEnabled = isLAT,
isZeroed = true,
isAvailable = false
)
} else {
Log.d(TAG, "Advertising ID successfully retrieved. LAT enabled: $isLAT")
GaidResult(
gaid = rawId,
isLimitAdTrackingEnabled = isLAT,
isZeroed = false,
isAvailable = true
)
}
} catch (e: GooglePlayServicesNotAvailableException) {
Log.e(TAG, "Google Play services is not installed or unavailable on this device.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: GooglePlayServicesRepairableException) {
Log.w(TAG, "Google Play services requires an update or user recovery.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: IOException) {
Log.e(TAG, "Communication error connecting to Google Play services.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: IllegalStateException) {
Log.e(TAG, "Illegal state while retrieving Advertising ID.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: Exception) {
Log.e(TAG, "Unexpected error retrieving Google Advertising ID.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
}
}
}
Analysieren von AdvertisingIdClient.Info und Umgang mit eingeschränktem Werbe-Tracking
Die Methode AdvertisingIdClient.getAdvertisingIdInfo() gibt ein AdvertisingIdClient.Info-Objekt zurück, das zwei wichtige Eigenschaften enthält:
getId()(String): Die alphanumerische Zeichenfolge, die die Werbekennung darstellt.isLimitAdTrackingEnabled()(Boolean): Wenn das eingeschränkte Werbe-Tracking aktiviert ist, verbietet die Google Play-Richtlinie die Verwendung von Werbe-ID-Daten zur Erstellung von Werbeprofilen oder zur Ausrichtung personalisierter Werbung. Die Richtlinie erlaubt weiterhin Aktivitäten wie kontextbezogene Werbung, Frequenzbegrenzung, Conversion-Tracking, Berichterstellung sowie Sicherheits- und Betrugserkennung; auf aktuellen Google Play-Diensten wird die Werbe-ID selbst jedoch auf Null gesetzt, wenn diese Einstellung aktiviert ist, sodass Anwendungen nicht davon ausgehen sollten, dass eine verwendbare GAID verfügbar bleibt.
Umgang mit auf Null gesetzten Kennungen und vom Nutzer initiierten Löschstatus
Die Zeichenfolge 00000000-0000-0000-0000-000000000000: Wann und warum sie erscheint
In Produktionsumgebungen gibt AdvertisingIdClient.Info.getId() den Wert 00000000-0000-0000-0000-000000000000 zurück, wenn:
- Der Nutzer die Werbe-ID gelöscht hat: Der Nutzer hat in den Geräteeinstellungen navigiert und seine Werbe-ID gelöscht.
- Eingeschränktes Werbe-Tracking aktiviert ist: Der Nutzer hat das eingeschränkte Werbe-Tracking auf unterstützten Betriebssystemversionen aktiviert.
- Die Manifest-Berechtigung fehlt: Die Anwendung zielt auf Android 13+ (API-Level 33+) ab und versäumt es,
com.google.android.gms.permission.AD_IDin ihrem zusammengeführten Manifest zu deklarieren.

Workflow für Nutzereinstellungen: Löschen der Werbe-ID
Nutzer aktueller Android-Versionen können ihre Kennung über folgenden Pfad entfernen:
Einstellungen > Datenschutz > Werbung > Werbe-ID löschen (genaue Bezeichnungen können je nach Gerätehersteller variieren).
Nach dem Löschen löschen die Google Play-Dienste den zugrunde liegenden Wert. Nachfolgende API-Aufrufe über alle installierten Apps hinweg geben die auf Null gesetzte Zeichenfolge zurück.
Anforderungen der Google Play-Richtlinie für Rücksetz- und Löschstatus
Gemäß den Google Play-Entwicklerrichtlinien zur Werbe-ID müssen Entwickler Maßnahmen zum Schutz der Privatsphäre der Nutzer anhand expliziter Regeln handhaben:
- Anforderungen zum Zurücksetzen: Wenn ein Nutzer seine Werbe-ID zurücksetzt, dürfen Entwickler die neue Werbe-ID nicht ohne ausdrückliche Zustimmung des Nutzers mit einer vorherigen Werbe-ID oder daraus abgeleiteten Daten verknüpfen.
- Anforderungen zum Löschen: Wenn ein Nutzer seine Werbe-ID löscht, dürfen Entwickler dieses Gerät nicht mit Daten verknüpfen, die mit seiner vorherigen Werbe-ID verknüpft oder daraus abgeleitet sind.
Bereinigung von Kennungseingaben in nachgeschalteten Datenpipelines
Backend-Attributions-Engines müssen Validierungsfilter implementieren, um zu verhindern, dass auf Null gesetzte Zeichenfolgen Attributionsdatenbanken verschmutzen:
fun isGaidValid(gaid: String?): Boolean {
if (gaid.isNullOrBlank()) return false
val zeroedGaid = "00000000-0000-0000-0000-000000000000"
return !gaid.equals(zeroedGaid, ignoreCase = true)
}
Wird eine auf Null gesetzte Kennung erkannt, dürfen nachgeschaltete Systeme diese nicht als verwendbare GAID oder als Schlüssel zum Abgleich von Kennungen behandeln; jegliche Attributions- oder Analyseverarbeitung sollte sich ausschließlich auf andere unabhängig zulässige Signale stützen.
Google Play-Familienrichtlinie und App-Kategorie-Einschränkungen
Datenpraktiken in Apps für Familien
Google Play erzwingt strenge Datenschutzregeln für Anwendungen, die am Familienprogramm teilnehmen oder sich an Kinder richten:
- Verbot der Übertragung der AAID: Anwendungen, die sich ausschließlich an Kinder richten, dürfen die Werbe-ID (AAID) nicht übertragen. Für Apps, die auf API-Level 33 oder höher abzielen, empfiehlt Google, die
AD_ID-Berechtigung als unkomplizierten Konformitätsmechanismus wegzulassen oder zu deaktivieren. - Umgang mit gemischten Zielgruppen: Anwendungen, die sowohl Kinder als auch ältere Zielgruppen ansprechen, dürfen die AAID von Kindern oder Nutzern unbekannten Alters nicht übertragen. Standardmäßig sollten Apps und SDKs die Übertragung der AAID vermeiden, bis eine Altersverifikation bestätigt, dass es sich bei dem Nutzer nicht um ein Kind handelt.
Verwendung von tools:node=“remove” im Manifest
Wenn sich Ihre Anwendung an Kinder richtet, aber eine importierte Drittanbieter-SDK die AD_ID-Berechtigung automatisch durch die Manifest-Zusammenführung einfügt, fügen Sie das Attribut tools:node="remove" in Ihre Hauptdatei AndroidManifest.xml ein:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.familyapp">
<!-- Explicitly remove AD_ID injected by transitive dependencies -->
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove"/>
</manifest>
Anwendungsspezifische Messalternativen, wenn keine GAID verfügbar ist
Wenn die GAID auf Null gesetzt, gelöscht oder durch Richtlinien eingeschränkt ist, setzen Engineering-Teams anwendungsbezogene Alternativen ein, die auf ihrem funktionalen Ziel basieren:
- Kampagnen-Attribution: Verwenden Sie die Google Play Install Referrer-API, um vom Store vermittelte Kampagnenparameter abzurufen, die über die Play Store-URL übergeben werden (
referrer=...). Funktioniert unabhängig von der GAID-Löschung. - Onboarding und Nutzerabsicht: Verwenden Sie kontextbezogenes Parameter-Routing der Erstanbieterseite, um Weiterleitungs-Token, Promocodes und Deep-Link-Ziele wiederherzustellen, die von Web-Landingpages übergeben wurden.
- Entwicklerseitige Analysen und Betrugserkennung: Verwenden Sie die App Set ID (
AppSetIdClient), um eine gemeinsame Kennung über Apps hinweg zu generieren, die unter demselben Entwicklerkonto veröffentlicht wurden, ohne App-übergreifendes Werbe-Tracking.
GAID Unavailable or Zeroed
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
Paid Campaign Onboarding & Developer-Owned
Attribution Referral Intent Analytics & Fraud
│ │ │
▼ ▼ ▼
Google Play First-Party App Set ID
Install Referrer Contextual (Developer- or
(Store URL) Routing App-Scoped)

Vergleichsmatrix: GAID versus Install Referrer versus App Set ID
| Dimension | Google Advertising ID (GAID) | Google Play Install Referrer | App Set ID (AppSet) |
|---|---|---|---|
| Kennungstyp | Zurücksetzbare, App-übergreifende Werbe-UUID | Vom Store vermittelte Kampagnen-Parameterzeichenfolge | Entwickler- oder App-bezogene Kennung, abhängig von der Installation und dem Kontext der Play-Dienste |
| Manifest-Berechtigung | com.google.android.gms.permission.AD_ID |
Keine | Keine |
| Auswirkung der Nutzerlöschung | Gibt eine Zeichenfolge aus Nullen zurück | Unabhängig von der GAID-Löschung | Kann nach 13 Monaten ohne API-Zugriff, nach der Deinstallation der letzten App im Set oder nach einem Werksreset zurückgesetzt werden |
| Primärer Anwendungsfall | App-übergreifende Werbeattribution und Retargeting | Verfolgung der Leistung von Play Store-Kampagnen | Betrugserkennung und entwicklereigene Analysen |
| Kompatibilität mit Familienrichtlinie | Darf nicht von Kindern übertragen werden | Unterliegt nicht dem AAID-spezifischen Übertragungsverbot; die Nutzung muss dennoch den geltenden Familienrichtlinien entsprechen | Von Google für Analysen in Familien-Apps empfohlen |
Häufig gestellte Fragen (FAQ)
Warum stürzt der Aufruf von AdvertisingIdClient mit einer IllegalStateException ab?
Was passiert, wenn eine App auf Android 13 abzielt und die AD_ID-Berechtigung nicht deklariert?
Wie entferne ich die von Drittanbieter-SDK-Abhängigkeiten injizierte AD_ID-Berechtigung?
Zusammenfassung und Entscheidungsrahmen
Die Google Advertising ID bleibt eine wichtige, zurücksetzbare Kennung für Werbe- und Nutzeranalyse-Anwendungsfälle unter Android, aber der Betrieb unter Android 13+ erfordert die Einhaltung von Manifest-Berechtigungsrichtlinien, Standards für die Hintergrundausführung und den reibungslosen Umgang mit auf Null gesetzten Kennungszuständen. Wenn die GAID nicht verfügbar ist, sollten Engineering-Teams ein Messprimitiv basierend auf dem jeweiligen Anwendungsfall auswählen – zum Beispiel Install Referrer für die Play Store-Kampagnenattribution, kontextbezogene Erstanbieterparameter für den Onboarding-Status oder App Set ID für entwicklereigene Analysen und Betrugspräventionsszenarien.
Um Implementierungsmuster für Android-Attributions- und Deep-Linking-Pipelines zu erkunden, lesen Sie die OpoInstall-Dokumentation.
Verwandte Materialien
-
Konzepte: Werbe-ID-Lebenszyklus, AD_ID-Manifestberechtigung, Extraktion im Hintergrund-Thread, Behandlung von Null-Kennungen
-
Technologien: Google Play-Dienste, AdvertisingIdClient-API, Google Play Install Referrer-API, OpoInstall Android-SDK
-
Standards: Google Play-Entwicklerrichtlinien, Android 13-Verhaltensänderungen, IETF RFC 4122 UUID-Standard
-
APIs & Klassen:
AdvertisingIdClient,AdvertisingIdClient.Info,AppSetIdClient, OpoInstall Context-API
Offizielle Dokumentation
Share this article



