데이터 패칭 - 안드로이드

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

    데이터 패칭하기

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

    Airbridge Device ID

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

    안드로이드 SDK (v4)

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

    안드로이드 SDK (Previous)

    123456789101112
    import co.ab180.airbridge.Airbridge
    import 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 (v4)

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

    안드로이드 SDK (Previous)

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

    App Set ID

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

    123456789101112
    import com.google.android.gms.appset.AppSet
    import com.google.android.gms.appset.AppSetIdClient
    import com.google.android.gms.appset.AppSetIdInfo
    import com.google.android.gms.tasks.Task
    
    val client = AppSet.getClient(applicationContext) as AppSetIdClient
    val 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 (v4)

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

    안드로이드 SDK (Previous)

    1234567891011121314
    import co.ab180.airbridge.Airbridge
    import co.ab180.airbridge.AirbridgeCallback
    import 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 (v4)

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

    안드로이드 SDK (Previous)

    1234567891011121314
    import co.ab180.airbridge.Airbridge
    import co.ab180.airbridge.AirbridgeCallback
    import 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 (v4)

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

    안드로이드 SDK (Previous)

    1234567891011121314151617
    import co.ab180.airbridge.Airbridge
    import co.ab180.airbridge.AirbridgeCallback
    import 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 (v4)

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

    안드로이드 SDK (Previous)

    1234567891011121314
    import co.ab180.airbridge.Airbridge
    import co.ab180.airbridge.AirbridgeCallback
    import 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 (v4)

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

    안드로이드 SDK (Previous)

    1234567891011121314
    import co.ab180.airbridge.Airbridge
    import co.ab180.airbridge.AirbridgeCallback
    import 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 (v4)

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

    안드로이드 SDK (Previous)

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

    One Store Install Referrer

    One Store에서 전달되어지는 Install Referrer 정보입니다.

    안드로이드 SDK (v4)

    v4 에서는 One Store Install Referrer 를 지원하지 않습니다.

    안드로이드 SDK (Previous)

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

    Device Model

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

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

    Device Manufacturer

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

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

    OS Name

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

    1
    "Android" // use constant string

    OS Version

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

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

    Locale

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

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

    Timezone

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

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

    Orientation

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

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

    Screen Density

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

    12345678910111213141516171819202122232425
    import android.util.DisplayMetrics
    import android.view.Display
    import android.view.WindowManager
    import android.content.Context
    
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    if (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)

    12345678910111213141516171819202122232425
    import android.util.DisplayMetrics
    import android.view.Display
    import android.view.WindowManager
    import android.content.Context
    
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    if (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)

    12345678910111213141516171819202122232425
    import android.util.DisplayMetrics
    import android.view.Display
    import android.view.WindowManager
    import android.content.Context
    
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    if (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의 경도 값 입니다.

    12345678910111213141516
    import android.location.Location
    import android.location.LocationManager
    
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    val 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?.latitude
    val longitude = bestLocation?.longitude
    val altitude = bestLocation?.altitude
    val speed = bestLocation?.speed

    Latitude

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

    12345678910111213141516
    import android.location.Location
    import android.location.LocationManager
    
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    val 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?.latitude
    val longitude = bestLocation?.longitude
    val altitude = bestLocation?.altitude
    val speed = bestLocation?.speed

    Altitude

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

    12345678910111213141516
    import android.location.Location
    import android.location.LocationManager
    
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    val 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?.latitude
    val longitude = bestLocation?.longitude
    val altitude = bestLocation?.altitude
    val speed = bestLocation?.speed

    Speed

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

    12345678910111213141516
    import android.location.Location
    import android.location.LocationManager
    
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    val 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?.latitude
    val longitude = bestLocation?.longitude
    val altitude = bestLocation?.altitude
    val speed = bestLocation?.speed

    Network Carrier

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

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

    Bluetooth Status

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

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

    Cellular Status

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

    1234567891011121314
    import android.net.ConnectivityManager
    import android.net.NetworkCapabilities
    import 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)

    1234567891011121314
    import android.net.ConnectivityManager
    import android.net.NetworkCapabilities
    import 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)

    12345678910
    import android.content.pm.PackageManager
    import 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)

    12345678910
    import android.content.pm.PackageManager
    import 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)

    1
    System.currentTimeMillis()

    도움이 되었나요?

    더 필요한 내용이 있나요?