Integrar o SDK
Saiba como inicializar e iniciar o SDK do iOS.
Antes de começar
Get started with our SDK integration wizard
- Antes de integrar, você deve Instalar o SDK.
- Este documento contém exemplos de implementações. Certifique-se de substituir o seguinte:
<YOUR_DEV_KEY>
: A chave do desenvolvedor da AppsFlyer.<APPLE_APP_ID>
: o ID do aplicativo da Apple (sem o prefixoid
).- Placeholders adicionais, quando necessário.
Inicializando o SDK do iOS
Etapa 1: importar dependências
Importar AppsFlyerLib
:
// AppDelegate.h
#import <AppsFlyerLib/AppsFlyerLib.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
}
Etapa 2: inicializar o SDK
In didFinishLaunchingWithOptions
configure seu ID do aplicativo Apple e a chave do desenvolvedor da AppsFlyer:
[[AppsFlyerLib shared] setAppsFlyerDevKey:@"<YOUR_DEV_KEY>"];
[[AppsFlyerLib shared] setAppleAppID:@"<APPLE_APP_ID>"];
AppsFlyerLib.shared().appsFlyerDevKey = "<YOUR_DEV_KEY>"
AppsFlyerLib.shared().appleAppID = "<APPLE_APP_ID>"
Iniciando o SDK do iOS
In applicationDidBecomeActive
, call start
:
[[AppsFlyerLib shared] start];
func applicationDidBecomeActive(_ application: UIApplication) {
AppsFlyerLib.shared().start()
// ...
}
Add SceneDelegate support
OPCIONAL
Faça o seguinte somente se você usar SceneDelegate
s:
In didFinishLaunchingWithOptions
, adicione um observador UIApplicationDidBecomeActiveNotification
e configure-o para executar start
:
@implementation AppDelegate
// SceneDelegate support - start AppsFlyer SDK
- (void)sendLaunch:(UIApplication *)application {
[[AppsFlyerLib shared] start];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
// SceneDelegate support
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendLaunch:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
// ...
return YES;
}
// ...
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
// SceneDelegate support
NotificationCenter.default.addObserver(self, selector: NSSelectorFromString("sendLaunch"), name: UIApplicationdidBecomeActiveNotification, object: nil)
return true
}
// SceneDelegate support - start AppsFlyer SDK
@objc func sendLaunch() {
AppsFlyerLib.shared().start()
}
// ...
}
Start with completion handler
OPCIONAL
Para confirmar que o SDK foi iniciado com sucesso e notificou os servidores da AppsFlyer, chame start
com um manipulador de conclusão. Você pode aplicar a lógica para lidar com o sucesso ou a falha da inicialização do SDK.
[[AppsFlyerLib shared] startWithCompletionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
if (error) {
NSLog(@"%@", error);
return;
}
if (dictionary) {
NSLog(@"%@", dictionary);
return;
}
}];
AppsFlyerLib.shared()?.start(completionHandler: { (dictionary, error) in
if (error != nil){
print(error ?? "")
return
} else {
print(dictionary ?? "")
return
}
})
Exemplo completo
#import "AppDelegate.h"
#import <AppsFlyerLib/AppsFlyerLib.h>
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
// Start the AppsFlyer SDK
- (void)sendLaunch:(UIApplication *)application {
[[AppsFlyerLib shared] start];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/** APPSFLYER INIT **/
[AppsFlyerLib shared].appsFlyerDevKey = @"<YOUR_DEV_KEY>";
[AppsFlyerLib shared].appleAppID = @"<APPLE_APP_ID>";
/* Uncomment the following line to see AppsFlyer debug logs */
// [AppsFlyerLib shared].isDebug = true;
// SceneDelegate support
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendLaunch:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
if (@available(iOS 10, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
}];
}
else {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
[[UIApplication sharedApplication] registerForRemoteNotifications];
return YES;
}
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AppsFlyerLib.shared().appsFlyerDevKey = "<YOUR_DEV_KEY>"
AppsFlyerLib.shared().appleAppID = "<APPLE_APP_ID>"
/* Uncomment the following line to see AppsFlyer debug logs */
// AppsFlyerLib.shared().isDebug = true
// SceneDelegate support
NotificationCenter.default.addObserver(self, selector: NSSelectorFromString("sendLaunch"), name: UIApplication.didBecomeActiveNotification, object: nil)
return true
}
// SceneDelegate support
@objc func sendLaunch() {
AppsFlyerLib.shared().start()
}
// ...
}
Definindo o ID de usuário cliente
OPCIONAL
O ID de usuário cliente (CUID) é um identificador de usuário exclusivo criado fora do SDK pelo proprietário do aplicativo. Se disponibilizado para o SDK, ele pode ser associado a instalações e outros eventos in-app. Esses eventos marcados com CUID podem ter referência cruzada com dados do usuário de outros dispositivos e aplicativos.
Set the CUID
Para definir o CUID:
[AppsFlyerLib shared].customerUserID = @"my user id";
AppsFlyerLib.shared().customerUserID = "my user id"
Observação
The Customer User ID must be set with every app launch.
Associate the CUID with the install event
If it’s important for you to associate the install event with the CUID, you should set to set the customerUserId
antes de chamar o método start
. Isso ocorre porque start
envia o evento de instalação para a AppsFlyer. Se o CUID for configurado após a chamada start
, ele não será associado ao evento de instalação.
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Your custom logic of retrieving CUID
NSString *customUserId = [[NSUserDefaults standardUserDefaults] stringForKey:@"customerUserId"];
if (customUserId != nil && ![customUserId isEqual: @""]) {
// Set CUID in AppsFlyer SDK for this session
[AppsFlyerLib shared].customerUserID = customUserId;
// Start
[[AppsFlyerLib shared] start];
}
}
func applicationDidBecomeActive(_ application: UIApplication) {
// your logic to retrieve CUID
let customUserId = UserDefaults.standard.string(forKey: "customUserId")
if(customUserId != nil && customUserId != ""){
// Set CUID in AppsFlyer SDK for this session
AppsFlyerLib.shared().customerUserID = customUserId
AppsFlyerLib.shared().start() // Start
}
}
Log sessions
The SDK sends an af_app_opened
message whenever the app is opened or brought to the foreground, providing that start
is called in the didBecomeActive
lifecycle event method. Before the message is sent, the SDK makes sure that the time passed since sending the last message is not smaller than a predefined interval.
Setting the time interval between app launches
Configurado minTimeBetweenSessions
to the minimal time interval that must lapse between two af_app_opened
messages. The default interval is 5 seconds.
Suporte para iOS 14
A seguir estão os guias sobre como configurar o suporte para os recursos do iOS 14+.
Enabling App Tracking Transparency (ATT) support
A partir do iOS 14.5, o acesso ao IDFA é regido pela estrutura ATT.
A ativação da compatibilidade ATT no SDK lida com a coleta de IDFA em dispositivos com iOS 14.5
+ instalado.
Atenção
Somente chame
waitForATTUserAuthorization
se você pretende chamarrequestTrackingAuthorization
em algum lugar do seu aplicativo.
Etapa 1: Configurar waitForATTUserAuthorization
Ao Inicializar o SDK, antes de chamar start
In applicationDidBecomeActive
, call waitForATTUserAuthorization
:
[[AppsFlyerLib shared] waitForATTUserAuthorizationWithTimeoutInterval:60];
AppsFlyerLib.shared().waitForATTUserAuthorization(timeoutInterval: 60)
Configurado timeoutInterval
de tal forma que os usuários do aplicativo têm tempo suficiente para ver e interagir com o prompt ATT. Alguns exemplos:
- Se o prompt da ATT é indicado na inicialização do aplicativo — um intervalo de 60 segundos deve ser suficiente
- Se o prompt ATT for exibido após um tutorial que leva aproximadamente 2 minutos para ser concluído, um intervalo de 120 segundos deve ser suficiente.
Etapa 2: Chamar requestTrackingAuthorization
Somente chame requestTrackingAuthorization
onde você deseja exibir o prompt:
- (void)didBecomeActiveNotification {
// start is usually called here:
// [[AppsFlyerLib shared] start];
if @available(iOS 14, *) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
NSLog(@"Status: %lu", (unsigned long)status);
}];
}
}
@objc func didBecomeActiveNotification() {
// start is usually called here:
// AppsFlyerLib.shared().start()
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { (status) in
switch status {
case .denied:
print("AuthorizationSatus is denied")
case .notDetermined:
print("AuthorizationSatus is notDetermined")
case .restricted:
print("AuthorizationSatus is restricted")
case .authorized:
print("AuthorizationSatus is authorized")
@unknown default:
fatalError("Invalid authorization status")
}
}
}
}
Observação
- Você precisa importar a estrutura
AppTrackingTransparency
para chamarrequestTrackingAuthorization
.- De acordo com a documentação da Apple:
requestTrackingAuthorization
é chamado apenas se o aplicativo estiver no estadoUIApplicationStateActive
.requestTrackingAuthorization
não pode ser invocado a partir das Extensões de Aplicativo.
Customizing the ATT consent dialog
A caixa de diálogo de consentimento da ATT pode ser personalizada modificando o Xcode do seu projeto info.plist
:
Para obter instruções detalhadas, consulte a documentação da Apple.
Attributing App Clips
A atribuição do Apple App Clips foi introduzida no SDK do iOS V6.0.8
. Consulte nosso guia de integração do App Clips para obter instruções detalhadas.
Sending SKAN postback copies to AppsFlyer
iOS 15
Configure seu aplicativo para enviar cópias de postback para a AppsFlyer.
Para registrar o endpoint da AppsFlyer:
- Adicione o
NSAdvertisingAttributionReportEndpoint
para oinfo.plist
. - Defina o valor da chave como
https://appsflyer-skadnetwork.com/
.
De acordo com a Apple, você pode definir apenas um ponto final. Cópias de postbacks recebidos estão disponíveis no relatório de cópia de postbacks.
Ativação do modo de depuração
Você pode habilitar os logs de depuração definindo isDebug como true
:
[AppsFlyerLib shared].isDebug = true;
AppsFlyerLib.shared().isDebug = true
Observação
Para ver logs de depuração completos, certifique-se de definir
isDebug
antes de invocar outros métodos do SDK.Veja o exemplo.
Aviso
Para evitar o vazamento de informações confidenciais, verifique se os registros de depuração estão desativados antes de distribuir o aplicativo.
Testando a integração
Para obter instruções detalhadas de teste de integração, consulte o guia de teste de integração do SDK do iOS.
Atualizado 3 meses atrás