공식 문서
안드로이드에서 광고 제공자를 위해 공식적으로 제공하는 기기 식별자. 광고 제공자는 이 ID를 수집해서 유저 맞춤형 광고를 내보낼 수 있고, 유저는 기기 설정을 통해 Ad-ID 수집을 허용할지 스스로 결정할 수 있다.
사족으로 애플은 IDFA라는 별개의 광고 ID를 제공한다.
Ad-ID 수집을 위해 구글에서 제공하는 라이브러리는 두 가지가 있다. 그러나 현재 두 번째 것은 deprecate 되어서 선택지는 사실상 하나뿐이다.
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-000000000000
과 isLimitAdTrackingEnabled
값 true를 리턴한다.
Ad-ID 수집을 위해 유니티에서 제공하는 라이브러리로 Application.RequestAdvertisingIdentifierAsync
가 있었지만 2020.1.0 버전부터 삭제되었다.
그 대안으로는 광고 툴인 Unity Ads를 사용하거나 AndroidJavaObject
로 안드로이드 네이티브 라이브러리를 직접 호출하는 방법이 있다. 그러나 Unity Ads는 너무 덩치가 크고 유료 툴이기 때문에, Ad-ID 수집용으로만 쓰기에는 후자가 더 효율적이라 판단된다.
아래는 후자를 적용한 예제 코드이다.
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