# SDK para Android (Kotlin y Java)

URL: https://traqio.app/es/docs/sdks/android
Last updated: 2026-10-22

Añade Traqio a una app Android nativa: una dependencia de Gradle, una llamada a init en Application.onCreate, y el Play Install Referrer hace la atribución.

El SDK de Traqio para Android, `io.khufu.traqio:traqio-android`, atribuye las instalaciones de una app Android nativa (Kotlin o Java) con el **Install Referrer de Google Play**: la cadena que Google Play entrega a una app tras la instalación, en la que el enlace de seguimiento de Traqio escribió su id de clic. También pone en cola y reintenta tus eventos, registra las aperturas de la app para la retención y resuelve los deep links. Sin identificador publicitario ni permisos, salvo que lo actives.

## Requisitos

- Android 5.0 (API 21) o posterior; toolchain de Java 17.
- Instalaciones que pasen por Google Play: un APK instalado manualmente no tiene referrer y se registra como orgánico.

## Configuración

### Añade la dependencia

Kotlin DSL:
```kotlin
// app/build.gradle.kts
dependencies {
    implementation("io.khufu.traqio:traqio-android:0.1.0")
}
```

Groovy:
```groovy
// app/build.gradle
dependencies {
    implementation 'io.khufu.traqio:traqio-android:0.1.0'
}
```

El SDK incluye la librería Install Referrer de Google y declara la entrada `<queries>` que Android 11+ exige para ver Google Play: no hay nada que añadir a tu manifest para la atribución.

Hasta que el artefacto esté en Maven Central, añade el AAR que te enviamos, con su única dependencia:

```kotlin
// app/build.gradle.kts — the AAR you received, until the package is on Maven Central
dependencies {
    implementation(files("libs/traqio-android-0.1.0.aar"))
    implementation("com.android.installreferrer:installreferrer:2.2")
}
```

Un AAR local no arrastra las dependencias de su manifest como lo hace un artefacto de Maven; de ahí la línea explícita de Install Referrer.

### Inicializa en Application.onCreate

Kotlin:
```kotlin
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        Traqio.init(this, sdkKey = "YOUR_SDK_KEY", endpoint = "https://api.traqio.app")
    }
}
```

Java:
```java
public class App extends Application {
    @Override public void onCreate() {
        super.onCreate();
        Traqio.init(this, "YOUR_SDK_KEY", "https://api.traqio.app");
    }
}
```

Registra la clase en el manifest (`android:name=".App"`). Inicializar en la `Application`, y no en una activity, permite al SDK ver el intent de la primera activity, que es como se resuelve un enlace que abre la app en frío. El trabajo se hace en el hilo propio del SDK; la llamada vuelve de inmediato.

### Registra eventos y define el id de usuario

Kotlin:
```kotlin
Traqio.setUserId(user.id)                 // after sign-in — same id as RevenueCat's app_user_id
Traqio.track("signup")
Traqio.track("purchase", 9.99, "EUR")
```

Java:
```java
Traqio.setUserId(user.getId());
Traqio.track("signup");
Traqio.track("purchase", 9.99, "EUR");
```

