SDK do iOS - Referência de métodos de configuração
Este documento fornece uma referência abrangente para todas as opções de configuração disponíveis no SDK da Singular para aplicativos iOS. O objeto SingularConfig permite personalizar o comportamento do SDK, incluindo configurações de rastreamento, opções de atribuição, controles de privacidade e mais. Cada propriedade de configuração é apresentada com uma descrição, assinatura e exemplos práticos de uso.
appGroupName
Propriedade SingularConfig.appGroupName
Define o nome do grupo de aplicativos para compartilhar dados entre o aplicativo principal e as extensões de aplicativo. Isso é necessário ao usar extensões de aplicativo com o SDK.
Assinatura
@property (strong) NSString *appGroupName;
Exemplo de uso
// Set app group name for app extensions
config.appGroupName = "group.com.yourcompany.yourapp"
// Set app group name for app extensions
config.appGroupName = @"group.com.yourcompany.yourapp";
brandedDomains
Propriedade SingularConfig.brandedDomains
Define domínios de marca para atribuição web-para-app. Isso permite especificar domínios personalizados que devem ser rastreados para fins de atribuição.
Definir esta propriedade substitui quaisquer domínios de marca configurados anteriormente. Passe a lista completa em uma única atribuição em vez de adicionar.
Assinatura
@property (strong) NSArray *brandedDomains;
Exemplo de uso
// Set branded domains for web-to-app attribution
config.brandedDomains = ["yourcompany.com", "go.yourcompany.com"]
// Set branded domains for web-to-app attribution
config.brandedDomains = @[@"yourcompany.com", @"go.yourcompany.com"];
clipboardAttribution
Recurso Enterprise: O DDL baseado em área de transferência requer o WebSDK da Singular, que é um Recurso Enterprise. Entre em contato com seu Customer Success Manager para habilitar este recurso para sua conta.
Propriedade SingularConfig.clipboardAttribution
Habilita a atribuição por área de transferência para o SDK. Quando habilitada, o SDK verificará a área de transferência do dispositivo em busca de links de atribuição durante a inicialização. O valor padrão é
NO
.
Assinatura
@property (assign) BOOL clipboardAttribution;
Exemplo de uso
// Enable clipboard attribution
config.clipboardAttribution = true
// Enable clipboard attribution
config.clipboardAttribution = YES;
conversionValueUpdatedCallback
Propriedade SingularConfig.conversionValueUpdatedCallback
Define uma função de callback a ser chamada quando o valor de conversão do SKAdNetwork for atualizado. Isso permite que você reaja às mudanças no valor de conversão.
Assinatura
@property (copy) void(^conversionValueUpdatedCallback)(NSInteger);
Exemplo de uso
// Set conversion value updated callback
config.conversionValueUpdatedCallback = { conversionValue in
print("Conversion value updated to: \(conversionValue)")
// Update UI or take other actions based on the new conversion value
}
// Set conversion value updated callback
config.conversionValueUpdatedCallback = ^(NSInteger conversionValue) {
NSLog(@"Conversion value updated to: %ld", (long)conversionValue);
// Update UI or take other actions based on the new conversion value
};
conversionValuesUpdatedCallback
Propriedade SingularConfig.conversionValuesUpdatedCallback
Define uma função de callback a ser chamada quando os valores de conversão do SKAdNetwork 4.0 forem atualizados. Isso é específico para iOS 16.1+ e permite que você reaja a mudanças nos valores fine, coarse e lock.
Assinatura
@property (copy) void(^conversionValuesUpdatedCallback)(NSNumber *, NSNumber *, BOOL);
Exemplo de uso
// Set conversion values updated callback for SKAdNetwork 4.0
config.conversionValuesUpdatedCallback = { fineValue, coarseValue, lock in
print("Conversion values updated - Fine: \(fineValue ?? 0), Coarse: \(coarseValue ?? 0), Lock: \(lock)")
// Update UI or take other actions based on the new conversion values
}
// Set conversion values updated callback for SKAdNetwork 4.0
config.conversionValuesUpdatedCallback = ^(NSNumber *fineValue, NSNumber *coarseValue, BOOL lock) {
NSLog(@"Conversion values updated - Fine: %@, Coarse: %@, Lock: %d",
fineValue, coarseValue, lock);
// Update UI or take other actions based on the new conversion values
};
customSdid
Propriedade SingularConfig.customSdid
Recurso Enterprise: Define um SDID (Singular Device ID) personalizado. Isso permite fornecer seu próprio identificador de dispositivo em vez de usar o gerado pela Singular.
Assinatura
@property (strong) NSString *customSdid;
Exemplo de uso
// Set custom SDID
config.customSdid = "custom-device-id-12345"
// Set custom SDID
config.customSdid = @"custom-device-id-12345";
deviceAttributionCallback
Propriedade SingularConfig.deviceAttributionCallback
Recurso BETA:
Define uma função de callback a ser invocada quando os dados de atribuição do dispositivo estiverem disponíveis na resposta de
/start
. O callback é despachado em uma fila em segundo plano, portanto despache qualquer trabalho de UI para a thread principal.
| Chave | Tipo | Notas |
|---|---|---|
network
|
NSString | Fonte de atribuição. "organic" para instalações não atribuídas. |
campaign_id
|
NSString | Presente apenas quando atribuído. |
campaign_name
|
NSString | Presente apenas quando atribuído. |
click_timestamp
|
NSNumber (epoch microseconds) | Presente apenas quando atribuído. Divida por 1.000.000 para obter segundos. |
O callback só é invocado quando a resposta de
/start
contém um objeto
attribution_info
. Para instalações orgânicas, apenas
network
é preenchido.
Assinatura
@property (copy) void(^deviceAttributionCallback)(NSDictionary *);
Exemplo de uso
// Set device attribution callback
config.deviceAttributionCallback = { attributionData in
guard let attributionData = attributionData else { return }
print("Attribution data received: \(attributionData)")
let network = attributionData["network"] as? String
let campaignId = attributionData["campaign_id"] as? String
let campaignName = attributionData["campaign_name"] as? String
let clickTimestamp = attributionData["click_timestamp"] as? NSNumber
// UI work must be dispatched to the main thread
DispatchQueue.main.async {
if let campaignName = campaignName {
self.showCampaignSpecificContent(campaignName)
}
}
}
// Set device attribution callback
config.deviceAttributionCallback = ^(NSDictionary *attributionData) {
if (!attributionData) { return; }
NSLog(@"Attribution data received: %@", attributionData);
NSString *network = attributionData[@"network"];
NSString *campaignId = attributionData[@"campaign_id"];
NSString *campaignName = attributionData[@"campaign_name"];
NSNumber *clickTimestamp = attributionData[@"click_timestamp"];
// UI work must be dispatched to the main thread
dispatch_async(dispatch_get_main_queue(), ^{
if (campaignName) {
[self showCampaignSpecificContent:campaignName];
}
});
};
didSetSdidHandler
Propriedade SingularConfig.didSetSdidHandler
Recurso Enterprise:
Define uma função de callback a ser chamada quando o SDID (Singular Device ID) for definido após você atribuir um via
customSdid. O argumento
result
é a string do SDID que acabou de ser armazenada.
Normalmente usado em conjunto com
sdidReceivedHandler. Configure ambos ao gerenciar um SDID personalizado para que você seja notificado tanto quando o SDK aceita um novo SDID quanto quando o SDK exibe um já existente.
Assinatura
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler didSetSdidHandler;
Exemplo de uso
// Set callback for when SDID is set
config.customSdid = "custom-device-id-12345"
config.didSetSdidHandler = { sdid in
print("SDID was set: \(sdid)")
// Perform any actions needed after SDID is set
}
// Set callback for when SDID is set
config.customSdid = @"custom-device-id-12345";
config.didSetSdidHandler = ^(NSString *sdid) {
NSLog(@"SDID was set: %@", sdid);
// Perform any actions needed after SDID is set
};
enableLogging
Propriedade SingularConfig.enableLogging
Habilita o registro (logging) do SDK. Útil para depuração e solução de problemas durante o desenvolvimento. Recomenda-se desabilitar o logging em builds de produção. O valor padrão é
NO
.
O logging permanece silencioso até que
enableLogging
seja definido como
YES
e
logLevel
seja definido como um valor acima de
SingularLogLevelNone
.
Assinatura
@property (assign) BOOL enableLogging;
Exemplo de uso
// Enable logging for debug builds
config.enableLogging = true
config.logLevel = .debug
// Enable logging for debug builds
config.enableLogging = YES;
config.logLevel = SingularLogLevelDebug;
enableOdmWithTimeoutInterval
Propriedade SingularConfig.enableOdmWithTimeoutInterval
Define o intervalo de timeout em segundos para a obtenção do Google ODM (On-Device Measurement). O ODM é o sistema de medição de anúncios móveis do Google que expõe dados de atribuição de instalação no dispositivo. O valor padrão é
0
(obtenção de ODM desabilitada).
Assinatura
@property (assign) NSInteger enableOdmWithTimeoutInterval;
Exemplo de uso
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5;
espDomains
Propriedade SingularConfig.espDomains
Define os domínios de ESP (Email Service Provider) para atribuição por e-mail. Isso permite especificar quais domínios de e-mail devem ser considerados para atribuição.
Assinatura
@property (strong) NSArray *espDomains;
Exemplo de uso
// Set ESP domains for email attribution
config.espDomains = ["mailchimp.com", "sendgrid.net", "campaign-monitor.com"]
// Set ESP domains for email attribution
config.espDomains = @[@"mailchimp.com", @"sendgrid.net", @"campaign-monitor.com"];
globalProperties
Propriedade SingularConfig.globalProperties
Fornece acesso somente leitura ao dicionário de propriedades globais. Isso contém todas as propriedades globais que foram definidas para a configuração.
Assinatura
@property (readonly) NSMutableDictionary *globalProperties;
Exemplo de uso
// Access global properties
print("Global properties: \(config.globalProperties)")
// Access global properties
NSLog(@"Global properties: %@", config.globalProperties);
initWithApiKey
Inicialização do SingularConfig
Inicializa um novo objeto SingularConfig com sua API key e secret. Este é o primeiro passo na configuração do SDK da Singular.
Assinatura
- (id)initWithApiKey:(NSString *)apikey andSecret:(NSString *)secret;
Exemplo de uso
// Create configuration object
let config = SingularConfig(apiKey: "SDK KEY", andSecret: "YOUR_SECRET")
// Create configuration object
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK KEY"
andSecret:@"YOUR_SECRET"];
launchOptions
Propriedade SingularConfig.launchOptions
Define o dicionário de launch options do app delegate. Isso é usado para processar deep links e outros dados de inicialização.
Assinatura
@property (strong) NSDictionary *launchOptions;
Exemplo de uso
// Set launch options from app delegate
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = SingularConfig(apiKey: "API_KEY", andSecret: "SECRET")
config.launchOptions = launchOptions
Singular.start(config)
return true
}
// Set launch options from app delegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"API_KEY"
andSecret:@"SECRET"];
config.launchOptions = launchOptions;
[Singular start:config];
return YES;
}
limitAdvertisingIdentifiers
Propriedade SingularConfig.limitAdvertisingIdentifiers
Habilita ou desabilita o uso de identificadores de publicidade. Esta opção afeta como o SDK coleta e usa identificadores de dispositivo para rastreamento e atribuição. O valor padrão é
NO
.
Esta propriedade é excluída da compilação do Singular Kids SDK (protegida por
#ifndef SINGULAR_KIDS). Se você estiver integrando o
Singular-Kids-SDK, esta propriedade não está disponível — o Kids SDK aplica automaticamente um tratamento de identificadores mais rigoroso.
Assinatura
@property (assign) BOOL limitAdvertisingIdentifiers;
Exemplo de uso
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = true
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = YES;
logLevel
Propriedade SingularConfig.logLevel
Define a verbosidade do logging do SDK. O logging também deve estar habilitado via
enableLogging
para que qualquer saída seja emitida. O valor padrão é
SingularLogLevelNone
(sem logging).
Níveis disponíveis (de
SingularLogLevel.h):
-
SingularLogLevelNone(0) — Sem logging -
SingularLogLevelError(1) — Apenas erros -
SingularLogLevelWarning(2) — Erros e avisos -
SingularLogLevelInfo(3) — Erros, avisos e informações -
SingularLogLevelDebug(4) — Todos os logs incluindo depuração -
SingularLogLevelVerbose(5) — O mais detalhado
Assinatura
@property (assign) SingularLogLevel logLevel;
Exemplo de uso
// Set verbose logging for detailed debugging
config.enableLogging = true
config.logLevel = .verbose
// Set verbose logging for detailed debugging
config.enableLogging = YES;
config.logLevel = SingularLogLevelVerbose;
manualSkanConversionManagement
Propriedade SingularConfig.manualSkanConversionManagement
Habilita o gerenciamento manual dos valores de conversão do SKAdNetwork. Quando habilitado, o SDK não atualizará automaticamente os valores de conversão, permitindo que você os controle manualmente.
Assinatura
@property (assign) BOOL manualSkanConversionManagement;
Exemplo de uso
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = true
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = YES;
openUrl
Propriedade SingularConfig.openUrl
Define a URL usada para abrir o aplicativo. Isso é usado para deep links de esquemas de URL personalizados.
Assinatura
@property (strong) NSURL *openUrl;
Exemplo de uso
// Set open URL for custom URL schemes
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let config = SingularConfig(apiKey: "API_KEY", andSecret: "SECRET")
config.openUrl = url
Singular.start(config)
return true
}
// Set open URL for custom URL schemes
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary *)options {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"API_KEY"
andSecret:@"SECRET"];
config.openUrl = url;
[Singular start:config];
return YES;
}
pushNotificationLinkPath
Propriedade SingularConfig.pushNotificationLinkPath
Define os caminhos para procurar deep links em payloads de notificações push. Isso ajuda o SDK a encontrar e processar links de atribuição em notificações push.
Assinatura
@property (strong) NSArray<NSArray<NSString*>*> *pushNotificationLinkPath;
Exemplo de uso
// Set push notification link paths
config.pushNotificationLinkPath = [
["data", "deeplink"],
["notification", "data", "url"],
["custom", "link"]
]
// Set push notification link paths
config.pushNotificationLinkPath = @[
@[@"data", @"deeplink"],
@[@"notification", @"data", @"url"],
@[@"custom", @"link"]
];
pushNotificationPayload
Propriedade SingularConfig.pushNotificationPayload
Define o payload da notificação push para atribuição. Isso permite que o SDK processe dados de notificações push durante a inicialização.
Assinatura
@property (strong) NSDictionary *pushNotificationPayload;
Exemplo de uso
// Set push notification payload
config.pushNotificationPayload = userInfo
// Set push notification payload
config.pushNotificationPayload = userInfo;
sdidReceivedHandler
Propriedade SingularConfig.sdidReceivedHandler
Recurso Enterprise:
Define uma função de callback a ser chamada quando o SDID (Singular Device ID) ficar disponível — incluindo SDIDs que foram armazenados anteriormente. O argumento
result
é a string do SDID.
Normalmente usado em conjunto com
didSetSdidHandler. Configure ambos ao gerenciar um SDID personalizado para que você seja notificado tanto quando o SDK aceita um novo SDID quanto quando o SDK exibe um já existente.
Assinatura
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler sdidReceivedHandler;
Exemplo de uso
// Set callback for when SDID is received
config.sdidReceivedHandler = { sdid in
print("SDID received: \(sdid)")
// Store or use the SDID as needed
self.storeDeviceIdentifier(sdid)
}
// Set callback for when SDID is received
config.sdidReceivedHandler = ^(NSString *sdid) {
NSLog(@"SDID received: %@", sdid);
// Store or use the SDID as needed
[self storeDeviceIdentifier:sdid];
};
setGlobalProperty
Método SingularConfig.setGlobalProperty
Define uma propriedade global durante a inicialização do SDK. Esta propriedade será enviada com todos os eventos rastreados pelo SDK. Este é um método em vez de uma propriedade, permitindo configuração encadeada.
Assinatura
- (void)setGlobalProperty:(NSString *)key
withValue:(NSString *)value
overrideExisting:(BOOL)overrideExisiting;
Exemplo de uso
// Add global properties
config.setGlobalProperty("app_version",
withValue: "1.2.3",
overrideExisting: true)
config.setGlobalProperty("user_type",
withValue: "free",
overrideExisting: true)
// Add global properties
[config setGlobalProperty:@"app_version"
withValue:@"1.2.3"
overrideExisting:YES];
[config setGlobalProperty:@"user_type"
withValue:@"free"
overrideExisting:YES];
shortLinkResolveTimeOut
Propriedade SingularConfig.shortLinkResolveTimeOut
Define o timeout em segundos para resolver short links. Isso determina quanto tempo o SDK esperará para que um short link seja resolvido antes de continuar com a inicialização. O valor padrão é 10 segundos.
Assinatura
@property (assign) long shortLinkResolveTimeOut;
Exemplo de uso
// Set short link resolve timeout to 15 seconds
config.shortLinkResolveTimeOut = 15
// Set short link resolve timeout to 15 seconds
config.shortLinkResolveTimeOut = 15;
singularLinksHandler
Propriedade SingularConfig.singularLinksHandler
Define uma função de callback para manipular deep links processados pela Singular. Isso permite que seu aplicativo responda aos deep links usados na atribuição.
Assinatura
@property (copy) void(^singularLinksHandler)(SingularLinkParams *);
Exemplo de uso
// Set singular links handler
config.singularLinksHandler = { params in
guard let params = params else { return }
// Check if we have a deep link
if let deeplink = params.getDeepLink() {
print("Deep link received: \(deeplink)")
// Navigate based on the deep link
self.navigateToScreen(deeplink)
}
// Check if this is a deferred deep link
if params.isDeferred() {
print("This is a deferred deep link")
}
// Access passthrough parameters
if let passthrough = params.getPassthrough() {
print("Passthrough data: \(passthrough)")
}
}
// Set singular links handler
config.singularLinksHandler = ^(SingularLinkParams *params) {
// Check if we have a deep link
NSString *deeplink = [params getDeepLink];
if (deeplink) {
NSLog(@"Deep link received: %@", deeplink);
// Navigate based on the deep link
[self navigateToScreen:deeplink];
}
// Check if this is a deferred deep link
if ([params isDeferred]) {
NSLog(@"This is a deferred deep link");
}
// Access passthrough parameters
NSString *passthrough = [params getPassthrough];
if (passthrough) {
NSLog(@"Passthrough data: %@", passthrough);
}
};
skAdNetworkEnabled
Propriedade SingularConfig.skAdNetworkEnabled
Habilita ou desabilita o suporte ao SKAdNetwork. Isso controla se o SDK usará o SKAdNetwork da Apple para atribuição. O valor padrão é YES.
Assinatura
@property (assign) BOOL skAdNetworkEnabled;
Exemplo de uso
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = false
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = NO;
supportAppExtension
Propriedade SingularConfig.supportAppExtension
Habilita o suporte a extensões de aplicativo. Quando habilitada, o SDK pode funcionar corretamente em contextos de extensão de aplicativo.
Assinatura
@property (assign) BOOL supportAppExtension;
Exemplo de uso
// Enable app extension support
config.supportAppExtension = true
// Enable app extension support
config.supportAppExtension = YES;
userActivity
Propriedade SingularConfig.userActivity
Define o objeto user activity para manipular universal links. Isso é usado quando o aplicativo é aberto via um universal link.
Assinatura
@property (strong) NSUserActivity *userActivity;
Exemplo de uso
// Set user activity for universal links
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let config = SingularConfig(apiKey: "API_KEY", andSecret: "SECRET")
config.userActivity = userActivity
Singular.start(config)
return true
}
// Set user activity for universal links
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *))restorationHandler {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"API_KEY"
andSecret:@"SECRET"];
config.userActivity = userActivity;
[Singular start:config];
return YES;
}
waitForTrackingAuthorizationWithTimeoutInterval
Propriedade SingularConfig.waitForTrackingAuthorizationWithTimeoutInterval
Define o intervalo de timeout em segundos para aguardar a resposta de autorização de rastreamento do usuário no iOS 14+. Isso determina por quanto tempo o SDK aguardará a resposta do prompt do AppTrackingTransparency antes de continuar com a inicialização. O valor padrão é
0
, o que significa que o SDK não aguarda e continua imediatamente.
Assinatura
@property (assign) NSInteger waitForTrackingAuthorizationWithTimeoutInterval;
Exemplo de uso
// Wait up to 60 seconds for ATT prompt response
config.waitForTrackingAuthorizationWithTimeoutInterval = 60
// Wait up to 60 seconds for ATT prompt response
config.waitForTrackingAuthorizationWithTimeoutInterval = 60;
Exemplo completo de configuração
Configuração abrangente do SDK
O exemplo a seguir demonstra como criar uma configuração abrangente definindo várias propriedades de configuração juntas.
Exemplo completo
// Create configuration with API credentials
let config = SingularConfig(apiKey: "SDK KEY", andSecret: "YOUR_SECRET")
// Set basic options
config.waitForTrackingAuthorizationWithTimeoutInterval = 60
config.clipboardAttribution = true
// Set global properties
config.setGlobalProperty("app_version",
withValue: "1.2.3",
overrideExisting: true)
config.setGlobalProperty("user_type",
withValue: "premium",
overrideExisting: true)
// Configure SKAdNetwork
config.skAdNetworkEnabled = true
config.manualSkanConversionManagement = false
config.conversionValueUpdatedCallback = { conversionValue in
print("Conversion value updated: \(conversionValue)")
}
// Configure deep links
config.launchOptions = launchOptions
config.singularLinksHandler = { params in
if let deeplink = params?.getDeepLink() {
print("Deep link received: \(deeplink)")
self.handleDeepLink(deeplink)
}
}
// Configure attribution callback (fires on a background queue)
config.deviceAttributionCallback = { attributionData in
print("Attribution data: \(attributionData ?? [:])")
}
// Start the SDK
Singular.start(config)
// Create configuration with API credentials
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK KEY"
andSecret:@"YOUR_SECRET"];
// Set basic options
config.waitForTrackingAuthorizationWithTimeoutInterval = 60;
config.clipboardAttribution = YES;
// Set global properties
[config setGlobalProperty:@"app_version"
withValue:@"1.2.3"
overrideExisting:YES];
[config setGlobalProperty:@"user_type"
withValue:@"premium"
overrideExisting:YES];
// Configure deep links
config.launchOptions = launchOptions;
config.singularLinksHandler = ^(SingularLinkParams *params) {
NSString *deeplink = [params getDeepLink];
if (deeplink) {
NSLog(@"Deep link received: %@", deeplink);
[self handleDeepLink:deeplink];
}
};
// Start the SDK
[Singular start:config];