Veja 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 estes passos pré-requisitos antes de instalar o Singular SDK do Flutter para garantir um processo de integração sem problemas.
Pré-requisitos obrigatórios:
- Concluir as etapas de planeamento: Siga o guia em Integrar um SDK da Singular: Planeamento e Pré-requisitos. Estas etapas são obrigatórias para qualquer integração do SDK da Singular.
- Versão do Flutter: Verifique se possui uma aplicação Flutter funcional com o SDK do Flutter instalado.
- Credenciais do SDK: Obtenha a sua Chave e Segredo do SDK na plataforma Singular em Ferramentas de Desenvolvedor > Integração do SDK > Chaves do SDK.
Instalação
Instalação do pacote SDK
Adicione o SDK Singular Flutter ao seu projeto utilizando o gestor de dependências pubspec.yaml. O SDK fornece ligações Dart aos SDKs nativos da Singular para iOS e Android.
Adicionar dependência do SDK
-
Atualize o pubspec.yaml: Adicione a dependência do SDK Singular Flutter
ao ficheiro `
pubspec.yaml` do seu projeto:dependencies: flutter: sdk: flutter singular_flutter_sdk: ^1.8.0 -
Instalar dependências: Navegue até ao 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 AdServices para o rastreamento de atribuição no iOS.
Adicionar a estrutura AdServices
A estrutura AdServices é necessária para a atribuição do Apple Search Ads e a integração com o SKAdNetwork no iOS 14.3+.
-
Navegue até ao 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 o `
Runner.xcworkspace` no Xcode (use.xcworkspacese utilizar o 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 o separador Geral.
- Percorra até à secção Frameworks, Libraries, and EmbeddedContent .
- Clique no botão +.
-
Procure por «
AdServices.framework» e adicione-o. - Defina o estado 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 versões do iOS que não incluem esta estrutura (iOS 14.2 e anteriores).
Configuração do Android
Configure os seus ficheiros de compilação do Android para adicionar as permissões e dependências necessárias para o funcionamento adequado do SDK.
Adicionar permissões necessárias
Adicione estas permissões ao seu ficheiro AndroidManifest.xml sob
a tag <manifest> para ativar 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
Kids SDK.
Esta permissão é necessária para a recolha do 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 rastreamento de referência 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 desativou as dependências transitivas para o Singular SDK na sua configuração do 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 compilar APKs de lançamento, o ProGuard (ou R8) pode remover ou ofuscar classes do SDK . Adicione estas regras de retenção para preservar a funcionalidade do Singular.
Por que isto é importante: O ProGuard está ativado por predefinição nas compilações de lançamento do Flutter para Android. Sem regras de preservação adequadas, o SDK poderá não funcionar corretamente em produção.
-
Localize o ficheiro ProGuard: Navegue até
android/app/proguard-rules.prono seu projeto Flutter. -
Adicione regras de preservação: acrescente 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 nas suas regiões de operação, incluindo o RGPD, a CCPA, a COPPA e outras ao implementar o SDK da Singular. Para obter orientações, consulte Práticas de aceitação e recusa do SDK.
Inicialize o SDK da Singular sempre que a sua aplicação for iniciada. A inicialização do SDK é essencial para todas as funcionalidades de atribuição da Singular e cria uma nova sessão para calcular métricas de retenção de utilizadores.
Importar classes do SDK
Importe as classes do SDK da Singular no início do seu ficheiro principal da aplicação
(normalmente main.dart).
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';
Inicialize o SDK
Crie um objeto ` SingularConfig ` com as suas credenciais do SDK,
configure funcionalidades opcionais e inicialize o SDK utilizando o
método ` start() `.
Inicialização básica
- Obter credenciais: Inicie sessão na sua conta Singular e aceda a Ferramentas do Desenvolvedor > Integração do SDK > Chaves do SDK para encontrar a sua Chave e Segredo do SDK.
-
Criar configuração: Instancie um
objeto
SingularConfigcom as suas credenciais. - Adicione a configuração: Opcionalmente, configure o comportamento do SDK usando definidores de propriedades (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 da sua aplicação, normalmente dentro do
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árias funcionalidades 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 Flutter.
Importante: NÃO utilize a chave da API de relatórios da Singular . Utilize apenas as credenciais específicas do SDK disponíveis na página de integração do SDK . A utilização de credenciais incorretas impede que os dados cheguem à Singular.
Configuração avançada
Necessário para a medição de conversão integrada do Google Ads no iOS
Se a sua aplicação executa campanhas do Google Ads direcionadas a utilizadores do iOS 14.5+, são necessárias etapas adicionais de configuração do SDK para suportar a Medição de Conversão Integrada do iOS (ICM). Isto inclui:
- Integrar o SDK de medição no dispositivo (ODM) do Google
- Atualização para o SDK do Singular para iOS v12.8.1+ (ou v5.5.0+ para Unity, v1.8.0+ para Flutter/Cordova, v3.9.0+ para React Native)
-
Adicionar o sinalizador do ligador «
-ObjC» e ativar «enableOdmWithTimeoutInterval» emSingularConfig
Nota: A ativação de enableOdmWithTimeoutInterval
atrasa a inicialização do SDK
e pode adiar os callbacks de deep link. Conclua esta configuração
durante a implementação inicial do SDK para evitar trabalho adicional.
Consulte os requisitos técnicos completos do iOS ICM