데이터 패칭 - iOS

에어브릿지 이벤트 구성에 필요한 데이터를 iOS에서 수집합니다.

데이터 패칭하기

아래 내용을 참고해 주세요.

Device ID

에어브릿지가 제공하는 디바이스 식별자입니다. 타입은 NSString*입니다.

예시) 82a16ec9-a273-48b6-9bb2-017eab641109

123
#import <AirBridge/AirBridge.h>

AirBridge.deviceUUID;

AirbridgeGeneratedUUID

에어브릿지에서 디바이스별로 앱 설치 이벤트가 발생하면 부여하는 임의의 UUID입니다. UUID 버전4 형식입니다. 타입은 NSString*입니다.

예시) 82a16ec9-a273-48b6-9bb2-017eab641109

12345
    #import <AirBridge/AirBridge.h>

    [AirBridge fetchAirbridgeGeneratedUUID:^(NSString * _Nonnull uuid) {
        
    }];

IDFA

애플이 제공하는 광고 식별자입니다. 타입은 NSString*입니다.

예시) 82a16ec9-a273-48b6-9bb2-017eab641109

123
#import <AdSupport/AdSupport.h>

ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;

IDFV

애플이 제공하는 광고 식별자로 IFV라고 표기되기도 합니다. 타입은 NSString*입니다.

예시) 82a16ec9-a273-48b6-9bb2-017eab641109

1
UIDevice.currentDevice.identifierForVendor.UUIDString;

Limit AD Tracking

LAT(Limit AD Tracking)에 따른 광고 추적 제한 여부입니다. 타입은 boolean입니다.

123
#import <AdSupport/AdSupport.h>

ASIdentifierManager.sharedManager.advertisingTrackingEnabled;

Device Model

디바이스 모델 이름입니다. 타입은 NSString*입니다.

예시) iPhone

1
UIDevice.currentDevice.localizedModel;

Device Identifier

디바이스 식별자입니다. 타입은 NSString*입니다.

예시) iPhone9,3

1234567
#import <sys/utsname.h>

struct utsname systemInfo;
uname(&systemInfo);
        
return [NSString stringWithCString:systemInfo.machine
                          encoding:NSUTF8StringEncoding];

Device Manufacturer

디바이스 제조사입니다. 타입은 NSString*입니다.

예시) Apple

1
@"Apple"

OS Name

운영체제(OS) 이름입니다. 타입은 NSString*입니다.

예시) iOS

1
UIDevice.currentDevice.systemName;

OS Version

운영체제(OS) 이름 버전입니다. 타입은 NSString*입니다.

예시) 13.3

1
UIDevice.currentDevice.systemVersion;

Locale

디바이스 위치입니다. 타입은 NSString*입니다.

예시) ko-KR

123456789101112131415161718192021222324252627282930313233343536373839
+ (NSString *)getSystemLocale {
    NSString* language = [#ClassName# getSystemLanguage];
    NSString* country = [#ClassName# getSystemCountry];
    
    if(language == nil || country == nil) {
        return nil;
    }
    
    return [NSString stringWithFormat:@"%@-%@", language, country];
}

+ (NSString*) getSystemLanguage {
    NSArray* preferredLanguages = NSLocale.preferredLanguages;
    
    if (preferredLanguages.count < 1) {
        return nil;
    }
    
    NSString* languageSource = preferredLanguages[0];
    if (languageSource == nil) {
        return nil;
    }
    
    NSRange barIndex = [languageSource rangeOfString:@"-"];
    if (barIndex.location != NSNotFound) {
        languageSource = [languageSource substringToIndex:barIndex.location];
    }
    
    return languageSource;
}

+ (NSString*) getSystemCountry {
    NSLocale* locale = NSLocale.autoupdatingCurrentLocale;
    if (locale == nil) {
        return nil;
    }
    
    return [locale objectForKey:NSLocaleCountryCode];
}

Timezone

디바이스 시간대(타임존)입니다. 타입은 NSString*입니다.

예시) Asia/Seoul

1
NSTimeZone.systemTimeZone.name;

Orientation

디바이스 방향입니다. 타입은 NSString*입니다.

예시) portrait

12345
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation))
    return @"landscape";
else
    return @"portrait";

Screen Density

디바이스 화면의 밀도입니다. 타입은 NSString*입니다.

예시) 3.000

1
[NSString stringWithFormat:@"%.3f", UIScreen.mainScreen.scale];

Screen Height

디바이스 화면의 세로 길이입니다. 타입은 NSString*입니다.

예시) 667.0

1
[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.height];

Screen Width

디바이스 화면의 가로 길이입니다. 타입은 NSString*입니다.

예시) 375.0

1
[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.width];

Network Carrier

네트워크 사업자 정보를 확인할 수 있습니다. 타입은 NSString*입니다.

123456789101112
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

CTTelephonyNetworkInfo* networkInfo = [[CTTelephonyNetworkInfo alloc] init];

if (@available(iOS 12.1, *)) {
    NSDictionary<NSString*, CTCarrier*>* providers = [networkInfo serviceSubscriberCellularProviders];
    return providers.allValues.firstObject.carrierName;
} else {
    CTCarrier* provider = [networkInfo subscriberCellularProvider];
    return provider.carrierName;
}

Cellular Status

디바이스의 데이터 사용 상태입니다. 타입은 boolean입니다.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>

+ (BOOL) isCellular {
    return [#ClassName# getNetworkInfo] == CELLULAR;
}

typedef enum : NSInteger {
    WIFI,
    CELLULAR,
    NONE
} ABNetwork;

+ (ABNetwork) getNetworkInfo {
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    
    SCNetworkReachabilityRef reachability
        = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress);
    if (reachability == nil) {
        return NONE;
    }
    
    SCNetworkReachabilityFlags flags;
    if (!SCNetworkReachabilityGetFlags(reachability, &flags)) {
        return NONE;
    }
    
    if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) {
        return NONE;
    }
    
    if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0)
        && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)
             && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0))
    {
        return NONE;
    }
    
    if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) {
        return CELLULAR;
    } else {
        return WIFI;
    }
}

WiFi Status

WiFi 사용 여부를 확인할 수 있습니다. 타입은 boolean입니다.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>

+ (BOOL) isWifi {
    return [#ClassName# getNetworkInfo] == WIFI;
}

typedef enum : NSInteger {
    WIFI,
    CELLULAR,
    NONE
} ABNetwork;

+ (ABNetwork) getNetworkInfo {
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    
    SCNetworkReachabilityRef reachability
        = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress);
    if (reachability == nil) {
        return NONE;
    }
    
    SCNetworkReachabilityFlags flags;
    if (!SCNetworkReachabilityGetFlags(reachability, &flags)) {
        return NONE;
    }
    
    if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) {
        return NONE;
    }
    
    if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0)
        && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)
             && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0))
    {
        return NONE;
    }
    
    if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) {
        return CELLULAR;
    } else {
        return WIFI;
    }
}

Package Name

플리케이션 패키지 이름입니다. 타입은 NSString*입니다.

1
NSBundle.mainBundle.bundleIdentifier;

Version

애플리케이션 버전입니다. 타입은 NSString*입니다.

1
[NSBundle.mainBundle.infoDictionary objectForKey:@"CFBundleShortVersionString"];

Event Timestamp

이벤트 발생 시간입니다. 타입은 NSNumber*입니다.

예시) 1581043739682

1
[NSNumber numberWithUnsignedLongLong:NSDate.date.timeIntervalSince1970 * 1000];

도움이 되었나요?

더 필요한 내용이 있나요?