iOS SDK - 구성 메서드 레퍼런스
이 문서는 iOS 애플리케이션용 Singular SDK에서 사용할 수 있는 모든 구성 옵션에 대한 종합적인 레퍼런스를 제공합니다. SingularConfig 객체를 사용하면 트래킹 설정, 어트리뷰션 옵션, 프라이버시 컨트롤 등을 포함하여 SDK의 동작을 사용자 정의할 수 있습니다. 각 구성 속성은 설명, 시그니처, 실제 사용 예시와 함께 제시됩니다.
appGroupName
SingularConfig.appGroupName 속성
메인 앱과 앱 익스텐션 간에 데이터를 공유하기 위한 앱 그룹 이름을 설정합니다. SDK에서 앱 익스텐션을 사용할 때 필요합니다.
시그니처
@property (strong) NSString *appGroupName;
사용 예시
// 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
SingularConfig.brandedDomains 속성
웹-투-앱 어트리뷰션을 위한 브랜디드 도메인을 설정합니다. 이를 통해 어트리뷰션 목적으로 트래킹해야 하는 사용자 정의 도메인을 지정할 수 있습니다.
이 속성을 설정하면 이전에 설정된 모든 브랜디드 도메인이 대체됩니다. 추가하는 방식이 아닌 Singular 할당으로 전체 목록을 전달하십시오.
시그니처
@property (strong) NSArray *brandedDomains;
사용 예시
// 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
엔터프라이즈 기능: 클립보드 기반 DDL은 엔터프라이즈 기능인 Singular WebSDK가 필요합니다. 계정에서 이 기능을 활성화하려면 Customer Success Manager에게 문의하십시오.
SingularConfig.clipboardAttribution 속성
SDK의 클립보드 어트리뷰션을 활성화합니다. 활성화하면 SDK는 초기화 중에 디바이스 클립보드에서 어트리뷰션 링크를 확인합니다. 기본값은
NO
입니다.
시그니처
@property (assign) BOOL clipboardAttribution;
사용 예시
// Enable clipboard attribution
config.clipboardAttribution = true
// Enable clipboard attribution
config.clipboardAttribution = YES;
conversionValueUpdatedCallback
SingularConfig.conversionValueUpdatedCallback 속성
SKAdNetwork 컨버전 값이 업데이트될 때 호출되는 콜백 함수를 설정합니다. 이를 통해 컨버전 값 변경에 반응할 수 있습니다.
시그니처
@property (copy) void(^conversionValueUpdatedCallback)(NSInteger);
사용 예시
// 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
SingularConfig.conversionValuesUpdatedCallback 속성
SKAdNetwork 4.0 컨버전 값이 업데이트될 때 호출되는 콜백 함수를 설정합니다. 이는 iOS 16.1 이상에 특화되어 있으며, fine, coarse, lock 값의 변경에 반응할 수 있도록 합니다.
시그니처
@property (copy) void(^conversionValuesUpdatedCallback)(NSNumber *, NSNumber *, BOOL);
사용 예시
// 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
SingularConfig.customSdid 속성
엔터프라이즈 기능: 사용자 정의 SDID(Singular Device ID)를 설정합니다. 이를 통해 Singular가 생성한 식별자를 사용하는 대신 자체 디바이스 식별자를 제공할 수 있습니다.
시그니처
@property (strong) NSString *customSdid;
사용 예시
// Set custom SDID
config.customSdid = "custom-device-id-12345"
// Set custom SDID
config.customSdid = @"custom-device-id-12345";
deviceAttributionCallback
SingularConfig.deviceAttributionCallback 속성
BETA 기능:
디바이스 어트리뷰션 데이터가
/start
응답에서 사용 가능할 때 호출되는 콜백 함수를 설정합니다. 콜백은 백그라운드 큐에서 디스패치되므로, UI 작업은 메인 스레드로 디스패치하십시오.
| 키 | 유형 | 비고 |
|---|---|---|
network
|
NSString | 어트리뷰션 소스. "organic" 은 어트리뷰션되지 않은 설치(자연량)를 나타냅니다. |
campaign_id
|
NSString | 어트리뷰션된 경우에만 존재합니다. |
campaign_name
|
NSString | 어트리뷰션된 경우에만 존재합니다. |
click_timestamp
|
NSNumber (epoch microseconds) | 어트리뷰션된 경우에만 존재합니다. 초 단위로 변환하려면 1,000,000으로 나누십시오. |
콜백은
/start
응답에
attribution_info
객체가 포함되어 있을 때만 호출됩니다. 자연량 설치의 경우
network
만 채워집니다.
시그니처
@property (copy) void(^deviceAttributionCallback)(NSDictionary *);
사용 예시
// 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
SingularConfig.didSetSdidHandler 속성
엔터프라이즈 기능:
customSdid를 통해 SDID(Singular Device ID)를 할당한 후 SDID가 설정될 때 호출되는 콜백 함수를 설정합니다.
result
인자는 방금 저장된 SDID 문자열입니다.
일반적으로
sdidReceivedHandler와 함께 사용됩니다. 사용자 정의 SDID를 관리할 때 두 핸들러를 모두 설정하면 SDK가 새 SDID를 수락할 때와 기존 SDID를 표시할 때 모두 알림을 받을 수 있습니다.
시그니처
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler didSetSdidHandler;
사용 예시
// 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
SingularConfig.enableLogging 속성
SDK 로깅을 활성화합니다. 개발 중 디버깅 및 문제 해결에 유용합니다. 프로덕션 빌드에서는 로깅을 비활성화하는 것이 권장됩니다. 기본값은
NO
입니다.
enableLogging이
YES로 설정되고
logLevel이
SingularLogLevelNone
이상의 값으로 설정될 때까지 로깅은 출력되지 않습니다.
시그니처
@property (assign) BOOL enableLogging;
사용 예시
// Enable logging for debug builds
config.enableLogging = true
config.logLevel = .debug
// Enable logging for debug builds
config.enableLogging = YES;
config.logLevel = SingularLogLevelDebug;
enableOdmWithTimeoutInterval
SingularConfig.enableOdmWithTimeoutInterval 속성
Google ODM(On-Device Measurement) 조회의 타임아웃 간격을 초 단위로 설정합니다. ODM은 Google의 모바일 광고 측정 시스템으로, 디바이스에서 설치 어트리뷰션 데이터를 표시합니다. 기본값은
0
(ODM 조회 비활성화)입니다.
시그니처
@property (assign) NSInteger enableOdmWithTimeoutInterval;
사용 예시
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5
// Enable Google ODM with 5 second timeout
config.enableOdmWithTimeoutInterval = 5;
espDomains
SingularConfig.espDomains 속성
이메일 어트리뷰션을 위한 ESP(Email Service Provider) 도메인을 설정합니다. 이를 통해 어트리뷰션에 고려될 이메일 도메인을 지정할 수 있습니다.
시그니처
@property (strong) NSArray *espDomains;
사용 예시
// 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
SingularConfig.globalProperties 속성
글로벌 속성 딕셔너리에 대한 읽기 전용 액세스를 제공합니다. 여기에는 구성에 설정된 모든 글로벌 속성이 포함됩니다.
시그니처
@property (readonly) NSMutableDictionary *globalProperties;
사용 예시
// Access global properties
print("Global properties: \(config.globalProperties)")
// Access global properties
NSLog(@"Global properties: %@", config.globalProperties);
initWithApiKey
SingularConfig 초기화
API 키와 시크릿으로 새로운 SingularConfig 객체를 초기화합니다. 이는 Singular SDK 구성의 첫 번째 단계입니다.
시그니처
- (id)initWithApiKey:(NSString *)apikey andSecret:(NSString *)secret;
사용 예시
// 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
SingularConfig.launchOptions 속성
앱 델리게이트의 launch options 딕셔너리를 설정합니다. 이는 딥링크 및 기타 시작 데이터를 처리하는 데 사용됩니다.
시그니처
@property (strong) NSDictionary *launchOptions;
사용 예시
// 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
SingularConfig.limitAdvertisingIdentifiers 속성
광고 식별자의 사용을 활성화하거나 비활성화합니다. 이 옵션은 SDK가 트래킹 및 어트리뷰션을 위해 디바이스 식별자를 수집하고 사용하는 방식에 영향을 미칩니다. 기본값은
NO
입니다.
이 속성은 Singular Kids SDK 빌드에서 컴파일에서 제외됩니다(
#ifndef SINGULAR_KIDS로 보호).
Singular-Kids-SDK를 연동하는 경우 이 속성은 사용할 수 없습니다. Kids SDK는 더 엄격한 식별자 처리를 자동으로 적용합니다.
시그니처
@property (assign) BOOL limitAdvertisingIdentifiers;
사용 예시
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = true
// Enable limited identifiers mode
config.limitAdvertisingIdentifiers = YES;
logLevel
SingularConfig.logLevel 속성
SDK 로깅의 상세도를 설정합니다. 출력이 발생하려면
enableLogging
을 통해서도 로깅이 활성화되어야 합니다. 기본값은
SingularLogLevelNone
(로깅 없음)입니다.
사용 가능한 레벨(
SingularLogLevel.h에서):
-
SingularLogLevelNone(0) — 로깅 없음 -
SingularLogLevelError(1) — 오류만 -
SingularLogLevelWarning(2) — 오류 및 중요 -
SingularLogLevelInfo(3) — 오류, 중요 및 정보 -
SingularLogLevelDebug(4) — 디버그를 포함한 모든 로그 -
SingularLogLevelVerbose(5) — 가장 상세함
시그니처
@property (assign) SingularLogLevel logLevel;
사용 예시
// 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
SingularConfig.manualSkanConversionManagement 속성
SKAdNetwork 컨버전 값의 수동 관리를 활성화합니다. 활성화하면 SDK는 컨버전 값을 자동으로 업데이트하지 않으며, 수동으로 제어할 수 있습니다.
시그니처
@property (assign) BOOL manualSkanConversionManagement;
사용 예시
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = true
// Enable manual SKAdNetwork conversion management
config.manualSkanConversionManagement = YES;
openUrl
SingularConfig.openUrl 속성
앱을 여는 데 사용되는 URL을 설정합니다. 사용자 정의 URL 스킴 딥링크에 사용됩니다.
시그니처
@property (strong) NSURL *openUrl;
사용 예시
// 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
SingularConfig.pushNotificationLinkPath 속성
푸시 알림 페이로드에서 딥링크를 찾을 경로를 설정합니다. 이를 통해 SDK가 푸시 알림에서 어트리뷰션 링크를 찾아 처리할 수 있도록 도와줍니다.
시그니처
@property (strong) NSArray<NSArray<NSString*>*> *pushNotificationLinkPath;
사용 예시
// 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
SingularConfig.pushNotificationPayload 속성
어트리뷰션을 위한 푸시 알림 페이로드를 설정합니다. 이를 통해 SDK는 초기화 중에 푸시 알림 데이터를 처리할 수 있습니다.
시그니처
@property (strong) NSDictionary *pushNotificationPayload;
사용 예시
// Set push notification payload
config.pushNotificationPayload = userInfo
// Set push notification payload
config.pushNotificationPayload = userInfo;
sdidReceivedHandler
SingularConfig.sdidReceivedHandler 속성
엔터프라이즈 기능:
SDID(Singular Device ID)가 사용 가능해질 때(이전에 저장된 SDID 포함) 호출되는 콜백 함수를 설정합니다.
result
인자는 SDID 문자열입니다.
일반적으로
didSetSdidHandler와 함께 사용됩니다. 사용자 정의 SDID를 관리할 때 두 핸들러를 모두 설정하면 SDK가 새 SDID를 수락할 때와 기존 SDID를 표시할 때 모두 알림을 받을 수 있습니다.
시그니처
typedef void (^SdidAccessorHandler)(NSString *result);
@property (copy) SdidAccessorHandler sdidReceivedHandler;
사용 예시
// 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
SingularConfig.setGlobalProperty 메서드
SDK 초기화 중에 글로벌 속성을 설정합니다. 이 속성은 SDK가 트래킹하는 모든 이벤트와 함께 전송됩니다. 이는 속성이 아닌 메서드로, 체인 구성을 허용합니다.
시그니처
- (void)setGlobalProperty:(NSString *)key
withValue:(NSString *)value
overrideExisting:(BOOL)overrideExisiting;
사용 예시
// 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
SingularConfig.shortLinkResolveTimeOut 속성
숏 링크 해결의 타임아웃을 초 단위로 설정합니다. 이는 초기화를 계속하기 전에 SDK가 숏 링크 해결을 얼마나 기다릴지를 결정합니다. 기본값은 10초입니다.
시그니처
@property (assign) long shortLinkResolveTimeOut;
사용 예시
// Set short link resolve timeout to 15 seconds
config.shortLinkResolveTimeOut = 15
// Set short link resolve timeout to 15 seconds
config.shortLinkResolveTimeOut = 15;
singularLinksHandler
SingularConfig.singularLinksHandler 속성
Singular에 의해 처리되는 딥링크를 핸들링할 콜백 함수를 설정합니다. 이를 통해 앱이 어트리뷰션에 사용되는 딥링크에 응답할 수 있습니다.
시그니처
@property (copy) void(^singularLinksHandler)(SingularLinkParams *);
사용 예시
// 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
SingularConfig.skAdNetworkEnabled 속성
SKAdNetwork 지원을 활성화하거나 비활성화합니다. SDK가 어트리뷰션을 위해 Apple의 SKAdNetwork를 사용할지를 제어합니다. 기본값은 YES입니다.
시그니처
@property (assign) BOOL skAdNetworkEnabled;
사용 예시
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = false
// Disable SKAdNetwork support if needed
config.skAdNetworkEnabled = NO;
supportAppExtension
SingularConfig.supportAppExtension 속성
앱 익스텐션 지원을 활성화합니다. 활성화하면 SDK가 앱 익스텐션 컨텍스트에서 올바르게 작동할 수 있습니다.
시그니처
@property (assign) BOOL supportAppExtension;
사용 예시
// Enable app extension support
config.supportAppExtension = true
// Enable app extension support
config.supportAppExtension = YES;
userActivity
SingularConfig.userActivity 속성
유니버설 링크를 처리하기 위한 user activity 객체를 설정합니다. 앱이 유니버설 링크를 통해 열릴 때 사용됩니다.
시그니처
@property (strong) NSUserActivity *userActivity;
사용 예시
// 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
SingularConfig.waitForTrackingAuthorizationWithTimeoutInterval 속성
iOS 14 이상에서 유저의 트래킹 권한 응답을 기다리는 타임아웃 간격을 초 단위로 설정합니다. 이는 초기화를 계속하기 전에 SDK가 AppTrackingTransparency 프롬프트 응답을 얼마나 기다릴지를 결정합니다. 기본값은
0
으로, SDK가 기다리지 않고 즉시 계속됨을 의미합니다.
시그니처
@property (assign) NSInteger waitForTrackingAuthorizationWithTimeoutInterval;
사용 예시
// Wait up to 60 seconds for ATT prompt response
config.waitForTrackingAuthorizationWithTimeoutInterval = 60
// Wait up to 60 seconds for ATT prompt response
config.waitForTrackingAuthorizationWithTimeoutInterval = 60;
전체 구성 예시
포괄적인 SDK 구성
다음 예시는 여러 구성 속성을 함께 설정하여 포괄적인 구성을 만드는 방법을 보여줍니다.
전체 예시
// 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];