Guía de recuperación de datos de dispositivos de servidor a servidor

Documento

Guía de recuperación de datos de dispositivos

Guía completa para recuperar los identificadores de dispositivos específicos de la plataforma y los parámetros necesarios para la atribución precisa de la API S2S y la medición de campañas.

Identificadores de dispositivo requeridos: Singular requiere identificadores de dispositivo específicos en todas las solicitudes de API para una atribución precisa.

Plataformas móviles:

  • Android (Google Play): Google Advertising ID (GAID/AIFA) y App Set ID (ASID)
  • Android (Amazon): Amazon Advertising ID (AMID) para dispositivos Fire
  • Android (OEM chinos): Open Advertising ID (OAID) para dispositivos sin Google Play Services
  • Android (Fallback): Android ID (ANDI) sólo cuando no hay otros identificadores disponibles
  • iOS: Identificador para vendedores (IDFV) e Identificador para anunciantes (IDFA) cuando estén disponibles

Parámetros del dispositivo: Localidad, marca del dispositivo, modelo del dispositivo y versión de compilación necesarios para las plataformas móviles

Los siguientes ejemplos de código muestran métodos de recuperación para cada plataforma y tipo de identificador.


Ejemplos de aplicaciones

Implementaciones de referencia

Ejemplos de trabajo completos para iOS y Android que demuestran patrones de recuperación de datos de dispositivos.


Identificadores de dispositivos iOS

Los dispositivos iOS requieren IDFV (siempre) e IDFA (cuando el usuario concede permiso de seguimiento) más el estado de autorización ATT para una atribución precisa.

Identificadores de iOS requeridos

Requisitosdel identificador:

  • IDFV: Se requiere en todas las solicitudes S2S independientemente del permiso de seguimiento.
  • IDFA: debe proporcionarse si el usuario concede el consentimiento de App Tracking Transparency
  • Estado ATT: Código de estado de autorización requerido en todas las solicitudes (0-3)

Guía de implementación

Cómo recuperar datos de dispositivos iOS
#

Identificador para anunciantes (IDFA)

El Identificador para Anunciantes (IDFA) permite a los anunciantes rastrear y atribuir las acciones de los usuarios (clics en anuncios, instalaciones de aplicaciones) a campañas específicas para una orientación y optimización precisas.

A partir de iOS 14.5, los usuarios deben dar su consentimiento a través del marco App Tracking Transparency (ATT) antes de que las apps accedan al IDFA. Sin el consentimiento del usuario, IDFA devuelve todos los ceros, limitando las capacidades de seguimiento.


Identificador para proveedores (IDFV)

El identificador para proveedores (IDFV) es un identificador único asignado por Apple al dispositivo, específico del proveedor/desarrollador. Permanece consistente en todas las aplicaciones del mismo proveedor en el dispositivo, permitiendo el seguimiento del comportamiento entre aplicaciones sin identificación personal.

Medidas de aplicación:

  • Asegúrese de que se muestra y gestiona el aviso ATT antes de intentar acceder al IDFA.
  • Capturar el IDFA (si está autorizado) y pasarlo al servidor para solicitudes API.
  • Capturar IDFV y pasarlo al servidor para solicitudes API (siempre obligatorio)
  • Incluir el estado de autorización ATT en todas las solicitudes

Ejemplos de código

Solicitud de autorización ATT y recuperación de IDFA/IDFV

OBJECTIVE-CSWIFT
#import <AdSupport/AdSupport.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <UIKit/UIKit.h>

