iOS Data Spec

iOS Data Spec

Airbridge Device IDlink

  • 설명 : Airbridge 기기 식별자
  • 타입 : NSString*
  • 예시 : "82a16ec9-a273-48b6-9bb2-017eab641109"
#import <AirBridge/AirBridge.h>
AirBridge.deviceUUID;

IDFAlink

  • 설명 : 광고 식별자
  • 타입 : NSString*
  • 예시 : "82a16ec9-a273-48b6-9bb2-017eab641109"
#import <AdSupport/AdSupport.h>
ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;

IFVlink

  • 설명 : IFV
  • 타입 : NSString*
  • 예시 : "82a16ec9-a273-48b6-9bb2-017eab641109"
UIDevice.currentDevice.identifierForVendor.UUIDString;

Limit AD Trackinglink

  • 설명 : 광고 추적 제한 여부
  • 타입 : BOOL
  • 예시 : false
#import <AdSupport/AdSupport.h>
ASIdentifierManager.sharedManager.advertisingTrackingEnabled;

Device Modellink

  • 설명 : 기기 모델명
  • 타입 : NSString*
  • 예시 : "iPhone"
UIDevice.currentDevice.localizedModel;

Device Identifierlink

  • 설명 : 기기 식별명
  • 타입 : NSString*
  • 예시 : "iPhone9,3"
#import <sys/utsname.h>
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];

Device Manufacturerlink

  • 설명 : 기기 제조사
  • 타입 : NSString*
  • 예시 : "Apple"
@"Apple"

OS Namelink

  • 설명 : OS 이름
  • 타입 : NSString*
  • 예시 : "iOS"
UIDevice.currentDevice.systemName;

OS Versionlink

  • 설명 : OS 버전
  • 타입 : NSString*
  • 예시 : "13.3"
UIDevice.currentDevice.systemVersion;

Localelink

  • 설명 : 기기 Locale
  • 타입 : NSString*
  • 예시 : "ko-KR"
+ (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];
}

Timezonelink

  • 설명 : 기기 Timezone
  • 타입 : NSString*
  • 예시 : "Asia/Seoul"
NSTimeZone.systemTimeZone.name;

Orientationlink

  • 설명 : 기기 방향
  • 타입 : NSString*
  • 예시 : "portrait"
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation))
return @"landscape";
else
return @"portrait";

Screen Densitylink

  • 설명 : 기기 화면 Density
  • 타입 : NSString*
  • 예시 : "3.000"
[NSString stringWithFormat:@"%.3f", UIScreen.mainScreen.scale];

Screen Heightlink

  • 설명 : 기기 화면 세로 길이
  • 타입 : NSString*
  • 예시 : "667.0"
[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.height];

Screen Widthlink

  • 설명 : 기기 화면 가로 길이
  • 타입 : NSString*
  • 예시 : "375.0"
[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.width];

Network Carrierlink

  • 설명 : 네트워크 사업자 정보
  • 타입 : NSString*
#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 Statuslink

  • 설명 : 데이터 사용 여부
  • 타입 : boolean
  • 예시 : false
#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 Statuslink

  • 설명 : WiFi 사용 여부
  • 타입 : boolean
  • 예시 : false
#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 Namelink

  • 설명 : 어플리케이션 패키지
  • 타입 : NSString*
  • 예시 : "co.ab180.ablog"
NSBundle.mainBundle.bundleIdentifier;

Versionlink

  • 설명 : 어플리케이션 버전
  • 타입 : NSString*
  • 예시 : "1.1.15"
[NSBundle.mainBundle.infoDictionary objectForKey:@"CFBundleShortVersionString"];

Event Timestamplink

  • 설명 : 이벤트 생성시간
  • 타입 : NSNumber*
  • 예시 : 1581043739682
[NSNumber numberWithUnsignedLongLong:NSDate.date.timeIntervalSince1970 * 1000];