데이터 패칭 - iOS

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

데이터 패칭하기

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

Airbridge Device ID

Airbridge의 기기 식별자 입니다. (예시: 82A16EC9-A273-48B6-9BB2-017EAB641109)

iOS SDK

import Airbridge Airbridge.fetchDeviceUUID { deviceUUID in }

iOS SDK (Deprecated)

import AirBridge AirBridge.deviceUUID

Airbridge Generated UUID

Airbridge에서 기기별로 인스톨시에 부여하는 랜덤한 UUID 입니다. (예시: 82A16EC9-A273-48B6-9BB2-017EAB641109)

iOS SDK

import Airbridge Airbridge.fetchAirbridgeGeneratedUUID { airbridgeGeneratedUUID in }

iOS SDK (Deprecated)

import AirBridge AirBridge.fetchAirbridgeGeneratedUUID { uuid in }

IDFA

애플에서 발급하는 Advertising ID 입니다. (예시: 82A16EC9-A273-48B6-9BB2-017EAB641109)

import AdSupport ASIdentifierManager.shared().advertisingIdentifier.uuidString

IDFV

퍼블리셔가 특정 사용자가 어떤 앱을 설치했는지 파악하는 데 사용할 수 있는 고유 ID 입니다. (예시: 82A16EC9-A273-48B6-9BB2-017EAB641109)

UIDevice.current.identifierForVendor?.uuidString

Limit AD Tracking

기기의 Limit AD Tracking 정보 입니다. (예시: true)

import AdSupport ASIdentifierManager.shared().isAdvertisingTrackingEnabled

Device Model

기기의 모델 이름 입니다. (예시: iPhone)

UIDevice.current.localizedModel

Device Identifier

기기의 모델 식별자 입니다. (예시: iPhone9,3)

var systemInfo = utsname()uname(&systemInfo) return String(cString: &systemInfo.machine.0, encoding: .utf8)

Device Manufacturer

기기의 제조사 정보 입니다. (예시: Apple)

"Apple"

OS Name

기기의 OS 이름입니다. (예시: iOS)

UIDevice.current.systemName

OS Version

기기의 OS 버전입니다. (예시: 13.3)

UIDevice.current.systemVersion

Locale

기기의 Locale 설정 값 입니다. (예시: en-US)

func getSystemLocale() -> String? { guard let language = getSystemLanguage() else { return nil } guard let country = getSystemCountry() else { return nil } return "\(language)-\(country)"} func getSystemLanguage() -> String? { let languages = Locale.preferredLanguages if languages.count < 1 { return nil } let languageSource = languages[0] guard let barIndex = languageSource.range(of: "-") else { return languageSource } return String(languageSource[..<barIndex.lowerBound])} func getSystemCountry() -> String? { return Locale.autoupdatingCurrent.regionCode}

Timezone

기기의 Timezone 설정 값 입니다. (예시: US/Pacific)

TimeZone.current.description

Orientation

기기의 화면 방향 값 입니다. "portrait" 혹은 "landscape" 둘 중 하나의 값 입니다. (예시: portrait)

if UIDevice.current.orientation.isLandscape { return @"landscape"} else { return @"portrait"}

Screen Density

기기의 실제 화면 Density 값 입니다. (예시: 3.000)

String(format: "%.3f", UIScreen.main.scale)

Screen Width

기기의 실제 화면 너비 값 입니다. (예시: 375.0)

String(format: "%.f", UIScreen.main.bounds.size.width)

Screen Height

기기의 실제 화면 높이 값 입니다. (예시: 667.0)

String(format: "%.f", UIScreen.main.bounds.size.height)

Network Carrier

해당 기기의 네트워크 사업자 정보 입니다.

import CoreTelephony let info = CTTelephonyNetworkInfo() if #available(iOS 12.1, *) { let providers = info.serviceSubscriberCellularProviders return providers?.values.first?.carrierName} else { let provider = info.subscriberCellularProvider return provider?.carrierName}

Cellular Status

해당 기기의 모바일 데이터 사용 여부 입니다. (예시: true)

import SystemConfiguration func isCellular() -> Bool { return network() == .cellular} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET)  guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none }  var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none }  if !flags.contains(.reachable) { return .none }  if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}

WiFi Status

해당 기기의 Wifi 데이 사용 여부 입니다. (예시: true)

import SystemConfiguration func isWifi() -> Bool { return network() == .wifi} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET)  guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none }  var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none }  if !flags.contains(.reachable) { return .none }  if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}

Package Name

해당 어플리케이션의 패키지 명 입니다. (예시: co.ab180.ablog)

Bundle.main.bundleIdentifier

Version

해당 어플리케이션의 버전 이름 입니다. (예시: 1.0.0)

Bundle.main.infoDictionary?["CFBundleShortVersionString"]

Event Timestamp

해당 이벤트의 발송 시간(Milliseconds) 입니다. (예시: 1581043739682)

UInt64(Date().timeIntervalSince1970 * 1000)