- (void)retrieveIdentifiers {
    // Request ATT authorization (iOS 14.5+)
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        dispatch_async(dispatch_get_main_queue(), ^{
            switch (status) {
                case ATTrackingManagerAuthorizationStatusAuthorized: {
                    // ATT authorized, retrieve IDFA
                    NSUUID *idfa = [[ASIdentifierManager sharedManager] advertisingIdentifier];
                    NSLog(@"IDFA: %@", [idfa UUIDString]);
                    NSLog(@"ATT Status: %ld", (long)status); // Status = 3
                    break;
                }
                case ATTrackingManagerAuthorizationStatusDenied:
                    NSLog(@"ATT Status: Denied (%ld)", (long)status); // Status = 2
                    break;
                case ATTrackingManagerAuthorizationStatusRestricted:
                    NSLog(@"ATT Status: Restricted (%ld)", (long)status); // Status = 1
                    break;
                case ATTrackingManagerAuthorizationStatusNotDetermined:
                    NSLog(@"ATT Status: Not Determined (%ld)", (long)status); // Status = 0
                    break;
                default:
                    NSLog(@"Unknown ATT status.");
                    break;
            }

            // Retrieve IDFV (always available)
            NSUUID *idfv = [[UIDevice currentDevice] identifierForVendor];
            if (idfv != nil) {
                NSLog(@"IDFV: %@", [idfv UUIDString]);
            } else {
                NSLog(@"Unable to retrieve IDFV.");
            }
        });
    }];
}

// Call the method to retrieve identifiers
[self retrieveIdentifiers];

Disponibilidad del identificador:

  • IDFA: Requiere autorización ATT desde iOS 14.5+. Sin autorización, devuelve todos ceros
  • IDFV: Siempre disponible-incluir en todas las solicitudes de API Singular
  • Valores de estado ATT: 0=Indeterminado, 1=Restringido, 2=Rechazado, 3=Autorizado

Identificadores de dispositivos Android (Google Play)

Los dispositivos Android con Google Play Services requieren App Set ID (ASID) en todas las solicitudes, con Google Advertising ID (GAID/AIFA) cuando esté disponible.

Identificadores de Google Play requeridos

Requisitos delos identificadores:

  • ASID: requerido en todas las solicitudes S2S para dispositivos Google Play
  • AIFA/GAID: Deben proporcionarse cuando estén disponibles (sin exclusión)

Guía de implementación

Cómo recuperar datos de dispositivos Android (Google Play)
#

Identificador de publicidad de Google (GAID)

El identificador de publicidad de Google (GAID), también conocido como AIFA o ID de publicidad de Android (AAID), es un identificador único que el usuario puede restablecer y que se asigna a los dispositivos Android. Permite a los anunciantes y a los desarrolladores rastrear y atribuir las acciones de los usuarios en las aplicaciones para la orientación y la optimización de las campañas, al tiempo que se mantiene la privacidad.

JAVAKOTLIN

Dependencias

Añada la dependencia necesaria en su sitio build.gradle:

dependencies {
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
}

Permisos

Si se dirige a Android 12/API nivel 31+, añada el permiso en AndroidManifest.xml:

<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

Uso

AdIdUtils.getGoogleAdId(getApplicationContext());

Implementación

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.ads.identifier.AdvertisingIdClient.Info;

public class AdIdUtils {

    public static void getGoogleAdId(Context context) {
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
                    
                    String adId = adInfo.getId();
                    boolean isLimitAdTrackingEnabled = adInfo.isLimitAdTrackingEnabled();
                    
                    Log.d("GoogleAdID", "Advertising ID: " + adId);
                    Log.d("GoogleAdID", "Limit Ad Tracking: " + isLimitAdTrackingEnabled);
                } catch (Exception e) {
                    Log.e("GoogleAdID", "Error retrieving GAID", e);
                }
            }
        });
    }
}

App Set ID (ASID)

Android App Set ID proporciona un seguimiento de aplicaciones cruzadas que respeta la privacidad para el mismo desarrollador. Resulta útil para el análisis y la prevención del fraude, pero no puede utilizarse para publicidad personalizada.

JAVAKOTLIN

Dependencias

dependencies {
    implementation 'com.google.android.gms:play-services-appset:16.1.0'
}

Uso

AppSetIdUtils.getAppSetId(getApplicationContext());

Implementación

import android.content.Context;
import android.util.Log;
import com.google.android.gms.appset.AppSet;
import com.google.android.gms.appset.AppSetIdClient;
import com.google.android.gms.appset.AppSetIdInfo;
import com.google.android.gms.tasks.Task;

public class AppSetIdUtils {

