> ## Documentation Index
> Fetch the complete documentation index at: https://help.airbridge.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 데이터 패칭 - 안드로이드

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

## 데이터 패칭하기

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

### Airbridge Device ID

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge
  import co.ab180.airbridge.common.onSuccess
  import co.ab180.airbridge.common.onFailure

  Airbridge.fetchDeviceUUID(
      onSuccess = { deviceUUID ->

      },
      onFailure = { throwable ->

      }
  )
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.common.onSuccess;
  import co.ab180.airbridge.common.onFailure;

  Airbridge.fetchDeviceUUID(
      deviceUUID -> {

      },
      throwable -> {

      }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {
    
      }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;

  Airbridge.getDeviceInfo().getUUID(new AirbridgeCallback.SimpleCallback<String>() {
      @Override
      public void onSuccess(String result) {
    
      }
    
      @Override
      public void onFailure(@NotNull Throwable throwable) {
    
      }
  });
  ```
</CodeGroup>

### Airbridge Generated UUID

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge
  import co.ab180.airbridge.common.onSuccess
  import co.ab180.airbridge.common.onFailure

  Airbridge.fetchAirbridgeGeneratedUUID(
      onSuccess = { airbridgeGeneratedUUID ->

      },
      onFailure = { throwable ->

      }
  )
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.common.onSuccess;
  import co.ab180.airbridge.common.onFailure;

  Airbridge.fetchAirbridgeGeneratedUUID(
      airbridgeGeneratedUUID -> {

      },
      throwable -> {

      }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

  Airbridge.fetchAirbridgeGeneratedUUID { uuid ->

  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchAirbridgeGeneratedUUID((uuid) -> {

  });
  ```
</CodeGroup>

### App Set ID

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.content.Context;

  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.OnSuccessListener;
  import com.google.android.gms.tasks.Task;

  Context context = getApplicationContext();
  AppSetIdClient client = AppSet.getClient(context);
  Task<AppSetIdInfo> task = client.getAppSetIdInfo();

  task.addOnSuccessListener(new OnSuccessListener<AppSetIdInfo>() {
      @Override
      public void onSuccess(AppSetIdInfo info) {
          int appSetIdScope = info.getScope();
          String appSetId = info.getId();
      }
  });
  ```
</CodeGroup>

### GAID (Google Advertising ID)

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

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

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchGoogleAdvertisingIdInfo(
      result -> {
          // GAID
          result.getId();
          // LAT
          result.isLimitAdTrackingEnabled();
      },
      throwable -> {   }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {
    
      }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.AdvertisingIdInfo;

  Airbridge.getDeviceInfo().getGoogleAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
      @Override
      public void onSuccess(AdvertisingIdInfo result) {
              result.getId(); // GAID
          result.getLimitAdTrackingEnabled(); // LAT
      }

      @Override
      public void onFailure(@NotNull Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### Google Limit AD Tracking

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

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

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchGoogleAdvertisingIdInfo(
      result -> {
          // GAID
          result.getId();
          // LAT
          result.isLimitAdTrackingEnabled();
      },
      throwable -> {   }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {
    
      }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.AdvertisingIdInfo;

  Airbridge.getDeviceInfo().getGoogleAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
      @Override
      public void onSuccess(AdvertisingIdInfo result) {
              result.getId(); // GAID
          result.getLimitAdTrackingEnabled(); // LAT
      }

      @Override
      public void onFailure(@NotNull Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### Google Install Referrer

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

  Airbridge.fetchGoogleInstallReferrerDetails(
      onSuccess = { result -> },
      onFailure = { throwable -> }
  )
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchGoogleInstallReferrerDetails(
      result -> {  },
      throwable -> {  }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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() {
    
    }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.ReferrerDetails;

  Airbridge.getDeviceInfo().getGoogleInstallReferrerDetails(new AirbridgeCallback.SimpleCallback<ReferrerDetails>() {
      @Override
      public void onSuccess(ReferrerDetails details) {
          
      }

      @Override
      public void onFailure(Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### OAID (Huawei Advertising ID)

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

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

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchHuaweiAdvertisingIdInfo(
      result -> {
          // GAID
          result.getId();
          // LAT
          result.isLimitAdTrackingEnabled();
      },
      throwable -> {   }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {
    
      }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.AdvertisingIdInfo;

  Airbridge.getDeviceInfo().getHuaweiAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
      @Override
      public void onSuccess(AdvertisingIdInfo result) {
              result.getId(); // OAID
          result.getLimitAdTrackingEnabled(); // LAT
      }

      @Override
      public void onFailure(@NotNull Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### Huawei Limit AD Tracking

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

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

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchHuaweiAdvertisingIdInfo(
      result -> {
          // GAID
          result.getId();
          // LAT
          result.isLimitAdTrackingEnabled();
      },
      throwable -> {   }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {
    
      }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.AdvertisingIdInfo;

  Airbridge.getDeviceInfo().getHuaweiAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
      @Override
      public void onSuccess(AdvertisingIdInfo result) {
              result.getId(); // OAID
          result.getLimitAdTrackingEnabled(); // LAT
      }

      @Override
      public void onFailure(@NotNull Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### Huawei Install Referrer

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

#### 안드로이드 SDK

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge

  Airbridge.fetchHuaweiInstallReferrerDetails(
      onSuccess = { result -> },
      onFailure = { throwable -> }
  )
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;

  Airbridge.fetchHuaweiInstallReferrerDetails(
      result -> {  },
      throwable -> {  }
  );
  ```
</CodeGroup>

#### 안드로이드 SDK (Deprecated)

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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() {
    
    }
  })
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import co.ab180.airbridge.Airbridge;
  import co.ab180.airbridge.AirbridgeCallback;
  import co.ab180.airbridge.ReferrerDetails;

  Airbridge.getDeviceInfo().getHuaweiInstallReferrerDetails(new AirbridgeCallback.SimpleCallback<ReferrerDetails>() {
      @Override
      public void onSuccess(ReferrerDetails details) {
          
      }

      @Override
      public void onFailure(Throwable throwable) {

      }
  });
  ```
</CodeGroup>

### Device Model

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build

  Build.MODEL // ex : Pixel 3a
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build;

  Build.MODEL; // ex : Pixel 3a
  ```
