akross_artemis_sdk 4.0.1
akross_artemis_sdk: ^4.0.1 copied to clipboard
Pocket Artemis SDK
Akross Artemis Ads SDK v4.0.0 - Flutter #
SDK Flutter para integração com o sistema de anúncios Akross Artemis. Este pacote fornece uma interface simples e eficiente para gerenciar anúncios em aplicações Flutter.
🚀 Características #
- ✅ Inicialização simples do SDK com configuração automática
- ✅ Gerenciamento de estado da inicialização e usuário
- ✅ Configuração flexível de usuário e headers customizados
- ✅ Sistema de logging integrado com níveis de debug
- ✅ Persistência de configurações automática
- ✅ Compatibilidade total com Android, iOS e Web
- ✅ Display Ads com waterfall programático
- ✅ Interstitial Ads com fallback de imagem
- ✅ Tracking de eventos com retry automático
- ✅ Classes utilitárias para dimensões, URLs e eventos
Instalação #
Adicione ao seu pubspec.yaml:
dependencies:
akross_artemis_sdk: ^4.0.1
📱 Uso Básico #
1. Inicialização #
import 'package:akross_artemis_sdk/akross_artemis_sdk.dart';
final aaManager = AAManager();
// Configurar o SDK
final config = SDKConfig(
baseUrl: 'https://ads.timfun.com.br/adserver/',
debugMode: true,
timeout: 10000,
appLovinSdkKey: 'YOUR_APPLOVIN_SDK_KEY', // Opcional
testMode: true,
// appId e appVersion são opcionais - serão detectados automaticamente
// appId: 'com.example.myapp', // Opcional
// appVersion: '1.0.0', // Opcional
);
await aaManager.initialize(config);
Configuração de SDKs de Anúncios
O SDK suporta inicialização automática do Google Ads e AppLovin MAX:
⚠️ Importante: O Google Ad Manager App ID deve estar no AndroidManifest.xml:
<!-- android/app/src/main/AndroidManifest.xml -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-XXXXXXXXXX~XXXXXXXXXX"/>
// Configuração com Google Ads (App ID no manifest) + AppLovin MAX
final config = SDKConfig(
baseUrl: 'https://ads.timfun.com.br/adserver/',
debugMode: true,
appLovinSdkKey: 'YOUR_APPLOVIN_SDK_KEY', // Opcional
testMode: true,
);
// Apenas Google Ads (sem AppLovin)
final config = SDKConfig(
baseUrl: 'https://ads.timfun.com.br/adserver/',
debugMode: true,
testMode: true,
);
Detecção Automática de App ID e Versão
O SDK pode detectar automaticamente o appId e appVersion do app hospedeiro:
// Detecção automática (recomendado)
final config = SDKConfig(
baseUrl: 'https://ads.timfun.com.br/adserver/',
debugMode: true,
// appId e appVersion serão obtidos automaticamente do package_info
);
// Ou especificar manualmente
final config = SDKConfig(
baseUrl: 'https://ads.timfun.com.br/adserver/',
debugMode: true,
appId: 'com.example.myapp',
appVersion: '1.0.0',
);
2. Gerenciamento de Usuário #
// Definir ID do usuário
await aaManager.setUserId('user123', advertisingId: 'ad456');
// Obter ID do usuário
final userId = await aaManager.getUserId();
// Obter dados completos do usuário
final userData = await aaManager.getUserData();
3. Headers Customizados #
// Definir headers customizados
await aaManager.setCustomHeaders({
'Authorization': 'Bearer token123',
'X-Custom-Header': 'value',
});
// Obter headers customizados
final headers = await aaManager.getCustomHeaders();
// Remover headers customizados
await aaManager.removeCustomHeaders();
4. Debug e Informações #
// Verificar se o SDK está inicializado
final isInitialized = aaManager.isInitialized;
// Obter informações de debug
final debugInfo = await aaManager.getDebugInfo();
print(debugInfo);
5. Limpeza #
// Limpar todas as configurações
await aaManager.clearAll();
🎯 Tipos de Anúncios #
Display Ads (Banner) #
// Widget para exibir display ads com waterfall
AkrossDisplayAd(
zoneId: 'your-zone-id',
adSize: AAMediaSize.SMALL, // SMALL, MEDIUM, ANCHOR, INLINE
onAdShow: () => print('Anúncio exibido'),
onAdError: (error) => print('Erro: $error'),
onAdClicked: () => print('Anúncio clicado'),
)
Tamanhos disponíveis:
AAMediaSize.SMALL: Banner pequeno (90-120px altura)AAMediaSize.MEDIUM: Banner médio (320-355px altura)AAMediaSize.ANCHOR: Banner adaptativo ancorado (50-100px altura)AAMediaSize.INLINE: Banner adaptativo inline (50-250px altura)
Interstitial Ads #
// Exibir interstitial com waterfall
await AAInterstitialAdHelper.handle(
'your-zone-id',
context: context,
onAdShow: () => print('Interstitial exibido'),
onAdDismiss: () => print('Interstitial fechado'),
onAdError: (error) => print('Erro: $error'),
onAdClicked: () => print('Interstitial clicado'),
);
🔧 Classes Utilitárias #
AdDimensionsHelper #
// Obter constraints para anúncios
final constraints = AdDimensionsHelper.getConstraints(
AAMediaSize.SMALL,
context
);
UrlHelper #
// Abrir URLs
UrlHelper.openUrl('https://example.com');
// Validar URLs
bool isValid = UrlHelper.isValidUrl('https://example.com');
EventTrackingHelper #
// Enviar eventos de tracking
EventTrackingHelper.sendEvent(
EventConstants.impression,
logger,
currentMedia: currentMedia,
);
Fluxo de Eventos Esperados #
Display Ads (Banner) #
Cenário 1: Sucesso com Anúncio Programático
waterfall-start → impression → click
Cenário 2: No Fill + Fallback
waterfall-start → prog-ad-no-fill → fallback-req → impression_nffb → click_nffb
Cenário 3: Erro de Conexão + Fallback
waterfall-start → prog-conn-error → fallback-req → impression_nffb → click_nffb
Cenário 4: Erro de Anúncio + Fallback
waterfall-start → prog-ad-error → fallback-req → impression_nffb → click_nffb
Cenário 5: Falha Total (Sem Fallback)
waterfall-start → prog-ad-no-fill → prog-conn-error → (sem eventos)
Interstitial Ads #
Cenário 1: Sucesso com Anúncio Programático
waterfall-start → impression → click → dismiss
Cenário 2: No Fill + Fallback
waterfall-start → prog-ad-no-fill → fallback-req → impression_nffb → click_nffb → dismiss
Cenário 3: Erro de Conexão + Fallback
waterfall-start → prog-conn-error → fallback-req → impression_nffb → click_nffb → dismiss
Cenário 4: Erro de Anúncio + Fallback
waterfall-start → prog-ad-error → fallback-req → impression_nffb → click_nffb → dismiss
Cenário 5: Falha Total (Sem Fallback)
waterfall-start → prog-ad-no-fill → prog-conn-error → (sem eventos)
Eventos de Tracking #
Eventos de Waterfall:
waterfall-start: Início do processo de waterfallprog-ad-no-fill: Anúncio programático sem fillprog-ad-error: Erro no anúncio programáticoprog-conn-error: Erro de conexãofallback-req: Requisição de fallback
Eventos de Impressão:
impression: Anúncio programático exibidoimpression_nffb: Anúncio fallback exibido (no fill + fallback)
Eventos de Interação:
click: Clique em anúncio programáticoclick_nffb: Clique em anúncio fallbackdismiss: Fechamento de interstitial
Fluxo de Dados do Dispositivo #
O SDK coleta automaticamente dados do dispositivo para melhorar a segmentação:
// Dados básicos (sempre coletados)
{
"deviceId": "a1b2c3d4e5f6g7h8", // Android ID ou iOS identifierForVendor
"sdkVersion": "4.0.1", // Versão do SDK (centralizada em AAManager.getSdkVersion())
"os": "ANDROID", // Sistema operacional
"brand": "Samsung", // Marca do dispositivo
"model": "SM-G973F", // Modelo do dispositivo
"manufacturer": "Samsung", // Fabricante
"hardware": "Android 13", // Hardware
"product": "android", // Produto do sistema
"osVersion": "13", // Versão do OS
"eventDate": "1760709937741" // Timestamp
}
// Dados opcionais (apenas se permissões concedidas)
{
"battery": "85", // Nível da bateria (0-100%)
"carrier": "Vivo", // Nome da operadora
"lat": "-23.5505", // Latitude
"long": "-46.6333" // Longitude
}
Fluxo de Coleta de Dados:
- Inicialização: SDK coleta dados básicos do dispositivo
- Verificação de Permissões: Verifica se tem permissões para dados sensíveis
- Coleta Condicional: Coleta dados extras apenas se tiver permissões
- Envio: Inclui dados no contexto das requisições de anúncios
Fluxo de Waterfall #
O SDK implementa um sistema de waterfall para otimizar a entrega de anúncios:
// 1. Requisição inicial
POST /campaign/v3/{zoneId}?size={size}
{
"userId": "user123",
"context": { /* dados do dispositivo */ }
}
// 2. Resposta do servidor
{
"waterfall": [
{
"type": "PROGRAMMATIC",
"network": "GOOGLE_ADS",
"adUnitId": "ca-app-pub-xxx/xxx",
"priority": 1
},
{
"type": "PROGRAMMATIC",
"network": "APPLOVIN_MAX",
"adUnitId": "xxx",
"priority": 2
},
{
"type": "FALLBACK",
"imageUrl": "https://example.com/fallback.jpg",
"clickUrl": "https://example.com",
"priority": 3
}
]
}
// 3. Execução do waterfall
// ✅ Tenta Google Ads (prioridade 1)
// ❌ Falha → Tenta AppLovin MAX (prioridade 2)
// ❌ Falha → Exibe fallback (prioridade 3)
Exemplo Completo #
Veja o arquivo example/lib/main.dart para um exemplo completo de uso.
📁 Estrutura do Projeto #
lib/
├── src/
│ ├── core/ # Núcleo do SDK
│ │ ├── aa_manager.dart # Classe principal do SDK
│ │ ├── config/
│ │ │ └── sdk_config.dart # Configuração do SDK
│ │ ├── model/ # Modelos de dados
│ │ └── network/ # Camada de rede
│ ├── modules/ # Módulos de anúncios
│ │ ├── display/ # Display ads
│ │ │ ├── akross_display_ad.dart
│ │ │ └── widgets/
│ │ └── interstitial/ # Interstitial ads
│ │ ├── interstitial_helper.dart
│ │ └── widgets/
│ ├── ads/ # Gerenciadores de anúncios
│ │ ├── google_ads_manager.dart
│ │ └── applovin_manager.dart
│ ├── ads_core/ # Core de anúncios
│ │ └── ads_manager.dart
│ └── utils/ # Utilitários
│ ├── logger.dart # Sistema de logging
│ ├── preferences_util.dart # Persistência
│ ├── ad_dimensions_helper.dart # Dimensões
│ ├── url_helper.dart # URLs
│ └── event_tracking_helper.dart # Eventos
└── akross_artemis_sdk.dart # Arquivo principal de exportação
Compatibilidade #
- Flutter: >=1.17.0
- Dart: ^3.6.0
- Android: API 21+
- iOS: 11.0+
- Web: Todas as versões modernas
📦 Dependências #
Principais #
shared_preferences: Para persistência de dadoshttp: Para requisições HTTPjson_annotation: Para serialização JSONpackage_info_plus: Para informações do app
Anúncios #
google_mobile_ads: Google Mobile Adsapplovin_max: AppLovin MAX SDK
Utilitários #
url_launcher: Para abrir URLsdevice_info_plus: Informações do dispositivo
Contribuição #
Este SDK é compatível com as versões JavaScript, Android e iOS do Akross Artemis SDK, mantendo a mesma interface e funcionalidades.