    public static void getAppSetId(Context context) {
        AppSetIdClient client = AppSet.getClient(context);
        Task task = client.getAppSetIdInfo();

        task.addOnSuccessListener(info - {
            String appSetId = info.getId();
            int scope = info.getScope();

            Log.d("AppSetID", "App Set ID: " + appSetId);
            Log.d("AppSetID", "Scope: " + (scope == AppSetIdInfo.SCOPE_DEVELOPER ? "Developer" : "App"));
        }).addOnFailureListener(e - {
            Log.e("AppSetID", "Failed to retrieve App Set ID", e);
        });
    }
}

Identificadores de dispositivos Android (sin Google Play)

Los dispositivos Android sin Google Play Services requieren identificadores alternativos basados en el fabricante del dispositivo y el método de distribución.

Identificador de dispositivo Amazon

AMID: El identificador de publicidad de Amazon debe proporcionarse para los dispositivos Amazon Fire sin servicios de Google Play.

Cómo recuperar el identificador de publicidad de Amazon (AMID)
#

Identificador de Amazon (AMID)

El Identificador de Publicidad de Amazonpermite el seguimiento de publicidad reseteable por el usuario en dispositivos Amazon Fire sin Google Play Services, manteniendo la privacidad del usuario a la vez que permite la atribución.

Requisitos:

  • Funciona en dispositivos Amazon Fire con Fire OS 5.1+.
  • Respeta la preferencia del usuario de limitar el seguimiento de anuncios.
  • Puede no estar disponible en dispositivos que no sean Fire OS
JAVAKOTLIN

Uso

AdvertisingIdHelper.getAmazonAdvertisingId(getContentResolver());

Implementación

import android.content.ContentResolver;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;

public class AdvertisingIdHelper {

    public static void getAmazonAdvertisingId(ContentResolver contentResolver) {
        String advertisingID = "";
        boolean limitAdTracking = false;

        try {
            limitAdTracking = Settings.Secure.getInt(contentResolver, "limit_ad_tracking") != 0;
            advertisingID = Settings.Secure.getString(contentResolver, "advertising_id");

            Log.d("AdvertisingID", "Amazon Advertising ID: " + advertisingID);
            Log.d("LimitAdTracking", "Limit Ad Tracking: " + limitAdTracking);

        } catch (SettingNotFoundException e) {
            Log.e("AdvertisingID", "Advertising ID not supported on this device", e);
        }
    }
}

Identificador OEM chino

OAID: El identificador de publicidad abierto debe proporcionarse para los dispositivos fabricados en China sin Google Play Services.

Cómo recuperar el identificador de publicidad abierta (OAID)
#

Identificador de publicidad abierta (OAID)

Open Advertising Identifier (OAID) es un identificador único y anónimo para publicidad en dispositivos Android fabricados en China. Introducido por Mobile Security Alliance (MSA) como alternativa a GAID para dispositivos en los que Google Play Services no está disponible.

Dispositivos compatibles: Huawei, Xiaomi, OPPO, Vivo y otros dispositivos Android fabricados en China.

Acceso a través de MSA SDKo Huawei Mobile Services (HMS).

JAVAKOTLIN

Dependencias

dependencies {
    implementation 'com.bun.msa.sdk:msa:1.0.26'
}

Implementación

import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.bun.msa.sdk.DeviceId;
import com.bun.msa.sdk.DeviceIdSupplier;
import com.bun.msa.sdk.IIdentifierListener;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "OAIDExample";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getOAID();
    }

    private void getOAID() {
        try {
            DeviceId deviceId = new DeviceId(this);
            deviceId.getDeviceIds(new IIdentifierListener() {
                @Override
                public void onSupport(boolean isSupport, DeviceIdSupplier supplier) {
                    if (isSupport && supplier != null) {
                        String oaid = supplier.getOAID();
                        Log.d(TAG, "OAID: " + oaid);
                    } else {
                        Log.e(TAG, "OAID not supported on this device");
                    }
                }
            });
        } catch (Exception e) {
            Log.e(TAG, "Error retrieving OAID", e);
        }
    }
}

Android ID Fallback

Restricciones de ANDI: Sólo se puede proporcionar el Android ID si no hay otros identificadores disponibles Y la aplicación no se distribuye a través de Google Play Store. Prohibido para aplicaciones de Google Play.