</CodeGroup>

### Device Manufacturer

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build

  Build.MANUFACTURER // ex : Google
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build;

  Build.MANUFACTURER; // ex : Google
  ```
</CodeGroup>

### OS Name

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  "Android" // use constant string
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  "Android" // use constant string
  ```
</CodeGroup>

### OS Version

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build

  Build.VERSION.RELEASE // ex : 10
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.os.Build;

  Build.VERSION.RELEASE; // ex : 10
  ```
</CodeGroup>

### Locale

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import java.util.*

  // ex : en-US
  "${Locale.getDefault().language}-${Locale.getDefault().country}"
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import java.util.*;

  // ex : en-US
  String.format("%s-%s", Locale.getDefault().getLanguage(), Locale.getDefault().getCountry());
  ```
</CodeGroup>

### Timezone

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import java.util.*

  TimeZone.getDefault().id // ex : US/Pacific
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import java.util.*;

  TimeZone.getDefault().getId(); // ex : US/Pacific
  ```
</CodeGroup>

### Orientation

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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"
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.content.Context;
  import android.content.res.Configuration;

  String orientation;
  if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
      orientation = "portrait";
  } else {
      orientation = "landscape";
  }
  ```
</CodeGroup>

### Screen Density

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) { }
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.util.DisplayMetrics;
  import android.view.Display;
  import android.view.WindowManager;
  import android.content.Context;

  WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      DisplayMetrics realDisplayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getRealMetrics(realDisplayMetrics);
      int width = realDisplayMetrics.widthPixels;
      int height = realDisplayMetrics.heightPixels;
      int dpi = realDisplayMetrics.densityDpi;
  } else {
      DisplayMetrics displayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getMetrics(displayMetrics);
      try {
          int width = (int) Display.class
                  .getMethod("getRawWidth")
                  .invoke(windowManager.getDefaultDisplay());
          int height = (int) Display.class
                  .getMethod("getRawHeight")
                  .invoke(windowManager.getDefaultDisplay());
          int dpi = displayMetrics.densityDpi;
     } catch (Exception e) { }
  }
  ```
</CodeGroup>

### Screen Width

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) { }
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.util.DisplayMetrics;
  import android.view.Display;
  import android.view.WindowManager;
  import android.content.Context;

  WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      DisplayMetrics realDisplayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getRealMetrics(realDisplayMetrics);
      int width = realDisplayMetrics.widthPixels;
      int height = realDisplayMetrics.heightPixels;
      int dpi = realDisplayMetrics.densityDpi;
  } else {
      DisplayMetrics displayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getMetrics(displayMetrics);
      try {
          int width = (int) Display.class
                  .getMethod("getRawWidth")
                  .invoke(windowManager.getDefaultDisplay());
          int height = (int) Display.class
                  .getMethod("getRawHeight")
                  .invoke(windowManager.getDefaultDisplay());
          int dpi = displayMetrics.densityDpi;
     } catch (Exception e) { }
  }
  ```
