데이터 패칭 - 안드로이드

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

데이터 패칭하기

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

Airbridge Device ID

Airbridge의 기기 식별자 입니다. (예시: 82a16ec9-a273-48b6-9bb2-017eab641109)

안드로이드 SDK

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.common.onSuccessimport co.ab180.airbridge.common.onFailure Airbridge.fetchDeviceUUID( onSuccess = { deviceUUID ->  }, onFailure = { throwable ->  })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallback Airbridge.getDeviceInfo().getUUID(object : AirbridgeCallback.SimpleCallback<String>() { override fun onSuccess(result: String) { }  override fun onFailure(throwable: Throwable) { }})

Airbridge Generated UUID

Airbridge에서 기기별로 인스톨시에 부여하는 랜덤한 UUID 입니다. (예시: 82a16ec9-a273-48b6-9bb2-017eab641109)

안드로이드 SDK

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.common.onSuccessimport co.ab180.airbridge.common.onFailure Airbridge.fetchAirbridgeGeneratedUUID( onSuccess = { airbridgeGeneratedUUID ->  }, onFailure = { throwable ->  })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridge Airbridge.fetchAirbridgeGeneratedUUID { uuid -> }

App Set ID

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

import com.google.android.gms.appset.AppSetimport com.google.android.gms.appset.AppSetIdClientimport com.google.android.gms.appset.AppSetIdInfoimport com.google.android.gms.tasks.Task val client = AppSet.getClient(applicationContext) as AppSetIdClientval task: Task<AppSetIdInfo> = client.appSetIdInfo as Task<AppSetIdInfo> task.addOnSuccessListener({ val appSetIdScope: Int = it.scope val appSetId: String = it.id})

GAID (Google Advertising ID)