Nombra los eventos con el vocabulario con el que optimizan Meta y TikTok: [Nombres de eventos](https://traqio.app/es/docs/concepts/events-and-revenue#names).

### Declara el dominio de tus enlaces

```xml
<!-- AndroidManifest.xml, inside the activity that handles links -->
<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https" android:host="go.example.com" android:pathPrefix="/c/" />
</intent-filter>
```

Con tu propio dominio de seguimiento en lugar de `go.example.com`, Android abre la app (en vez del navegador) para los enlaces de ese dominio, una vez que ha verificado el `assetlinks.json` del dominio, que Traqio sirve a partir del nombre del paquete de tu app y de las huellas de su certificado de firma. Consulta [Deep linking](https://traqio.app/es/docs/concepts/deep-linking).

## Recibir deep links

```kotlin
Traqio.onDeepLink { link ->
    link.deepLink?.let { navigateTo(it) }   // "/product/42" or "myapp://product/42"
}

// The install's deferred link, once resolved (null when it came from no link):
Traqio.getDeferredDeepLink { link -> /* … */ }
```

El intent `ACTION_VIEW` de cada activity reanudada se pasa al SDK automáticamente, una vez por intent; solo las URL de seguimiento (`https://<host>/c/<code>`) salen del dispositivo. Una activity `singleTop` conserva su primer intent a menos que lo actualices:

```kotlin
override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)          // or: Traqio.handleIntent(intent)
}
```

Los callbacks se ejecutan en el hilo principal.

## Consentimiento

```kotlin
// From your own consent prompt — sharing with ad networks, not measurement.
Traqio.setConsent(granted)

// Or at launch, when the answer is already known:
Traqio.init(this, sdkKey = "YOUR_SDK_KEY", endpoint = "https://api.traqio.app", consent = granted)
```

`false` mantiene la medición en tu panel y detiene todo reenvío de este dispositivo a Meta, TikTok o cualquier postback. Consulta [Privacidad → Consentimiento](https://traqio.app/es/docs/concepts/privacy#consent).

## Identificador publicitario (opcional)

Desactivado por defecto: el SDK no envía ningún GAID. Actívalo solo si compras en redes que atribuyen por el identificador publicitario — Unity Ads y AppLovin vinculan su clic con tu instalación gracias a él, y la notificación de instalación de Unity lo necesita. Nunca se usa como identidad de la instalación.

```kotlin
Traqio.init(this, sdkKey = "YOUR_SDK_KEY", endpoint = "https://api.traqio.app", collectAdvertisingId = true)
```

app/build.gradle.kts:
```kotlin
implementation("com.google.android.gms:play-services-ads-identifier:18.3.0")
```

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

- El SDK de Traqio no declara ni la librería ni el permiso: una app que deja la opción desactivada no pide nada por culpa de Traqio. Sin uno u otro, no se envía ningún id.
- No se envía ningún id si el usuario limitó el seguimiento publicitario o borró su identificador.
- Con la opción activada, declara el identificador publicitario en el formulario de Seguridad de los datos de Google Play.

## API

| Llamada | Qué hace |
| --- | --- |
| init(context, sdkKey, endpoint, userId?, deepLinking = true, consent?, collectAdvertisingId = false) | Arranca una vez; informa de la instalación en el primer arranque. |
| track(name, value?, currency?) | Pone un evento en cola; se envía en lotes de 20 y se reintenta con backoff hasta 5 minutos. |
| setUserId(id) | Asocia tu id de usuario a todo lo que se envíe a partir de ahora. |
| setConsent(granted) | Guarda el consentimiento del usuario para compartir con redes publicitarias. |
| onDeepLink(listener) | Recibe los deep links directos y diferidos; removeDeepLinkListener para dejar de recibirlos. |
| getDeferredDeepLink(callback) | El enlace diferido de la instalación, o null. |
| handleIntent(intent) · handleUrl(url) | Resuelve tú mismo una URL (automático para las activities reanudadas). |

## Aún no está en este SDK

En comparación con el [motor JavaScript](https://traqio.app/es/docs/sdks/javascript), el SDK nativo de Android aún no acepta un `transactionId` de la tienda en las compras, no informa de los ingresos publicitarios de AdMob ni borra a un usuario desde la app (`forgetMe`). Los ingresos siguen llegando a Traqio a través de [RevenueCat](https://traqio.app/es/docs/integrations/revenuecat), y el borrado mediante la [llamada del lado del servidor](https://traqio.app/es/docs/concepts/privacy#erasure).

> **Lectura del Install Referrer** El referrer se lee una vez en el primer arranque, con un tiempo de espera de 5 segundos. Si Google Play no responde a tiempo, la instalación se informa sin él: orgánica.

### Ver también

- [Cómo se atribuye una instalación en Android](https://traqio.app/es/docs/concepts/attribution#android)
- [Enlaces de seguimiento](https://traqio.app/es/docs/concepts/tracking-links)

## Preguntas frecuentes

**¿El SDK de Traqio para Android necesita el GAID o algún permiso?**
No. Lee el Install Referrer de Google Play mediante la librería Install Referrer de Google, que no necesita ningún permiso, e identifica la instalación con un id aleatorio que genera y guarda en las SharedPreferences de la app. Solo lee el identificador publicitario si activas collectAdvertisingId — y entonces es tu app, no el SDK, la que añade la librería ads-identifier de Google y el permiso AD_ID.

**¿Cuál es la versión mínima de Android?**
Android 5.0 (API 21). El SDK se compila contra la API 34 y genera bytecode de Java 17.

**¿Cómo se atribuye una instalación en Android?**
Un enlace de seguimiento de Traqio envía al usuario a Google Play con el id de clic de Traqio en el parámetro referrer. Google Play entrega esa cadena a la app tras la instalación mediante la API Install Referrer; el SDK la envía con la instalación, y el servidor asocia el id de clic al clic registrado. La coincidencia es exacta, no estadística.
