Saltar al contenido

Guía · Android (Kotlin)

Añade un programa de afiliados o de referidos a tu app Android.

El SDK de InfluTo para Android está escrito para Kotlin y corrutinas. Te dice qué creador refirió una instalación, acepta códigos de referido escritos por el usuario y hace verificar cada compra, con RevenueCat o directamente desde Google Play Billing.

Actualizado: 1 de noviembre de 2026

En resumen

Añade to.influ:android-sdk desde Maven Central, llama a InfluTo.initialize una sola vez en Application.onCreate (es una función suspend) y luego a checkAttribution e identifyUser. Con RevenueCat no hay nada más que conectar en el código: el SDK encuentra RevenueCat por su cuenta y etiqueta al suscriptor. Sin RevenueCat, añade to.influ:android-sdk-billing; trae Play Billing Library 9.0.0, captura las compras automáticamente y también recibe cada compra desde tu propio PurchasesUpdatedListener. minSdk 24 y una toolchain de Java 17. Calcula una tarde, casi toda en la parte de las compras.

Paso 1: añade los artefactos que necesites

El SDK se divide en tres artefactos en Maven Central, todos con la misma versión, así que mavenCentral() debe estar en tus repositorios. Añade solo lo que necesites: cada complemento incluye el núcleo, y el núcleo y el de billing traen sus propias reglas de R8/ProGuard.

// build.gradle.kts
dependencies {
    implementation("to.influ:android-sdk:1.1.1")
    // optional: Compose code field (InfluToReferralCodeInput)
    implementation("to.influ:android-sdk-ui:1.1.1")
    // optional: store-direct purchase auto-capture
    implementation("to.influ:android-sdk-billing:1.1.1")
}
ArtefactoAñádelo cuandoQué incluye
android-sdkSiempreEl SDK; añade el permiso INTERNET
android-sdk-uiQuieres el campo de código para Compose ya hechoInfluToReferralCodeInput (Material 3)
android-sdk-billingTu app vende directamente en la tienda (sin RevenueCat)Captura automática de compras; añade Google Play Billing Library 9.0.0 (billing-ktx) y el permiso com.android.vending.BILLING

Paso 2: inicializa en Application.onCreate

initialize es una función suspend. Llámala una vez al arrancar y espera a que termine; hasta que lo consiga, checkAttribution y reportPurchase lanzan InfluToError.NotInitialized. Lanza una excepción si falla (clave incorrecta, sin red): captúrala, regístrala y sigue.

Usa Application.onCreate o un scope de toda la app, no el onCreate de una activity, que se ejecuta de nuevo en cada cambio de configuración. ¿No estás en una corrutina? Todos los métodos de red tienen una sobrecarga con callback; los callbacks se ejecutan en un hilo secundario, así que pasa al hilo principal antes de tocar la interfaz.

La clave de API (it_…, en Configuración y SDK) sirve para desarrollo y producción. Guárdala en un campo de BuildConfig que se rellene desde una propiedad de Gradle en local.properties o desde los secretos de tu CI. Un arranque típico en una app con RevenueCat:

class MyApp : Application() {
    private val appScope = MainScope()

    override fun onCreate() {
        super.onCreate()
        // RevenueCat apps: configure it first
        Purchases.configure(PurchasesConfiguration.Builder(this, "goog_…").build())

        appScope.launch {
            try {
                InfluTo.initialize(this@MyApp, InfluToConfig(
                    apiKey = BuildConfig.INFLUTO_API_KEY,
                    appVersion = BuildConfig.VERSION_NAME,
                ))
            } catch (e: Exception) {
                Log.w("InfluTo", "initialize failed", e) // retried on the next launch
                return@launch
            }
            val attribution = InfluTo.checkAttribution()
            InfluTo.identifyUser(Purchases.sharedInstance.appUserID)
        }
    }
}

Paso 3: códigos de referido y el campo de Compose

applyCode(code) es una llamada suspend que valida un código y lo aplica si es válido. Los códigos se recortan y se pasan a mayúsculas; uno no válido devuelve valid = false con un errorCode: INVALID_FORMAT, CODE_NOT_FOUND, CODE_EXPIRED, NETWORK_ERROR o UNKNOWN.

Con android-sdk-ui, InfluToReferralCodeInput es un composable de Material 3 que valida mientras el usuario escribe, aplica el código al tocar, lo rellena de antemano en una instalación atribuida a un enlace y acepta tus textos traducidos. Solo muestra el nombre del creador si activas showReferrerName.

Paso 4: conecta las compras

InfluTo solo paga comisión por compras verificadas con la tienda. Elige un camino para Android:

  • RevenueCat: no hay nada que conectar en el código. Cuando se encuentra un referido o se aplica un código, el SDK localiza el SDK de RevenueCat y establece influto_code e influto_referral; pasa revenueCatAttributeSetter si prefieres hacerlo explícito. Configura primero RevenueCat y no añadas android-sdk-billing.

  • Compras directas en la tienda (Play Billing): añade android-sdk-billing. En una app con compras directas en la tienda, initialize arranca un observador con su propia conexión de Play Billing que reporta las compras nuevas y revisa las existentes en cada inicio. Solo se envían las compras en estado PURCHASED, cada una una sola vez, identificada por el purchase token.

Los productos de pago único y los consumibles necesitan productId, además de price y currency: sin productId la compra se comprueba como suscripción y falla, y sin precio se registra en 0 $. Inclúyelos en oneTimeProductIds y la captura automática añade ambos datos. Un 409 significa que una compra única sigue pendiente.