구글에서 발급하는 Advertising ID 입니다. (예시: 82a16ec9-a273-48b6-9bb2-017eab641109)

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchGoogleAdvertisingIdInfo( onSuccess = { result -> // GAID result.id // LAT result.isLimitAdTrackingEnabled }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.AdvertisingIdInfo Airbridge.getDeviceInfo().getAdvertisingIdInfo(object : AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() { override fun onSuccess(result: AdvertisingIdInfo) { result.getId() // GAID result.getLimitAdTrackingEnabled() // LAT }  override fun onFailure(throwable: Throwable) { }})

Google Limit AD Tracking

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

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchGoogleAdvertisingIdInfo( onSuccess = { result -> // GAID result.id // LAT result.isLimitAdTrackingEnabled }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.AdvertisingIdInfo Airbridge.getDeviceInfo().getAdvertisingIdInfo(object : AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() { override fun onSuccess(result: AdvertisingIdInfo) { result.getId() // GAID result.getLimitAdTrackingEnabled() // LAT }  override fun onFailure(throwable: Throwable) { }})

Google Install Referrer

Google Play Service에서 전달되어지는 Install Referrer 정보입니다.

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchGoogleInstallReferrerDetails( onSuccess = { result -> }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.ReferrerDetails Airbridge.getDeviceInfo().getGoogleInstallReferrerDetails(object : AirbridgeCallback<ReferrerDetails?> { override fun onSuccess(result: ReferrerDetails?) { } override fun onFailure(throwable: Throwable) {  } override fun onComplete() { }})

OAID (Huawei Advertising ID)

화웨이에서 발급하는 Advertising ID 입니다. (예시: 82a16ec9-a273-48b6-9bb2-017eab641109)

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchHuaweiAdvertisingIdInfo( onSuccess = { result -> // GAID result.id // LAT result.isLimitAdTrackingEnabled }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.AdvertisingIdInfo Airbridge.getDeviceInfo().getHuaweiAdvertisingIdInfo(object : AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() { override fun onSuccess(result: AdvertisingIdInfo) { result.getId() // OAID result.getLimitAdTrackingEnabled() // LAT }  override fun onFailure(throwable: Throwable) { }})

Huawei Limit AD Tracking

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

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchHuaweiAdvertisingIdInfo( onSuccess = { result -> // GAID result.id // LAT result.isLimitAdTrackingEnabled }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.AdvertisingIdInfo Airbridge.getDeviceInfo().getHuaweiAdvertisingIdInfo(object : AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() { override fun onSuccess(result: AdvertisingIdInfo) { result.getId() // OAID result.getLimitAdTrackingEnabled() // LAT }  override fun onFailure(throwable: Throwable) { }})

Huawei Install Referrer

Huawei Mobile Service(HMS Core)에서 전달되어지는 Install Referrer 정보입니다.

안드로이드 SDK

import co.ab180.airbridge.Airbridge Airbridge.fetchHuaweiInstallReferrerDetails( onSuccess = { result -> }, onFailure = { throwable -> })

안드로이드 SDK (Deprecated)

import co.ab180.airbridge.Airbridgeimport co.ab180.airbridge.AirbridgeCallbackimport co.ab180.airbridge.ReferrerDetails Airbridge.getDeviceInfo().getHuaweiInstallReferrerDetails(object : AirbridgeCallback<ReferrerDetails?> { override fun onSuccess(result: ReferrerDetails?) { } override fun onFailure(throwable: Throwable) {  } override fun onComplete() { }})

Device Model

기기의 모델 이름 입니다. (예시: Pixel 3a)

import android.os.Build Build.MODEL // ex : Pixel 3a

Device Manufacturer

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

import android.os.Build Build.MANUFACTURER // ex : Google

OS Name

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

"Android" // use constant string

OS Version

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

import android.os.Build Build.VERSION.RELEASE // ex : 10

Locale

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

import java.util.* // ex : en-US"${Locale.getDefault().language}-${Locale.getDefault().country}"

Timezone

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

import java.util.* TimeZone.getDefault().id // ex : US/Pacific

Orientation

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

import android.content.res.Configurationimport android.content.Context var orientation: Stringif (context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { orientation = "portrait"} else { orientation = "landscape"}

Screen Density

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

import android.util.DisplayMetricsimport android.view.Displayimport android.view.WindowManagerimport android.content.Context val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { val realDisplayMetrics = DisplayMetrics() windowManager.defaultDisplay.getRealMetrics(realDisplayMetrics) val width = realDisplayMetrics.widthPixels val height = realDisplayMetrics.heightPixels val dpi = realDisplayMetrics.densityDpi} else { val displayMetrics = DisplayMetrics() windowManager.defaultDisplay.getMetrics(displayMetrics) try { val width = Display::class.java .getMethod("getRawWidth") .invoke(windowManager.defaultDisplay) as Int val height = Display::class.java .getMethod("getRawHeight") .invoke(windowManager.defaultDisplay) as Int val dpi = displayMetrics.densityDpi } catch (_: Exception) { }}

Screen Width

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

import android.util.DisplayMetricsimport android.view.Displayimport android.view.WindowManagerimport android.content.Context val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { val realDisplayMetrics = DisplayMetrics() windowManager.defaultDisplay.getRealMetrics(realDisplayMetrics) val width = realDisplayMetrics.widthPixels val height = realDisplayMetrics.heightPixels val dpi = realDisplayMetrics.densityDpi} else { val displayMetrics = DisplayMetrics() windowManager.defaultDisplay.getMetrics(displayMetrics) try { val width = Display::class.java .getMethod("getRawWidth") .invoke(windowManager.defaultDisplay) as Int val height = Display::class.java .getMethod("getRawHeight") .invoke(windowManager.defaultDisplay) as Int val dpi = displayMetrics.densityDpi } catch (_: Exception) { }}

Screen Height

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

import android.util.DisplayMetricsimport android.view.Displayimport android.view.WindowManagerimport android.content.Context val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { val realDisplayMetrics = DisplayMetrics() windowManager.defaultDisplay.getRealMetrics(realDisplayMetrics) val width = realDisplayMetrics.widthPixels val height = realDisplayMetrics.heightPixels val dpi = realDisplayMetrics.densityDpi} else { val displayMetrics = DisplayMetrics() windowManager.defaultDisplay.getMetrics(displayMetrics) try { val width = Display::class.java .getMethod("getRawWidth") .invoke(windowManager.defaultDisplay) as Int val height = Display::class.java .getMethod("getRawHeight") .invoke(windowManager.defaultDisplay) as Int val dpi = displayMetrics.densityDpi } catch (_: Exception) { }}

Longitude

현재 기기의 LastKnownLocation의 경도 값 입니다.

import android.location.Locationimport android.location.LocationManager val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManagerval gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)val netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)val bestLocation: Location = when { (gpsLocation != null) and (netLocation != null) -> if (gpsLocation.accuracy < netLocation.accuracy) { gpsLocation } else { netLocation } (gpsLocation != null) -> gpsLocation else -> netLocation} ?: return null val latitude = bestLocation?.latitudeval longitude = bestLocation?.longitudeval altitude = bestLocation?.altitudeval speed = bestLocation?.speed

Latitude

현재 기기의 LastKnownLocation의 위도 값 입니다.

import android.location.Locationimport android.location.LocationManager val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManagerval gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)val netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)val bestLocation: Location = when { (gpsLocation != null) and (netLocation != null) -> if (gpsLocation.accuracy < netLocation.accuracy) { gpsLocation } else { netLocation } (gpsLocation != null) -> gpsLocation else -> netLocation} ?: return null val latitude = bestLocation?.latitudeval longitude = bestLocation?.longitudeval altitude = bestLocation?.altitudeval speed = bestLocation?.speed

Altitude

현재 기기의 LastKnownLocation의 고도 값 입니다.

import android.location.Locationimport android.location.LocationManager val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManagerval gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)val netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)val bestLocation: Location = when { (gpsLocation != null) and (netLocation != null) -> if (gpsLocation.accuracy < netLocation.accuracy) { gpsLocation } else { netLocation } (gpsLocation != null) -> gpsLocation else -> netLocation} ?: return null val latitude = bestLocation?.latitudeval longitude = bestLocation?.longitudeval altitude = bestLocation?.altitudeval speed = bestLocation?.speed

Speed

현재 기기의 LastKnownLocation의 속도 값 입니다.

import android.location.Locationimport android.location.LocationManager val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManagerval gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)val netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)val bestLocation: Location = when { (gpsLocation != null) and (netLocation != null) -> if (gpsLocation.accuracy < netLocation.accuracy) { gpsLocation } else { netLocation } (gpsLocation != null) -> gpsLocation else -> netLocation} ?: return null val latitude = bestLocation?.latitudeval longitude = bestLocation?.longitudeval altitude = bestLocation?.altitudeval speed = bestLocation?.speed

Network Carrier

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

import android.telephony.TelephonyManager val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManagerval carrier = telephonyManager.networkOperatorName

Bluetooth Status

해당 기기의 블루투스 사용 여부 입니다. (예시: true)

import android.bluetooth.BluetoothAdapter val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()val enabled = bluetoothAdapter.isEnabled

Cellular Status

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

import android.net.ConnectivityManagerimport android.net.NetworkCapabilitiesimport android.content.Context val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val activeNetwork = connectivityManager.activeNetwork val capabilities = connectivityManager.getNetworkCapabilities(activeNetwork) val cellularEnabled = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)} else { val networkInfo = connectivityManager.activeNetworkInfo val cellularEnabled = (networkInfo.type == ConnectivityManager.TYPE_MOBILE)}

Wifi Status

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

import android.net.ConnectivityManagerimport android.net.NetworkCapabilitiesimport android.content.Context val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val activeNetwork = connectivityManager.activeNetwork val capabilities = connectivityManager.getNetworkCapabilities(activeNetwork) val wifiEnabled = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)} else { val networkInfo = connectivityManager.activeNetworkInfo val wifiEnabled = (networkInfo.type == ConnectivityManager.TYPE_WIFI)}

Package Name

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

import android.content.pm.PackageManagerimport android.content.Context var packageName = ""try { val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) packageName = packageInfo.packageName} catch (e: PackageManager.NameNotFoundException) { }

Version

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

import android.content.pm.PackageManagerimport android.content.Context var versionName = ""try { val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) versionName = packageInfo.versionName} catch (e: PackageManager.NameNotFoundException) { }

Event Timestamp

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

System.currentTimeMillis()