SDK do Android - Opções avançadas

Documento

Opções avançadas

Configure funcionalidades avançadas do SDK, incluindo instalar a coleção de referenciadores, gestão de sessões, integração de JavaScript e identificadores de dispositivos alternativos para casos de utilização especializados.

Instalar coleção de referenciadores (dispositivos antigos)

Visão geral

O referenciador de instalação fornece uma atribuição precisa ao identificar em que anúncio o utilizador clicou antes de instalar a sua aplicação a partir da Google Play Store.

Preterido: O Google descontinuou a transmissão de intenção INSTALL_REFERRER. Consulte Ainda usa o InstallBroadcast? Mude para a API do Play Referrer até 1º de março de 2020. As versões modernas do SDK Singular usam automaticamente a API do Google Play Referrer.

Recolha automática:

Em dispositivos com a última versão da Google Play Store, o Singular SDK coleta o referenciador de instalação automaticamente usando a API Google Play Referrer. A configuração manual é necessária apenas para suporte a dispositivos antigos.


Integrar com o recetor existente

Encaminhe os dados do referenciador de instalação para a Singular quando seu aplicativo já tiver um BroadcastReceiver para INSTALL_REFERRER.

Implementação:

Adicione uma chamada para SingularInstallReceiver dentro do método onReceive do seu recetor existente.

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

Registrar o recetor Singular

Configure o recetor do referenciador de instalação Singular quando seu aplicativo não tiver um manipulador INSTALL_REFERRER existente.

Configuração do 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>

Recomendação: Esta configuração só é necessária para aplicações que suportem dispositivos muito antigos. As implementações modernas devem contar com a integração automática da API do Google Play Referrer.


Gestão de sessões

Gerenciamento automático de sessão

O Singular SDK lida automaticamente com o gerenciamento de sessão para Android API 14 (Ice Cream Sandwich) e superior sem configuração adicional.

Comportamento padrão:

Quando a aplicação passa para segundo plano durante 60 segundos ou mais, o SDK regista uma nova sessão ao regressar ao primeiro plano.


Configurar o tempo limite da sessão

Personalize a duração do tempo limite da sessão para corresponder aos padrões de utilização da sua aplicação.

Assinatura do 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)

Valores de tempo limite:

  • Padrão: 60 segundos
  • Mínimo: 0 segundos (cada transição de plano de fundo/primeiro plano cria uma nova sessão)
  • Recomendado: 30-180 segundos, dependendo dos padrões de uso do aplicativo

Gerenciamento manual de sessões (API < 14)

Para aplicativos com minSdkVersion abaixo de 14, gerencie manualmente as sessões chamando métodos de ciclo de vida em cada atividade.

Importante: A gestão manual de sessões só é necessária para aplicações que visem níveis de API Android inferiores a 14 (Ice Cream Sandwich). As aplicações modernas podem ignorar esta secção.

Implementação

Chame onActivityResumed() e onActivityPaused()nos métodos de ciclo de vida de cada atividade, ou implemente numa classe de atividade 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
    }
}

Melhores práticas: Se você tiver uma classe de atividade base comum, implemente essas chamadas nos métodos onResume()e onPause() da classe base, em vez de duplicar o código em todas as atividades.


Interface JavaScript para aplicações híbridas

Visão geral

Habilite a funcionalidade do SDK Singular a partir do código JavaScript em aplicativos híbridos baseados em WebView usando o SingularJSInterface.

Métodos suportados:

  • setCustomUserId: Definir o identificador de utilizador personalizado
  • unsetCustomUserId: Remover o identificador de utilizador personalizado
  • event (evento): Rastrear eventos com ou sem atributos
  • revenue (receita): Acompanhar a receita

Configurar a integração do WebView

Configure a interface JavaScript no método onCreate() da sua atividade para cada WebView que precisa da funcionalidade 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")
}

Várias WebViews:

  • Configure a interface JavaScript para cada WebView em seu aplicativo
  • Use o mesmo nome de interface ("SingularInterface") para manter a consistência
  • Defina IDs de WebView exclusivas para cada instância

Uso do JavaScript

Chame os métodos Singular a partir do código JavaScript em execução no seu WebView.

Acompanhar 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
    })
);

Acompanhar receitas

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

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

Gerir ID de utilizador personalizado

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

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

Identificadores de dispositivos alternativos

OAID (Open Advertising ID)

Permita o rastreamento em dispositivos Android em regiões sem o Google Play usando o Open Advertising Identifier (OAID).

Suporte OAID:

  • Dispositivos Huawei: Implementação de OAID proprietária da Huawei
  • Dispositivos MSA: Marcas membros da Mobile Security Alliance (OPPO, Vivo, Xiaomi, etc.)

Pré-requisitos

Integrar o SDK MSAe o SDK OAID da Huaweipara recolher OAID em todas as plataformas suportadas.

Ativar a recolha de OAID

Configure o SDK Singular para coletar e usar o OAID para rastreamento.

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

Singular.init(applicationContext, config)

Deteção automática:

  • O SDK detecta automaticamente se o dispositivo tem um OAID
  • O SDK seleciona o SDK OAID apropriado (MSA ou Huawei) com base no dispositivo
  • O Amazon Advertising ID (AMID) é recolhido automaticamente sem dependências adicionais

IMEI (Identidade Internacional de Equipamento Móvel)

Recolha o número IMEI do dispositivo para rastreio de dispositivos em regiões sem o Google Play Services.

Aviso crítico: A recolha do IMEI viola o contrato do Google Play Services. Utilize a recolha de IMEI apenas para aplicações distribuídas fora da Google Play Store em regiões sem os serviços Google.

Adicionar permissão necessária

Adicione a permissão READ_PHONE_STATE ao seu AndroidManifest.xml.

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

Recuperar o número IMEI

Obtenha o IMEI do dispositivo utilizando o TelephonyManager com o tratamento adequado ao nível da 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 para a Singular

Configure o IMEI durante a inicialização do SDK (recomendado) ou defina-o dinamicamente após a inicialização.

Opção 1: Método de configuração (recomendado)

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

Singular.init(applicationContext, config)

Opção 2: Método de tempo de execução

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

Melhores práticas: Defina o IMEI em SingularConfigantes da inicialização do SDK para garantir que ele esteja disponível desde a primeira sessão. Utilize setIMEI() apenas quando o IMEI ficar disponível após a inicialização.