SDK do Flutter - Integração básica

Documento
Novo: Guia em vídeo

Assista a este vídeo para obter uma visão detalhada do processo de integração. Recomendamos que utilize tanto o vídeo como o guia escrito abaixo.

Pré-requisitos

Conclua estas etapas de pré-requisito antes de instalar o SDK do Singular Flutter para garantir um processo de integração tranquilo.

Pré-requisitos necessários:

  • Concluir as etapas de planejamento: Siga o guia em Integração de um SDK Singular: Planejamento e pré-requisitos. Essas etapas são obrigatórias para qualquer integração do Singular SDK.
  • Versão do Flutter: Verifique se você tem um aplicativo Flutter funcional com o SDK do Flutter instalado.
  • Credenciais do SDK: Obtenha sua SDK Key e Secret da plataforma Singular em Developer Tools > SDK Integration > SDK Keys.

Instalação

Instalando o pacote SDK

Adicione o Singular SDK do Flutter ao seu projeto usando o gerenciador de dependências pubspec.yaml. O SDK fornece bindings Dart para os SDKs nativos do Singular para iOS e Android.

Adicionar dependência do SDK

  1. Atualize pubspec.yaml: Adicione a dependência do Singular SDK do Flutter ao arquivo pubspec.yaml do seu projeto:
    pubspec.yaml
    dependencies:
      flutter:
        sdk: flutter
      singular_flutter_sdk: ^1.8.0
  2. Instalar dependências: Navegue até o diretório do seu projeto no terminal e execute:
    bash
    flutter packages get

Configuração da plataforma

Configuração do iOS

Conclua a configuração específica do iOS para ativar o suporte da estrutura do AdServices para rastreamento de atribuição do iOS.

Adicionar a estrutura do AdServices

A estrutura do AdServices é necessária para a atribuição do Apple Search Ads e a integração com a SKAdNetwork do iOS 14.3+.

  1. Navegue até o projeto iOS: Abra o diretório iOS do seu projeto Flutter e localize o espaço de trabalho do Xcode.
    • Navegue até à pasta ios do seu projeto Flutter.
    • Abra Runner.xcworkspace no Xcode (use .xcworkspace se você usar CocoaPods, caso contrário, use .xcodeproj).
  2. Adicione a estrutura AdServices: Configure a estrutura nas definições do seu projeto Xcode.
    • No Xcode, selecione o destino do seu projeto (por exemplo, "Runner").
    • Vá para a guia Geral.
    • Desloque-se para a secção Estruturas, bibliotecas e conteúdo incorporado.
    • Clique no botão +.
    • Procure por AdServices.framework e adicione-o.
    • Defina o status da estrutura como Opcional (garante a compatibilidade com versões mais antigas do iOS).

Porquê Opcional? Definir o AdServices como opcional garante que a sua aplicação permanece compatível com as versões do iOS que não incluem esta estrutura (iOS 14.2 e anteriores).

Configuração do Android

Configure seus arquivos de compilação do Android para adicionar as permissões e dependências necessárias para a funcionalidade adequada do SDK.

Adicionar permissões necessárias

Adicione essas permissões ao seu arquivo AndroidManifest.xml sob a tag <manifest> para habilitar a funcionalidade principal do SDK.

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

Importante: Exclua a permissão com.google.android.gms.permission.AD_ID se estiver a integrar o SDK para crianças. Esta permissão é necessária para a recolha de GAID em aplicações padrão, mas deve ser omitida para aplicações destinadas a crianças com menos de 13 anos.

Suporte da Samsung Galaxy Store

Para ativar o rastreio de referenciadores de instalação da Samsung Galaxy Store, adicione o seguinte ao seu AndroidManifest.xml:

AndroidManifest.xml
<queries>
   <package android:name="com.sec.android.app.samsungapps" />
</queries>

Dependências transitivas

Se tiver desativado as dependências transitivas para o Singular SDK na sua configuração Gradle, adicione manualmente estas dependências necessárias:

android/app/build.gradle
dependencies {
    // Required for install referrer tracking
    implementation 'com.android.installreferrer:installreferrer:2.2'

    // Required for App Set ID
    implementation 'com.google.android.gms:play-services-appset:16.0.0'
}

Configuração do ProGuard

Ao construir APKs de lançamento, o ProGuard (ou R8) pode remover ou ofuscar classes SDK. Adicione estas regras de manutenção para preservar a funcionalidade Singular.

