SDK de iOS - Referencia de métodos de configuración
Este documento proporciona una referencia integral de todas las opciones de configuración disponibles en el SDK de Singular para aplicaciones iOS. El objeto SingularConfig le permite personalizar el comportamiento del SDK, incluyendo configuración de tracking, opciones de atribución, controles de privacidad y más. Cada propiedad de configuración se presenta con una descripción, firma y ejemplos de uso prácticos.
appGroupName
Propiedad SingularConfig.appGroupName
Establece el nombre del grupo de aplicaciones para compartir datos entre la aplicación principal y las extensiones de aplicación. Esto es obligatorio cuando se utilizan extensiones de aplicación con el SDK.
Firma
@property (strong) NSString *appGroupName;
Ejemplo 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
Propiedad SingularConfig.brandedDomains
Establece dominios de marca para atribución web-a-app. Esto le permite especificar dominios personalizados que deben rastrearse con fines de atribución.
Establecer esta propiedad reemplaza cualquier dominio de marca previamente configurado. Pase la lista completa en una sola asignación en lugar de agregar elementos.
Firma
@property (strong) NSArray *brandedDomains;
Ejemplo 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
Función Enterprise: El DDL basado en portapapeles requiere el WebSDK de Singular, que es una Función Enterprise. Comuníquese con su Customer Success Manager para habilitar esta función en su cuenta.
Propiedad SingularConfig.clipboardAttribution
Habilita la atribución por portapapeles para el SDK. Cuando está habilitada, el SDK verifica el portapapeles del dispositivo en busca de enlaces de atribución durante la inicialización. El valor predeterminado es
NO
.
Firma
@property (assign) BOOL clipboardAttribution;
Ejemplo de uso
// Enable clipboard attribution
config.clipboardAttribution = true
// Enable clipboard attribution
config.clipboardAttribution = YES;
conversionValueUpdatedCallback
Propiedad SingularConfig.conversionValueUpdatedCallback
Establece una función de callback que se llamará cuando se actualice el valor de conversión de SKAdNetwork. Esto le permite reaccionar a los cambios en el valor de conversión.
Firma
@property (copy) void(^conversionValueUpdatedCallback)(NSInteger);
Ejemplo 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
Propiedad SingularConfig.conversionValuesUpdatedCallback
Establece una función de callback que se llamará cuando se actualicen los valores de conversión de SKAdNetwork 4.0. Esto es específico de iOS 16.1+ y le permite reaccionar a cambios en los valores fine, coarse y lock.
Firma
@property (copy) void(^conversionValuesUpdatedCallback)(NSNumber *, NSNumber *, BOOL);
Ejemplo 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
Propiedad SingularConfig.customSdid
Función Enterprise: Establece un SDID (Singular Device ID) personalizado. Esto le permite proporcionar su propio identificador de dispositivo en lugar de usar el generado por Singular.
Firma
@property (strong) NSString *customSdid;
Ejemplo de uso
// Set custom SDID
config.customSdid = "custom-device-id-12345"
// Set custom SDID
config.customSdid = @"custom-device-id-12345";
deviceAttributionCallback
Propiedad SingularConfig.deviceAttributionCallback
Función BETA:
Establece una función de callback que se invocará cuando los datos de atribución del dispositivo estén disponibles desde la respuesta de
/start
. El callback se despacha en una cola en segundo plano, por lo que debe despachar cualquier trabajo de UI al hilo principal.
| Clave | Tipo | Notas |
|---|---|---|
network
|
NSString | Fuente de atribución. "organic" para instalaciones no atribuidas. |
campaign_id
|
NSString | Presente solo cuando hay atribución. |
campaign_name
|
NSString | Presente solo cuando hay atribución. |
click_timestamp
|
NSNumber (epoch microseconds) | Presente solo cuando hay atribución. Divida por 1.000.000 para obtener segundos. |
El callback solo se invoca cuando la respuesta de
/start
contiene un objeto
attribution_info
. Para instalaciones orgánicas, solo se completa
network
.
Firma
@property (copy) void(^deviceAttributionCallback)(NSDictionary *);
Ejemplo 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
Propiedad SingularConfig.didSetSdidHandler
Función Enterprise:
Establece una función de callback que se llamará cuando se establezca el SDID (Singular Device ID) después de que asigne uno a través de
customSdid. El argumento
result
es la cadena de SDID que se acaba de almacenar.
Normalmente se usa junto con
sdidReceivedHandler. Configure ambos al gestionar un SDID personalizado para que se le notifique tanto cuando el SDK acepte un nuevo SDID como cuando el SDK presente uno existente.
Firma
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler didSetSdidHandler;
Ejemplo 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
Propiedad SingularConfig.enableLogging
Habilita el registro (logging) del SDK. Útil para depuración y solución de problemas durante el desarrollo. Se recomienda deshabilitar el registro en compilaciones de producción. El valor predeterminado es
NO
.
El registro permanecerá silencioso hasta que tanto
enableLogging
se establezca en
YES
como que
logLevel
se establezca en un valor superior a
SingularLogLevelNone
.
Firma
@property (assign) BOOL enableLogging;
Ejemplo 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
Propiedad SingularConfig.enableOdmWithTimeoutInterval
Establece el intervalo de tiempo de espera en segundos para la obtención de Google ODM (On-Device Measurement). ODM es el sistema de medición de anuncios móviles de Google que presenta datos de atribución de instalación en el dispositivo. El valor predeterminado es
0
(obtención de ODM deshabilitada).
Firma
@property (assign) NSInteger enableOdmWithTimeoutInterval;
Ejemplo de uso
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5;
espDomains
Propiedad SingularConfig.espDomains
Establece los dominios de ESP (Email Service Provider) para atribución por correo electrónico. Esto le permite especificar qué dominios de correo electrónico deben considerarse para la atribución.
Firma
@property (strong) NSArray *espDomains;
Ejemplo 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
Propiedad SingularConfig.globalProperties
Proporciona acceso de solo lectura al diccionario de propiedades globales. Esto contiene todas las propiedades globales que se han establecido para la configuración.
Firma
@property (readonly) NSMutableDictionary *globalProperties;
Ejemplo de uso
// Access global properties
print("Global properties: \(config.globalProperties)")
// Access global properties
NSLog(@"Global properties: %@", config.globalProperties);
initWithApiKey
Inicialización de SingularConfig
Inicializa un nuevo objeto SingularConfig con su API key y secret. Este es el primer paso para configurar el SDK de Singular.
Firma
- (id)initWithApiKey:(NSString *)apikey andSecret:(NSString *)secret;
Ejemplo 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
Propiedad SingularConfig.launchOptions
Establece el diccionario de launch options desde el app delegate. Se utiliza para procesar deep links y otros datos de inicio.
Firma
@property (strong) NSDictionary *launchOptions;
Ejemplo 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
Propiedad SingularConfig.limitAdvertisingIdentifiers
Habilita o deshabilita el uso de identificadores publicitarios. Esta opción afecta cómo el SDK recopila y utiliza identificadores de dispositivo para tracking y atribución. El valor predeterminado es
NO
.
Esta propiedad se excluye de la compilación del Singular Kids SDK (protegida por
#ifndef SINGULAR_KIDS). Si está integrando
Singular-Kids-SDK, esta propiedad no está disponible — el Kids SDK aplica automáticamente un manejo de identificadores más estricto.
Firma
@property (assign) BOOL limitAdvertisingIdentifiers;
Ejemplo de uso
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = true
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = YES;
logLevel
Propiedad SingularConfig.logLevel
Establece el nivel de detalle del registro del SDK. El registro también debe estar habilitado mediante
enableLogging
para que se emita cualquier salida. El valor predeterminado es
SingularLogLevelNone
(sin registro).
Niveles disponibles (de
SingularLogLevel.h):
-
SingularLogLevelNone(0) — Sin registro -
SingularLogLevelError(1) — Solo errores -
SingularLogLevelWarning(2) — Errores y advertencias -
SingularLogLevelInfo(3) — Errores, advertencias e información -
SingularLogLevelDebug(4) — Todos los registros incluyendo depuración -
SingularLogLevelVerbose(5) — El más detallado
Firma
@property (assign) SingularLogLevel logLevel;
Ejemplo 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
Propiedad SingularConfig.manualSkanConversionManagement
Habilita la gestión manual de los valores de conversión de SKAdNetwork. Cuando está habilitada, el SDK no actualiza automáticamente los valores de conversión, permitiéndole controlarlos manualmente.
Firma
@property (assign) BOOL manualSkanConversionManagement;
Ejemplo de uso
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = true
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = YES;
openUrl
Propiedad SingularConfig.openUrl
Establece la URL utilizada para abrir la aplicación. Se utiliza para deep links de esquemas de URL personalizados.
Firma
@property (strong) NSURL *openUrl;
Ejemplo 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
Propiedad SingularConfig.pushNotificationLinkPath
Establece las rutas en las que buscar deep links en los payloads de notificaciones push. Esto ayuda al SDK a encontrar y procesar enlaces de atribución en las notificaciones push.
Firma
@property (strong) NSArray<NSArray<NSString*>*> *pushNotificationLinkPath;
Ejemplo 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
Propiedad SingularConfig.pushNotificationPayload
Establece el payload de la notificación push para atribución. Esto permite al SDK procesar datos de notificaciones push durante la inicialización.
Firma
@property (strong) NSDictionary *pushNotificationPayload;
Ejemplo de uso
// Set push notification payload
config.pushNotificationPayload = userInfo
// Set push notification payload
config.pushNotificationPayload = userInfo;
sdidReceivedHandler
Propiedad SingularConfig.sdidReceivedHandler
Función Enterprise:
Establece una función de callback que se llamará cuando el SDID (Singular Device ID) esté disponible, incluyendo los SDIDs almacenados previamente. El argumento
result
es la cadena de SDID.
Normalmente se usa junto con
didSetSdidHandler. Configure ambos al gestionar un SDID personalizado para que se le notifique tanto cuando el SDK acepte un nuevo SDID como cuando el SDK presente uno existente.
Firma
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler sdidReceivedHandler;
Ejemplo 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
Establece una propiedad global durante la inicialización del SDK. Esta propiedad se enviará con todos los eventos rastreados por el SDK. Este es un método en lugar de una propiedad, permitiendo configuración encadenada.
Firma
- (void)setGlobalProperty:(NSString *)key
withValue:(NSString *)value
overrideExisting:(BOOL)overrideExisiting;
Ejemplo 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
Propiedad SingularConfig.shortLinkResolveTimeOut
Establece el tiempo de espera en segundos para resolver short links. Esto determina cuánto tiempo esperará el SDK para que se resuelva un short link antes de continuar con la inicialización. El valor predeterminado es 10 segundos.
Firma
@property (assign) long shortLinkResolveTimeOut;
Ejemplo 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
Propiedad SingularConfig.singularLinksHandler
Establece una función de callback para manejar los deep links procesados por Singular. Esto permite que su aplicación responda a los deep links utilizados en la atribución.
Firma
@property (copy) void(^singularLinksHandler)(SingularLinkParams *);
Ejemplo 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
Propiedad SingularConfig.skAdNetworkEnabled
Habilita o deshabilita el soporte de SKAdNetwork. Esto controla si el SDK utilizará SKAdNetwork de Apple para la atribución. El valor predeterminado es YES.
Firma
@property (assign) BOOL skAdNetworkEnabled;
Ejemplo de uso
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = false
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = NO;
supportAppExtension
Propiedad SingularConfig.supportAppExtension
Habilita el soporte para extensiones de aplicación. Cuando está habilitada, el SDK puede funcionar correctamente en contextos de extensión de aplicación.
Firma
@property (assign) BOOL supportAppExtension;
Ejemplo de uso
// Enable app extension support
config.supportAppExtension = true
// Enable app extension support
config.supportAppExtension = YES;
userActivity
Propiedad SingularConfig.userActivity
Establece el objeto user activity para manejar enlaces universales. Se utiliza cuando la aplicación se abre mediante un enlace universal.
Firma
@property (strong) NSUserActivity *userActivity;
Ejemplo 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
Propiedad SingularConfig.waitForTrackingAuthorizationWithTimeoutInterval
Establece el intervalo de tiempo de espera en segundos para esperar la respuesta de autorización de tracking del usuario en iOS 14+. Esto determina cuánto tiempo esperará el SDK la respuesta del prompt de AppTrackingTransparency antes de continuar con la inicialización. El valor predeterminado es
0
, lo que significa que el SDK no espera y continúa inmediatamente.
Firma
@property (assign) NSInteger waitForTrackingAuthorizationWithTimeoutInterval;
Ejemplo 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;
Ejemplo completo de configuración
Configuración integral del SDK
El siguiente ejemplo demuestra cómo crear una configuración integral estableciendo múltiples propiedades de configuración juntas.
Ejemplo 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];