Cómo recuperar el ID de Android (ANDI)
#

ID de Android (ANDI)

El Android ID es un identificador único de 64 bits que se genera al configurar el dispositivo por primera vez. A partir de Android 8.0 (Oreo), se asigna por aplicación y por usuario: las distintas aplicaciones reciben Android ID diferentes a menos que compartan la misma clave de firma.

Persistencia: Permanece constante a menos que el dispositivo se restablezca de fábrica o se desinstale/reinstale la aplicación tras una actualización OTA.

JAVAKOTLIN
import android.provider.Settings;
import android.content.Context;

String androidId = Settings.Secure.getString(
    context.getContentResolver(), 
    Settings.Secure.ANDROID_ID
);

Identificadores web y multiplataforma

Las aplicaciones web y las implementaciones multiplataforma requieren un identificador de dispositivo singular (SDID) para un seguimiento preciso de la atribución.

Identificador Web requerido

SDID: Identificador de dispositivo singular requerido en todas las solicitudes S2S para plataformas Web, PC, Consola y CTV.

Cómo recuperar el identificador de dispositivo singular (SDID)
#

ID de dispositivo Singular Web SDK

Singular Device ID (SDID) proporciona un seguimiento coherente entre sesiones para aplicaciones web y plataformas no móviles.

Requisitos previos: Singular Web SDK debe estar implementado e inicializado antes de recuperar el SDID.

Uso

// Retrieve SDID after Singular SDK initialization
const sdid = window.singularSdk.getSingularDeviceId();
console.log("Singular Device ID:", sdid);

Nota de implementación: Llame a getSingularDeviceId()sólo después de que Singular SDK se haya inicializado correctamente; si intenta recuperarlo antes de la inicialización, el resultado será nulo.


Parámetros del dispositivo móvil

Los parámetros de dispositivo necesarios proporcionan un contexto esencial para la atribución y el análisis en plataformas móviles.

Parámetros obligatorios

Plataformas móviles: Localidad, marca de dispositivo, modelo de dispositivo y compilación requeridos en todas las solicitudes S2S para iOS y Android.

Cómo recuperar parámetros de dispositivo
#

Recuperación de parámetros

Recopile información sobre la configuración regional, el fabricante, el modelo y la compilación para obtener un perfil completo del dispositivo.

OBJECTIVE-CSWIFTJAVAKOTLIN
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <sys/sysctl.h>

// Retrieve Locale
NSString *retrieveLocale() {
    NSString *locale = [[NSLocale currentLocale] localeIdentifier];
    NSLog(@"Locale: %@", locale);
    return locale;
}

// Retrieve Manufacturer (always Apple for iOS)
NSString *retrieveManufacturer() {
    return @"Apple";
}

// Retrieve Device Model
NSString *deviceModel() {
    size_t bufferSize = 64;
    char model[bufferSize];
    int status = sysctlbyname("hw.machine", model, &bufferSize, NULL, 0);
    
    if (status == 0) {
        NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
        NSLog(@"Device Model: %@", deviceModel);
        return deviceModel;
    } else {
        NSLog(@"Unable to retrieve device model.");
        return nil;
    }
}

// Retrieve Build Version
NSString *buildVersion() {
    size_t bufferSize = 64;
    char build[bufferSize];
    int status = sysctlbyname("kern.osversion", build, &bufferSize, NULL, 0);
    
    if (status == 0) {
        NSString *buildVersion = [NSString stringWithCString:build encoding:NSUTF8StringEncoding];
        NSLog(@"Build Version: %@", buildVersion);
        return buildVersion;
    } else {
        NSLog(@"Unable to retrieve build version.");
        return nil;
    }
}

Asignación de parámetros:

  • Configuración regional (lc): Código de idioma y región (por ejemplo, en_US, zh_CN)
  • Marca (ma): Fabricante del dispositivo (Apple, Samsung, Xiaomi)
  • Modelo (mo): Modelo específico del dispositivo (iPhone14,2, SM-G991B)
  • Versión (bd): Versión del sistema operativo prefijada con "Build/".