La mayoría de las apps tienen su propio BillingClient. Pasa también cada compra al módulo desde tu PurchasesUpdatedListener, para que se reporte en el mismo momento. Comparte la misma deduplicación, así que nada se reporta dos veces:

override fun onPurchasesUpdated(result: BillingResult, purchases: MutableList<Purchase>?) {
    if (result.responseCode != BillingClient.BillingResponseCode.OK || purchases == null) return
    scope.launch {
        for (purchase in purchases) {
            InfluToBilling.report(context, purchase) // subscriptions
            // one-time products: InfluToBilling.report(context, purchase, oneTime = true, price = 4.99, currency = "EUR")
        }
    }
}

Paso 5: añade la cuenta de servicio de Google Play

La vía directa con la tienda necesita acceso de lectura a la API de Google Play Developer. InfluTo solo lee; nunca cambia nada en tu Play Console.

  1. 1

    Activa la API. En Google Cloud, activa la Google Play Android Developer API y crea una cuenta de servicio con una clave JSON.

  2. 2

    Da acceso en Play Console. En Usuarios y permisos, invita al correo de la cuenta de servicio y asígnale el permiso Ver datos financieros, pedidos y respuestas de la encuesta de cancelación para la app.

  3. 3

    Sube, valida, cambia. Sube la clave JSON en Ajustes → Validación y pulsa Guardar y validar. Cuando la comprobación salga en verde, cambia Android a Google — directo.

Los permisos nuevos de Google pueden tardar hasta 48 horas en llegar a la API; mientras tanto, InfluTo muestra «propagando». Hasta que hagas el cambio, los informes de compra reciben un 400, así que publicar primero el SDK no tiene riesgo.

Paso 6: prueba con un tester de licencias

Las compras de prueba nunca mueven dinero ni cambian tus estadísticas:

  1. 1

    Simula una compra. Simular una compra, en Configuración y SDK, envía una compra de prueba en sandbox por el flujo real de InfluTo. Introduce uno de tus códigos para ver cómo se asigna.

  2. 2

    Instala desde un enlace de referido. Únete a tu campaña con una segunda cuenta de creador, abre su enlace en un dispositivo de prueba, instala tu build de prueba y ábrela. Escribir el código a mano es la prueba más fiable.

  3. 3

    Compra como tester de licencias. Compra como tester de licencias de Google Play. El registro de integración, en modo Sandbox, muestra la compra atribuida a tu código; con debug = true, el SDK registra cada paso en Logcat con la etiqueta InfluTo.

clearAttribution() restablece el dispositivo para otra prueba; borrar los datos de la app o reinstalarla da un punto de partida más limpio.

Notas sobre Android

Algunos detalles de la plataforma:

  • Corrutinas primero. Los métodos de red son funciones suspend; getReferralCode(), getPrefilledCode() y clearAttribution() son funciones normales.

  • Permisos. El núcleo añade INTERNET; android-sdk-billing añade com.android.vending.BILLING. La documentación de privacidad explica qué declarar en el formulario de seguridad de los datos de Google Play.

  • Versión de Play Billing. android-sdk-billing expone Play Billing Library 9.0.0, que Gradle resuelve junto con tu propia dependencia de Billing.

  • Sin ID de publicidad. InfluTo no usa el ID de publicidad, no rastrea a los usuarios entre apps y nunca asigna por características del dispositivo.

O deja que lo haga tu agente de código

Conecta el servidor MCP de InfluTo a Claude Code, Codex o Cursor y pídele la integración: el agente escribe las líneas de Gradle y el código de arranque, te da un enlace para que subas tú mismo el JSON de la cuenta de servicio, ejecuta la comprobación de credenciales y confirma una compra de prueba atribuida.

SDK de afiliados para Android, con respuestas.

¿Hay un SDK de afiliados para apps Android escritas en Kotlin?

Sí. to.influ:android-sdk, en Maven Central (MIT, código en github.com/influto/influto-android), añade a las apps Android nativas la detección de instalaciones por referido, los códigos de referido y la atribución de compras. Requiere minSdk 24 y un toolchain de Java 17, y el núcleo solo depende de kotlinx-coroutines.

¿Necesito Google Play Billing Library?

Solo en la vía directa con la tienda. android-sdk-billing añade Play Billing Library 9.0.0 (billing-ktx) y el permiso BILLING. Las apps con RevenueCat usan solo el SDK principal.

¿Funciona con RevenueCat en Android?

Sí. El SDK detecta por sí solo el SDK de RevenueCat y asigna influto_code e influto_referral al suscriptor, o puedes pasar revenueCatAttributeSetter de forma explícita. Después, el webhook de RevenueCat envía a InfluTo cada compra, renovación y reembolso.

¿Admite consumibles y compras únicas?

Sí. Incluye sus IDs de producto en oneTimeProductIds para que las compras capturadas se validen como compras únicas, e infórmalas con precio y moneda si tu código de facturación no expone el precio. Los reembolsos de compras únicas de Google Play se detectan y la comisión se revierte.

¿Cuánto cuesta?

0 $ al mes. Por cada compra verificada pagas la comisión que fijes más el 10 % de esos mismos ingresos (7 %, 5 % o 3 % según el volumen). El monedero prepago empieza en 50 $ y es reembolsable; InfluTo paga a los creadores cada mes con Stripe Connect en 33 países, en cuanto han ganado 20 $.

Lanza códigos de referido en tu próxima versión.

Una línea de Gradle, una vía de validación, un depósito reembolsable. 0 $ al mes; el 10 % solo sobre los ingresos que traen los creadores.

Empezar gratis