SDK de Android - Opciones avanzadas

Documento

Opciones avanzadas

Configure las funciones avanzadas del SDK, como la instalación de la recopilación de referencias, la gestión de sesiones, la integración de JavaScript y los identificadores de dispositivos alternativos para casos de uso especializados.

Instalar recopilación de referencias (dispositivos heredados)

Descripción general

El referente de instalación proporciona una atribución precisa al identificar en qué anuncio hizo clic el usuario antes de instalar su aplicación desde Google Play Store.

Obsoleto: Google ha dejado de utilizar la difusión de intenciones de INSTALL_REFERRER. Consulte ¿Sigue utilizando InstallBroadcast? Cambie a la Play Referrer API antes del 1 de marzo de 2020. Las versiones modernas de Singular SDK utilizan automáticamente la Google Play Referrer API.

Recopilación automática:

En los dispositivos con la última versión de Google Play Store, Singular SDK recopila automáticamente la referencia de instalación mediante la API de referencia de Google Play. La configuración manual sólo es necesaria para la compatibilidad con dispositivos heredados.


Integración con el receptor existente

Reenvíe los datos de referencia de instalación a Singular cuando su aplicación ya tenga un BroadcastReceiver para INSTALL_REFERRER.

Implementación:

Añada una llamada a SingularInstallReceiver dentro del método onReceive de su receptor existente.

KotlinJava
class MyCustomInstallReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // Forward install referrer to Singular
        SingularInstallReceiver().onReceive(context, intent)
        
        // Your existing logic
        // ...
    }
}

Registre el receptor de Singular

Configure el receptor de referencia de instalación de Singular cuando su aplicación no disponga de un gestor de INSTALL_REFERRER.

Configuración de AndroidManifest.xml:

AndroidManifest.xml
<application>
    <!-- Other application components -->
    
    <receiver 
        android:name="com.singular.sdk.SingularInstallReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>
</application>

Recomendación: Esta configuración sólo es necesaria para aplicaciones que soporten dispositivos muy antiguos. Las implementaciones modernas deberían confiar en la integración automática de Google Play Referrer API.


Gestión de sesiones

Gestión automática de sesiones

Singular SDK gestiona automáticamente la sesión para Android API 14 (Ice Cream Sandwich) y superiores sin necesidad de configuración adicional.

Comportamiento por defecto:

Cuando la app pasa a segundo plano durante 60 segundos o más, el SDK registra una nueva sesión al volver al primer plano.


Configurar el tiempo de espera de la sesión

Personalice la duración del tiempo de espera de la sesión para adaptarla a los patrones de uso de su aplicación.

Firma del método:

SingularConfig.withSessionTimeoutInSec(int timeoutInSeconds)
KotlinJava
// Set session timeout to 120 seconds (2 minutes)
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withSessionTimeoutInSec(120)

Singular.init(applicationContext, config)

Timeout Valores:

  • Predeterminado: 60 segundos
  • Mínimo: 0 segundos (cada transición fondo/primer plano crea una nueva sesión)
  • Recomendado: 30-180 segundos dependiendo de los patrones de uso de la app

Gestión manual de sesiones (API < 14)

Para aplicaciones con minSdkVersion por debajo de 14, gestiona manualmente las sesiones llamando a los métodos del ciclo de vida en cada actividad.

Importante: La gestión manual de sesiones sólo es necesaria para las aplicaciones con niveles de API de Android inferiores a 14 (Ice Cream Sandwich). Las aplicaciones modernas pueden omitir esta sección.

Implementación

Llame a onActivityResumed() y onActivityPaused()en los métodos del ciclo de vida de cada actividad, o impleméntelos en una clase de actividad base.

KotlinJava
class MainActivity : AppCompatActivity() {
    
    override fun onResume() {
        super.onResume()
        Singular.onActivityResumed()
        // Your other code
    }
    
    override fun onPause() {
        super.onPause()
        Singular.onActivityPaused()
        // Your other code
    }
}

Práctica recomendada: Si tienes una clase de actividad base común, implementa estas llamadas en los métodos onResume()y onPause() de la clase base en lugar de duplicar el código en todas las actividades.


Interfaz JavaScript para aplicaciones híbridas

Descripción general

Habilite la funcionalidad de Singular SDK desde código JavaScript en aplicaciones híbridas basadas en WebView utilizando SingularJSInterface.

Métodos admitidos:

  • setCustomUserId: Establece el identificador de usuario personalizado
  • unsetCustomUserId: Elimina el identificador de usuario personalizado
  • event: Seguimiento de eventos con o sin atributos
  • ingresos: Seguimiento de ingresos

Configurar integración WebView