</CodeGroup>

### Screen Height

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) { }
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.util.DisplayMetrics;
  import android.view.Display;
  import android.view.WindowManager;
  import android.content.Context;

  WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      DisplayMetrics realDisplayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getRealMetrics(realDisplayMetrics);
      int width = realDisplayMetrics.widthPixels;
      int height = realDisplayMetrics.heightPixels;
      int dpi = realDisplayMetrics.densityDpi;
  } else {
      DisplayMetrics displayMetrics = new DisplayMetrics();
      windowManager.getDefaultDisplay().getMetrics(displayMetrics);
      try {
          int width = (int) Display.class
                  .getMethod("getRawWidth")
                  .invoke(windowManager.getDefaultDisplay());
          int height = (int) Display.class
                  .getMethod("getRawHeight")
                  .invoke(windowManager.getDefaultDisplay());
          int dpi = displayMetrics.densityDpi;
     } catch (Exception e) { }
  }
  ```
</CodeGroup>

### Longitude

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.location.Location;
  import android.location.LocationManager;

  LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
  Location gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  Location netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  Location bestLocation = null;
          
  if ((gpsLocation != null) && (netLocation != null)) {
      if (gpsLocation.getAccuracy() < netLocation.getAccuracy()) {
          bestLocation = gpsLocation;
      } else {
          bestLocation = netLocation;
      }
  } else if (gpsLocation != null) {
      bestLocation = gpsLocation;
  } else {
      bestLocation = netLocation;
  }

  if (bestLocation != null) {
      double latitude = bestLocation.getLatitude();
      double longitude = bestLocation.getLongitude();
      double altitude = bestLocation.getAltitude();
      float speed = bestLocation.getSpeed();
  }
  ```
</CodeGroup>

### Latitude

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.location.Location;
  import android.location.LocationManager;

  LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
  Location gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  Location netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  Location bestLocation = null;
          
  if ((gpsLocation != null) && (netLocation != null)) {
      if (gpsLocation.getAccuracy() < netLocation.getAccuracy()) {
          bestLocation = gpsLocation;
      } else {
          bestLocation = netLocation;
      }
  } else if (gpsLocation != null) {
      bestLocation = gpsLocation;
  } else {
      bestLocation = netLocation;
  }

  if (bestLocation != null) {
      double latitude = bestLocation.getLatitude();
      double longitude = bestLocation.getLongitude();
      double altitude = bestLocation.getAltitude();
      float speed = bestLocation.getSpeed();
  }
  ```
</CodeGroup>

### Altitude

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.location.Location;
  import android.location.LocationManager;

  LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
  Location gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  Location netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  Location bestLocation = null;
          
  if ((gpsLocation != null) && (netLocation != null)) {
      if (gpsLocation.getAccuracy() < netLocation.getAccuracy()) {
          bestLocation = gpsLocation;
      } else {
          bestLocation = netLocation;
      }
  } else if (gpsLocation != null) {
      bestLocation = gpsLocation;
  } else {
      bestLocation = netLocation;
  }

  if (bestLocation != null) {
      double latitude = bestLocation.getLatitude();
      double longitude = bestLocation.getLongitude();
      double altitude = bestLocation.getAltitude();
      float speed = bestLocation.getSpeed();
  }
  ```
