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
-
Atualize pubspec.yaml: Adicione a dependência do Singular SDK do Flutter ao arquivo
pubspec.yamldo seu projeto:dependencies: flutter: sdk: flutter singular_flutter_sdk: ^1.8.0 -
Instalar dependências: Navegue até o diretório do seu projeto no terminal e execute:
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+.
-
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
iosdo seu projeto Flutter. -
Abra
Runner.xcworkspaceno Xcode (use.xcworkspacese você usar CocoaPods, caso contrário, use.xcodeproj).
-
Navegue até à pasta
-
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.frameworke 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.
<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:
<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:
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.
-
Localizar o arquivo ProGuard: Navegue até
android/app/proguard-rules.prono seu projeto Flutter. -
Adicionar regras de manutenção: Anexe as seguintes regras para preservar as classes do SDK:
# 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).
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
- 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.
-
Criar configuração: Instanciar um objeto
SingularConfigcom suas credenciais. - Adicionar configuração: Opcionalmente, configure o comportamento do SDK usando definidores de propriedade (consulte Referência de configuração).
-
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.
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().
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.