Configure la interfaz JavaScript en el método onCreate() de su actividad para cada WebView que necesite funcionalidad Singular.

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    // Initialize Singular SDK
    val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    Singular.init(this, config)
    
    // Configure WebView
    val myWebView = findViewById<WebView>(R.id.webview)
    myWebView.settings.javaScriptEnabled = true
    myWebView.loadUrl("file:///android_asset/index.html")
    
    // Add Singular JavaScript interface
    val singularJSInterface = SingularJSInterface(this)
    singularJSInterface.setWebViewId(R.id.webview)
    myWebView.addJavascriptInterface(singularJSInterface, "SingularInterface")
}

Múltiples WebViews:

  • Configure la interfaz JavaScript para cada WebView de su aplicación
  • Utilice el mismo nombre de interfaz ("SingularInterface") para mantener la coherencia.
  • Establezca IDs de WebView únicos para cada instancia

Uso de JavaScript

Llame a los métodos de Singular desde el código JavaScript que se ejecuta en su WebView.

Seguimiento de eventos

JavaScript
// Simple event without attributes
SingularInterface.event('level_completed');

// Event with attributes (pass as JSON string)
SingularInterface.event('purchase_attempt', 
    JSON.stringify({
        "item_name": "sword",
        "item_category": "weapons",
        "item_price": 9.99
    })
);

Seguimiento de ingresos

JavaScript
// Track revenue in USD
SingularInterface.revenue('USD', 9.99);

// Track revenue in other currencies
SingularInterface.revenue('EUR', 8.50);

Gestión de ID de usuario personalizados

JavaScript
// Set custom user ID
SingularInterface.setCustomUserId('user_12345');

// Remove custom user ID
SingularInterface.unsetCustomUserId();

Identificadores de dispositivo alternativos

OAID (Identificador de publicidad abierto)

Habilite el seguimiento en dispositivos Android en regiones sin Google Play mediante el identificador de publicidad abierto (OAID).

Compatibilidad con OAID:

  • Dispositivos Huawei: Implementación OAID propietaria de Huawei.
  • Dispositivos MSA: Marcas miembro de la Mobile Security Alliance (OPPO, Vivo, Xiaomi, etc.)

Requisitos previos

Integre tanto el SDK de MSAcomo el SDK de OAID deHuawei para recopilar OAID en todas las plataformas compatibles.

Habilitar la recopilación de OAID

Configure el SDK Singular para recopilar y utilizar OAID para el seguimiento.

KotlinJava
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withOAIDCollection()

Singular.init(applicationContext, config)

Detecciónautomática:

  • El SDK detecta automáticamente si el dispositivo tiene un OAID.
  • El SDK selecciona el SDK OAID apropiado (MSA o Huawei) basado en el dispositivo
  • Amazon Advertising ID (AMID) se recoge automáticamente sin dependencias adicionales

IMEI (Identidad Internacional de Equipo Móvil)

Recopila el número IMEI del dispositivo para el seguimiento en dispositivos en regiones sin Google Play Services.

Advertencia crítica: La recopilación de IMEI infringe el acuerdo de Google Play Services. Utiliza la recopilación de IMEI sólo para aplicaciones distribuidas fuera de Google Play Store en regiones sin servicios de Google.

Añadir permiso requerido

Añade el permiso READ_PHONE_STATE a tu AndroidManifest.xml.

AndroidManifest.xml
<manifest>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
    <application>
        <!-- Your application components -->
    </application>
</manifest>

Recuperar el número IMEI

Obtenga el IMEI del dispositivo utilizando TelephonyManager con el manejo adecuado del nivel de API.

KotlinJava
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

val imei: String? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    telephonyManager.imei
} else {
    @Suppress("DEPRECATION")
    telephonyManager.deviceId
}

// Validate IMEI before use
if (imei != null && imei.isNotEmpty()) {
    // Send to Singular
    Log.d("IMEI", "Retrieved: $imei")
} else {
    Log.w("IMEI", "Failed to retrieve IMEI")
}

Enviar IMEI a Singular

Configure el IMEI durante la inicialización del SDK (recomendado) o configúrelo dinámicamente después de la inicialización.

Opción 1: Método de configuración (recomendado)

KotlinJava
// Set IMEI during initialization
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withIMEI(imei)

Singular.init(applicationContext, config)

Opción 2: Método en tiempo de ejecución

KotlinJava
// Set IMEI after initialization
Singular.setIMEI(imei)

Práctica recomendada: Configure el IMEI en SingularConfigantes de la inicialización del SDK para asegurarse de que esté disponible desde la primera sesión. Utilice setIMEI() sólo cuando el IMEI esté disponible después de la inicialización.