반응형
단순 interface만 사용하면 재미없을거같아서 요즘 안드로이드에서 많이 보이는 interface스타일로 ADID를 가저와보려고 합니다.
시작하기전에 구글에 ADID에대한 설명을 간략하게 읽고 시작하는걸 추천드립니다.
Android 광고 ID 사용
Google Play 서비스 버전 4.0에서는 광고 및 분석 제공업체에서 사용할 수 있는 새 API 및 ID를 도입했습니다. 이러한 ID 사용에 대한 약관은 아래와 같습니다.
- 사용: Android 광고 식별자는 광고 및 사용자 분석에만 사용해야 합니다. 각 ID 액세스에서 '관심기반 광고 선택 해제' 또는 '광고 맞춤설정 선택 해제' 설정 상태를 확인해야 합니다.
- 개인 식별 정보 또는 기타 식별자와 연결: 광고 식별자는 사용자의 명시적인 동의 없이 개인 식별 정보에 연결되거나 영구적인 기기 식별자(예: SSAID, MAC 주소, IMEI, 등)에 연결되면 안 됩니다.
- 사용자 선택 존중: 재설정 시 사용자의 명시적인 동의 없이 새 광고 식별자를 기존 광고 식별자 또는 기존 광고 식별자에서 파생된 데이터에 연결하면 안 됩니다. 또한 사용자의 '관심기반 광고 선택 해제' 또는 '광고 맞춤설정 선택 해제' 설정도 준수해야 합니다. 사용자가 이 설정을 사용하는 경우 광고 식별자를 사용하여 광고 목적으로 사용자 프로필을 만들거나 맞춤 광고로 사용자를 타겟팅하면 안 됩니다. 허용되는 작업에는 문맥 광고, 게재빈도 설정, 전환 추적, 보고 및 보안, 사기 감지 등이 있습니다.
- 사용자에 대한 투명성: 광고 식별자의 수집과 사용 및 이러한 약관을 준수하기 위한 노력은 법적으로 적합한 개인정보 보호 고지를 통해 사용자에게 공개되어야 합니다. Google의 개인정보 보호 기준에 대해 자세히 알아보려면 사용자 데이터 정책을 검토하시기 바랍니다.
- 이용약관 준수. 광고 식별자는 이러한 약관에 따라서만 사용할 수 있으며, 비즈니스 진행 과정에서 식별자를 공유할 수 있는 모든 관계자의 경우에도 마찬가지입니다. Google Play에 업로드되거나 게시되는 모든 앱은 광고 목적으로 다른 기기 식별자 대신 광고 ID(기기에서 사용 가능한 경우)를 사용해야 합니다.
광고 아이디는 유저가 임의대로 변경할수있기때문에 중요한 핵심 키값으로 사용하면 안되고 참고자료 정도로만 사용되어야 합니다. 광고 아이디를 변경할수있는 이유는 개인정보약관에 따른 법이 있다고 하는데 자세한건 구글 공홈을 참고해주세요. ㅎㅎ
일단 성공과 실패를 알려줄 리스너들을 생성해줍니다.
public interface GAIDCallback{
fun onSucces(result: String?)
fun onFail(e:Exception)
}
광고아이디를 가저오기위해선 백그라운드에서 진행해야하기 때문에 AsyncTask클래스를 하나 만들어 주세요.
class GAIDTask(): AsyncTask<Void, Void, String>() {
override fun doInBackground(vararg params: Void?): String? {
}
override fun onPreExecute() {
}
override fun onPostExecute(result: String?) {
}
}
필요한 변수들을 생성자로 받아와줍니다.
class GAIDTask(ctx: Context, callback: GAIDCallback):
AsyncTask<Void, Void, String>() {
private var ctx: Context = ctx
private var idCallback: GAIDCallback = callback
private lateinit var mException: Exception
}
그후 doInBackground 펑션에 광고아이디를 가저오는 로직을 추가하고 onPostExecute에서 결과값을 리스너에 알려줍니다.
class GAIDTask(ctx: Context, callback: GAIDCallback): AsyncTask<Void, Void, String>() {
private var ctx: Context = ctx
private var idCallback: GAIDCallback = callback
private lateinit var mException: Exception
override fun onPreExecute() {
super.onPreExecute()
// ...
}
override fun doInBackground(vararg params: Void?): String? {
var idInfo: AdvertisingIdClient.Info? = null
try {
idInfo = AdvertisingIdClient.getAdvertisingIdInfo(ctx)
} catch (e: GooglePlayServicesNotAvailableException) {
mException = e
} catch (e: GooglePlayServicesRepairableException) {
mException = e
} catch (e: Exception) {
mException = e
}
var advertId: String? = null
try {
advertId = idInfo!!.id
} catch (e: Exception) {
mException = e
}
return advertId
}
override fun onPostExecute(result: String?) {
Log.i("tag","## result : "+ result);
if (idCallback!=null && result!=null){
idCallback.onSucces(result)
} else{
idCallback.onFail(mException)
}
}
}
유연한 메모리 관리를 위해 가저온 context를 weakrefernce로 다시 구현
class GoogleUtils {
public interface GAIDCallback{
fun onSucces(result: String?)
fun onFail(e:Exception)
}
class GAIDTask(ctx: Context, callback: GAIDCallback): AsyncTask<Void, Void, String>() {
private var ctx: WeakReference<Context> = WeakReference<Context>(ctx)
private var idCallback: GAIDCallback = callback
private lateinit var mException: Exception
override fun onPreExecute() {
super.onPreExecute()
// ...
}
override fun doInBackground(vararg params: Void?): String? {
var idInfo: AdvertisingIdClient.Info? = null
try {
idInfo = AdvertisingIdClient.getAdvertisingIdInfo(ctx.get())
} catch (e: GooglePlayServicesNotAvailableException) {
mException = e
} catch (e: GooglePlayServicesRepairableException) {
mException = e
} catch (e: Exception) {
mException = e
}
var advertId: String? = null
try {
advertId = idInfo!!.id
} catch (e: Exception) {
mException = e
}
return advertId
}
override fun onPostExecute(result: String?) {
Log.i("tag","## result : "+ result);
if (idCallback!=null && result!=null){
idCallback.onSucces(result)
} else{
idCallback.onFail(mException)
}
}
}
}
사용해보기
GoogleUtils.GAIDTask(context, object : GoogleUtils.GAIDCallback {
override fun onSucces(result: String?) {
if (result != null) {
toast("## result : " + result)
}
}
override fun onFail(e: Exception) {
if (e != null) {
toast("## ecepttion : " + e)
}
}
}).execute()
- 리스너로 간단하게 백그라운드로 동작해 메인 쓰레드에 결과값을 찍어줄수 있습니다.
끝.!
반응형
'AOS' 카테고리의 다른 글
(안드로이드)recycleview 만들기 1편 (기본) (0) | 2020.02.27 |
---|---|
(안드로이드) webview 관련 정리2 (0) | 2020.02.14 |
(공통) 외부에서 앱실행(계속수정중) (0) | 2020.02.03 |
(안드로이드)공유하기 (0) | 2020.01.20 |
(안드로이드) interface 로 activity기능 fragment에서 사용하기 (0) | 2020.01.14 |