Android와 Unity에서 Ad-ID 수집

Jonghwan Choi·2023년 6월 1일
0

Unity Android App

목록 보기
6/6

Ad-ID 란?

공식 문서
안드로이드에서 광고 제공자를 위해 공식적으로 제공하는 기기 식별자. 광고 제공자는 이 ID를 수집해서 유저 맞춤형 광고를 내보낼 수 있고, 유저는 기기 설정을 통해 Ad-ID 수집을 허용할지 스스로 결정할 수 있다.

사족으로 애플은 IDFA라는 별개의 광고 ID를 제공한다.

Android

기능 구현

Ad-ID 수집을 위해 구글에서 제공하는 라이브러리는 두 가지가 있다. 그러나 현재 두 번째 것은 deprecate 되어서 선택지는 사실상 하나뿐이다.

module 수준 build.gradle

dependencies{
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
}

구현부

CoroutineScope(Dispatchers.IO).launch {
    val adId = AdvertisingIdClient.getAdvertisingIdInfo(activity)
    Log.d(TAG, "adId: ${adId.id}, isLimitedAdTrackingEnabled: ${adId.isLimitAdTrackingEnabled}" )

    if (adId.isLimitedAdTrackingEnabled == false) {
        // do something with Ad-ID
    }
}

getAdvertisingIdInfo() 메서드를 메인 스레드에서 호출하면 IllegalStateException이 뜬다. 그래서 직접 비동기 처리를 해 주어야 한다. 위 코드에선 코루틴을 이용했다.

리턴되는 AdvertisingIdClient.Info 객체에는 다음과 같이 필드값 2개가 들어 있습니다.

  • string adId
  • boolean isLimitAdTrackingEnabled (Ad-ID 수집 금지: true, 허용: false)

권한 부여

공식문서
Target SDK 33 이상에서 Ad-ID를 수집할 경우 AndroidManifest.xml에 아래와 같이 권한 선언을 해야 한다.

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

권한을 선언하지 않거나 유저가 Ad-ID를 삭제할 경우 AdvertisingIdClient에서는 AdId 값 00000000-0000-0000-0000-000000000000isLimitAdTrackingEnabled 값 true를 리턴한다.

Unity

기능 구현

Ad-ID 수집을 위해 유니티에서 제공하는 라이브러리로 Application.RequestAdvertisingIdentifierAsync 가 있었지만 2020.1.0 버전부터 삭제되었다.

그 대안으로는 광고 툴인 Unity Ads를 사용하거나 AndroidJavaObject로 안드로이드 네이티브 라이브러리를 직접 호출하는 방법이 있다. 그러나 Unity Ads는 너무 덩치가 크고 유료 툴이기 때문에, Ad-ID 수집용으로만 쓰기에는 후자가 더 효율적이라 판단된다.

아래는 후자를 적용한 예제 코드이다.

mainTemplate.gradle

dependencies{
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
}

구현부

코드 참고

string adId = "";
AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = up.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass client = new AndroidJavaClass("com.google.android.gms.ads.identifier.AdvertisingIdClient");
AndroidJavaObject adInfo = client.CallStatic<AndroidJavaObject>("getAdvertisingIdInfo", currentActivity);

adId = adInfo.Call<string>("getId").ToString();

//do something with adId
profile
유니티 게임 클라이언트 개발자를 꿈꾸는 뉴비

0개의 댓글