Android Guide

    개요

    Android에서 에어브릿지 이벤트를 구성하는데 필요한 데이터를 수집하는 방법에 대해서 설명합니다.

    Airbridge Device ID

    Airbridge의 기기 식별자 입니다. UUID 버전4 포멧의 형태로 전달됩니다.

    1234567891011121314
    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) {
      
        }
    });

    Airbridge Generated UUID

    Airbridge에서 기기별로 인스톨시에 부여하는 랜덤한 UUID 입니다. UUID 버전4 포멧의 형태로 전달됩니다.

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

    GAID (Google Advertising ID)

    구글에서 발급하는 Advertising ID 입니다. UUID 버전4 포멧의 형태로 전달됩니다.

    12345678910111213141516
    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) {
    
        }
    });

    Google Limit AD Tracking

    기기의 Google Limit AD Tracking 정보 입니다.

    12345678910111213141516
    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) {
    
        }
    });

    Google Install Referrer

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

    123456789101112131415
    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) {
    
        }
    });

    OAID (Huawei Advertising ID)

    화웨이에서 발급하는 Advertising ID 입니다. UUID 버전4 포멧의 형태로 전달됩니다.

    12345678910111213141516
    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) {
    
        }
    });

    Huawei Limit AD Tracking

    기기의 Huawei Limit AD Tracking 정보 입니다.

    12345678910111213141516
    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) {
    
        }
    });

    Huawei Install Referrer

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

    123456789101112131415
    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) {
    
        }
    });

    One Store Install Referrer

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

    123456789101112131415
    import co.ab180.airbridge.Airbridge;
    import co.ab180.airbridge.AirbridgeCallback;
    import co.ab180.airbridge.ReferrerDetails;
    
    Airbridge.getDeviceInfo().getOneStoreInstallReferrerDetails(new AirbridgeCallback.SimpleCallback<ReferrerDetails>() {
        @Override
        public void onSuccess(ReferrerDetails details) {
            
        }
    
        @Override
        public void onFailure(Throwable throwable) {
    
        }
    });

    Device Model

    기기의 모델 이름 입니다.

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

    Device Manufacturer

    기기의 제조사 정보 입니다.

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

    OS Version

    기기의 OS 버전입니다.

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

    Locale

    기기의 Locale 설정 값 입니다.

    1234
    import java.util.*;
    
    // ex : en-US
    String.format("%s-%s", Locale.getDefault().getLanguage(), Locale.getDefault().getCountry());

    Timezone

    기기의 Timezone 설정 값 입니다.

    123
    import java.util.*;
    
    TimeZone.getDefault().getId(); // ex : Asia/Seoul

    Orientation

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

    123456789
    import android.content.Context;
    import android.content.res.Configuration;
    
    String orientation;
    if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        orientation = "portrait";
    } else {
        orientation = "landscape";
    }

    Screen Density

    기기의 실제 화면 Density 값 입니다.

    1234567891011121314151617181920212223242526
    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) { }
    }

    Screen Width

    기기의 실제 화면 너비 값 입니다.

    1234567891011121314151617181920212223242526
    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) { }
    }

    Screen Height

    기기의 실제 화면 높이 값 입니다.

    1234567891011121314151617181920212223242526
    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) { }
    }

    Longitude

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

    1234567891011121314151617181920212223242526
    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();
    }

    Latitude

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

    1234567891011121314151617181920212223242526
    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();
    }

    Altitude

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

    1234567891011121314151617181920212223242526
    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();
    }

    Speed

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

    1234567891011121314151617181920212223242526
    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();
    }

    Network Carrier

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

    1234
    import android.telephony.TelephonyManager;
    
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String carrier = telephonyManager.getNetworkOperatorName();

    Bluetooth Status

    해당 기기의 블루투스 사용 여부 입니다.

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

    Cellular Status

    해당 기기의 모바일 데이터 사용 여부 입니다.

    123456789101112131415
    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);
    }

    Wifi Status

    해당 기기의 Wifi 데이 사용 여부 입니다.

    123456789101112131415
    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);
    }

    Package Name

    해당 어플리케이션의 패키지 명 입니다.

    1234567891011
    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) {
    
    }

    Version

    해당 어플리케이션의 버전 이름 입니다.

    1234567891011
    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) {
    
    }

    Event Timestamp

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

    1
    System.currentTimeMillis();

    도움이 되었나요?

    더 필요한 내용이 있나요?