</CodeGroup>

### Speed

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.location.Location;
  import android.location.LocationManager;

  LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
  Location gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  Location netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  Location bestLocation = null;
          
  if ((gpsLocation != null) && (netLocation != null)) {
      if (gpsLocation.getAccuracy() < netLocation.getAccuracy()) {
          bestLocation = gpsLocation;
      } else {
          bestLocation = netLocation;
      }
  } else if (gpsLocation != null) {
      bestLocation = gpsLocation;
  } else {
      bestLocation = netLocation;
  }

  if (bestLocation != null) {
      double latitude = bestLocation.getLatitude();
      double longitude = bestLocation.getLongitude();
      double altitude = bestLocation.getAltitude();
      float speed = bestLocation.getSpeed();
  }
  ```
</CodeGroup>

### Network Carrier

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.telephony.TelephonyManager

  val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
  val carrier = telephonyManager.networkOperatorName
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.telephony.TelephonyManager;

  TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  String carrier = telephonyManager.getNetworkOperatorName();
  ```
</CodeGroup>

### Bluetooth Status

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.bluetooth.BluetoothAdapter

  val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
  val enabled = bluetoothAdapter.isEnabled
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.bluetooth.BluetoothAdapter;

  BluetoothAdapter bluetoothAdapter = (BluetoothAdapter) BluetoothAdapter.getDefaultAdapter();
  val enabled = bluetoothAdapter.isEnabled();
  ```
</CodeGroup>

### Cellular Status

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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)
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.net.ConnectivityManager;
  import android.net.Network;
  import android.net.NetworkCapabilities;
  import android.content.Context;

  ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      Network activeNetwork = connectivityManager.getActiveNetwork();
      NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
      boolean cellularEnabled = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
  } else {
      NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
      boolean cellularEnabled = (networkInfo.type == ConnectivityManager.TYPE_MOBILE);
  }
  ```
</CodeGroup>

### Wifi Status

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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)
  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.net.ConnectivityManager;
  import android.net.Network;
  import android.net.NetworkCapabilities;
  import android.content.Context;

  ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      Network activeNetwork = connectivityManager.getActiveNetwork();
      NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
      boolean wifiEnabled = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
  } else {
      NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
      boolean wifiEnabled = (networkInfo.type == ConnectivityManager.TYPE_WIFI);
  }
  ```
</CodeGroup>

### Package Name

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {

  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.content.pm.PackageManager;
  import android.content.pm.PackageInfo;
  import android.content.Context;

  String packageName = "";
  try {
      PackageInfo packageInfo = context.getPackageManager.getPackageInfo(context.packageName, 0)
      packageName = packageInfo.packageName;
  } catch (PackageManager.NameNotFoundException e) {

  }
  ```
</CodeGroup>

### Version

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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) {

  }
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import android.content.pm.PackageManager;
  import android.content.pm.PackageInfo;
  import android.content.Context;

  String packageName = "";
  try {
      PackageInfo packageInfo = context.getPackageManager.getPackageInfo(context.packageName, 0);
      packageName = packageInfo.versionName;
  } catch (PackageManager.NameNotFoundException e) {

  }
  ```
</CodeGroup>

### Event Timestamp

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

<CodeGroup>
  ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  System.currentTimeMillis()
  ```

  ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  System.currentTimeMillis();
  ```
</CodeGroup>

<link rel="alternate" hrefLang="en" href="https://help.airbridge.io/en/developers/fetching-guide-for-android-sdk" />

<link rel="alternate" hrefLang="ko" href="https://help.airbridge.io/ko/developers/fetching-guide-for-android-sdk" />
