Änderungen an der Werbe-ID: Wie ruft man die Google GAID unter Android 13+ ab?

opoinstall
2026-08-24
5 min read

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_ID enthä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.

Android 13 GAID retrieval and zeroed identifier flow

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.

AdvertisingIdClient GAID retrieval off the main thread

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:

  1. Der Nutzer die Werbe-ID gelöscht hat: Der Nutzer hat in den Geräteeinstellungen navigiert und seine Werbe-ID gelöscht.
  2. Eingeschränktes Werbe-Tracking aktiviert ist: Der Nutzer hat das eingeschränkte Werbe-Tracking auf unterstützten Betriebssystemversionen aktiviert.
  3. Die Manifest-Berechtigung fehlt: Die Anwendung zielt auf Android 13+ (API-Level 33+) ab und versäumt es, com.google.android.gms.permission.AD_ID in ihrem zusammengeführten Manifest zu deklarieren.

GAID zeroed identifier and privacy state handling

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)

GAID alternatives for attribution onboarding and analytics

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?
AdvertisingIdClient.getAdvertisingIdInfo(context) führt eine blockierende Kommunikation mit den Google Play-Diensten aus. Google untersagt ausdrücklich den Aufruf dieser Methode im Hauptausführungsthread. Entwickler müssen sie in einem Hintergrundthread oder mittels Kotlin Coroutines über `Dispatchers.IO` aufrufen.
Was passiert, wenn eine App auf Android 13 abzielt und die AD_ID-Berechtigung nicht deklariert?
Wenn eine App auf API-Level 33 oder höher abzielt und die Berechtigung `com.google.android.gms.permission.AD_ID` nicht in ihrem zusammengeführten Manifest deklariert, gibt die Google Play-Dienste-API automatisch `00000000-0000-0000-0000-000000000000` anstelle der tatsächlichen Werbekennung zurück.
Wie entferne ich die von Drittanbieter-SDK-Abhängigkeiten injizierte AD_ID-Berechtigung?
Wenn eine Drittanbieterbibliothek die Berechtigung `com.google.android.gms.permission.AD_ID` automatisch über die Manifest-Zusammenführung einfügt und Ihre App den Google Play-Familienrichtlinien entsprechen muss, fügen Sie `<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>` zu Ihrer Hauptdatei `AndroidManifest.xml` hinzu.

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