Por que isso é importante: O ProGuard é ativado por padrão nas compilações de lançamento do Flutter Android. Sem as regras de manutenção adequadas, o SDK pode não funcionar corretamente na produção.

  1. Localizar o arquivo ProGuard: Navegue até android/app/proguard-rules.pro no seu projeto Flutter.
  2. Adicionar regras de manutenção: Anexe as seguintes regras para preservar as classes do SDK:
    android/app/proguard-rules.pro
    # Preserve Singular SDK classes
    -keep class com.singular.sdk.** { *; }
    
    # Preserve Android Install Referrer library
    -keep public class com.android.installreferrer.** { *; }
    
    # Uncomment if using Singular revenue tracking with Google Play Billing Library
    #-keep public class com.android.billingclient.** { *; }

Integração do SDK

Conformidade com a privacidade: Cumpra as leis de privacidade em suas regiões operacionais, incluindo GDPR, CCPA, COPPA e outras ao implementar o SDK Singular. Para obter orientação, consulte Práticas de aceitação e exclusão de SDK.

Inicialize o SDK Singular sempre que seu aplicativo for iniciado. A inicialização do SDK é essencial para todas as funcionalidades de atribuição do Singular e cria uma nova sessão para calcular as métricas de retenção de usuários.

Importar classes do SDK

Importe as classes do SDK do Singular na parte superior do arquivo principal do seu aplicativo (normalmente main.dart).

Dart
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';

Inicializar o SDK

Crie um objeto SingularConfig com suas credenciais do SDK, configure recursos opcionais e inicialize o SDK usando o método start().

Inicialização básica

  1. Obter credenciais: Faça login na sua conta Singulare navegue até Ferramentas do desenvolvedor > Integração do SDK > Chaves do SDKpara encontrar sua chave e segredo do SDK.
  2. Criar configuração: Instanciar um objeto SingularConfig com suas credenciais.
  3. Adicionar configuração: Opcionalmente, configure o comportamento do SDK usando definidores de propriedade (consulte Referência de configuração).
  4. Inicializar o SDK: Chame Singular.start()para iniciar o SDK.

Exemplo de inicialização

Inicialize o SDK no ponto de entrada do seu aplicativo, normalmente no método initState() do seu StatefulWidget principal.

Dart
import 'package:flutter/material.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();

    // Create configuration with credentials
    SingularConfig config = SingularConfig(
      'YOUR_SDK_KEY',
      'YOUR_SDK_SECRET'
    );

    // Enable debug logging
    config.enableLogging = true;
    config.logLevel = 4;

    // Set session timeout (in seconds)
    config.sessionTimeout = 60.0;

    // Initialize SDK
    Singular.start(config);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

Exemplo de configuração avançada

Configure vários recursos do SDK durante a inicialização, definindo propriedades adicionais no objeto SingularConfig antes de chamar start().

Dart
import 'package:flutter/material.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';
import 'package:singular_flutter_sdk/singular_link_params.dart';
import 'package:singular_flutter_sdk/singular_global_property.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initializeSingularSDK();
  }

  void initializeSingularSDK() {
    // Create configuration with credentials
    SingularConfig config = SingularConfig(
      'YOUR_SDK_KEY',
      'YOUR_SDK_SECRET'
    );

    // User identification
    config.customUserId = 'user_123456';

    // Privacy settings
    config.limitDataSharing = false;
    
    // Deep linking handler
    config.singularLinksHandler = (SingularLinkParams params) {
      print('Deep link received: ${params.deeplink}');
      print('Passthrough params: ${params.passthrough}');
      print('Is deferred: ${params.isDeferred}');
      // Handle navigation based on deep link
    };

    // Short link timeout
    config.shortLinkResolveTimeOut = 10.0;

    // Facebook integration
    config.facebookAppId = 'YOUR_FACEBOOK_APP_ID';

    // SKAdNetwork settings (iOS)
    config.skAdNetworkEnabled = true;
    config.manualSkanConversionManagement = false;
    config.waitForTrackingAuthorizationWithTimeoutInterval = 30;

    // Conversion value callbacks (iOS)
    config.conversionValueUpdatedCallback = (int conversionValue) {
      print('Conversion value updated: $conversionValue');
    };

    config.conversionValuesUpdatedCallback = (int cv, int coarse, bool lock) {
      print('Fine: $cv, Coarse: $coarse, Locked: $lock');
    };

    // Global properties
    config.globalProperties = [
      SingularGlobalProperty('app_version', '2.5.0', true),
      SingularGlobalProperty('user_tier', 'premium', false)
    ];

    // Debugging
    config.enableLogging = true;
    config.logLevel = 4;

    // Session timeout
    config.sessionTimeout = 60.0;

    // Initialize SDK
    Singular.start(config);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

Referência de configuração: Para obter uma lista completa das opções de configuração disponíveis, consulte a Referência de configuração do SDK do Flutter.

Crítico: NÃO use a chave de API do Singular Reporting. Use apenas as credenciais específicas do SDK na página Integração do SDK. O uso de credenciais erradas impede que os dados cheguem ao Singular.