# Install Referrer 란?
실서비스를 운영할 때 광고는 중요하다.
어떤 광고를 송출하느냐에 따라 서비스로 진입하는 유저의 수가 천차만별이기 때문이다.
하지만 이러한 광고 서비스의 경우 무료로 운영되는 곳은 거의 없으며 대부분 유료 광고를 사용하게 된다.
즉, 광고 하나하나가 다 돈이라는 것이다.
사용자를 끌어들이고, 최소한의 광고비 지출을 하기 위해서는 어떤 광고에서 유저가 얼마나 들어왔는지와 같은 분석이 필요하다.
그렇기에 많은 회사에서는 MixPanel 이나 Analytics 와 같은 데이터 분석 툴을 활용할 줄 아는 데이터 분석가를 두는 것이고 말이다.
특히나 개인적인 서비스를 운영할 때도 이러한 데이터 분석은 더욱 더 큰 장점을 지니게 되는데, 그 이유는 개인이 가지고 있는 돈과 시간에는 한계가 있기 때문이다.
이러한 상황에서 앱을 설치한 유저가 어떤 경로를 통해 앱을 설치하였는지 추적할 수 있게 해주는 것이 바로 Install Referrer API 이다.
* 이 기능은 앱이 플레이스토어에 게시가 되어있어야, 제대로 된 설치 데이터를 받을 수 있습니다.
# 사용 방법
1. 다음 라이브러리를 디펜던시에 추가해준다.
implementation("com.android.installreferrer:installreferrer:2.2")
2. InstallReferrerClient 를 초기화 시켜준다.
val referrerClient = InstallReferrerClient.newBuilder(context).build()
3. referrerClient 의 startConnection 메소드를 호출하여 연결을 시작해준다. 인수로는 InstallReferrerStateListener Listener 를 설정해준다.
fun testMain(){
referrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode){
// 성공 시
InstallReferrerClient.InstallReferrerResponse.OK -> {}
// 디바이스나 앱이 지원하지 않는 기능인 경우
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {}
// 구글 플레이 서비스 사용이 불가능 하거나 네트워크 연결 불안정 등의 상황
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {}
}
}
override fun onInstallReferrerServiceDisconnected() {
}
})
}
4. OK 부분에서 앱 설치 링크 주소를 추출하여, 어느 링크를 통해 진입했는지 파악한다.
fun testMain(){
referrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode){
// 성공 시
InstallReferrerClient.InstallReferrerResponse.OK -> {
val referrerUrl = referrerClient.installReferrer.installReferrer ?: ""
val uriStr = "https://play.google.com/store/apps/details?$referrerUrl"
val uri = Uri.parse(uriStr)
val linkParams = getLinkParams(uri)
Timber.d("InstallReferrer Uri - $uri\nutmParams : $linkParams")
}
// 디바이스나 앱이 지원하지 않는 기능인 경우
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {}
// 구글 플레이 서비스 사용이 불가능 하거나 네트워크 연결 불안정 등의 상황
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {}
}
referrerClient.endConnection()
}
override fun onInstallReferrerServiceDisconnected() {
referrerClient.endConnection()
}
})
}
fun getLinkParams(uri: Uri): Map<String, String> {
val params = mutableMapOf<String, String>()
uri.queryParameterNames.forEach { key ->
params[key] = uri.getQueryParameter(key) ?: ""
}
return params
}
5. 광고 플랫폼에 링크를 등록해준다. 이 때, UTM Paramter 값에 맞춰 링크를 등록한다
- UTM Paramter 를 모르는 경우 검색 참조
- UTM Paramter 를 사용하지 않고 쿼리형식 Key Value 를 설정하는 경우 아무 값이나 넣어도 되지만, 광고 추적시 UTM Parameter 형식으로 추적을 하는 경우가 많기에 이를 추천한다.
https://play.google.com/store/apps/details?id=(패키지명)&referrer=(사용할 referrer 값)
예시) https://play.google.com/store/apps/details?id=dev.gyu.test&referrer=key=value
단, 리다이렉트를 통한 진입 시 = 와 같은 부호가 정상적으로 읽히지 않을 수 있으므로, 아래처럼 URL 인코딩 방식으로 Query 설정을 해보는 것을 추천한다.
https://play.google.com/store/apps/details?id=dev.gyu.test&referrer=key=value
위의 주소를
https://play.google.com/store/apps/details?id=dev.gyu.test&referrer=key%3Dvalue
로 변경
# 테스트 해보기
앱을 플레이스토어에서 직접 다운받지 않고, 개발단에서 테스트 하기 위한 방법은 무척 간단하다.
- http://play.google.com/store/apps/detail?id=(앱패키지)&referrer=(리퍼럴정보들) 링크를 타고 들어간다. (나의 경우 리퍼럴 정보는 다음과 같이 하였다. referrer=utm_source%3DTest%26utm_medium%3DTest)
- 링크 접속 시, 마켓에서 앱 설치 버튼을 누르지 않는다.
- 마켓이 열린 상태로 안드로이드 스튜디오에서 빌드를 한다.
- 테스트 완료
실행 결과
실행 결과 설치 당시 Link 에 담겨져있던 쿼리 파라미터를 정상적으로 가져오는 것을 확인할 수 있다.
테스트 시 플레이스토어와 똑같은 환경에서 테스트 해야하니 Release 빌드를 추천한다.
# 만약 Referrer Info 가 정상적으로 불러와지지 않는 경우
1. 링크 주소를 확인해보고, 아니라면 설치를 한 유저의 플레이스토어 계정이 회사 계정인지 확인해본다.
회사 계정인 경우 정상적인 등록값이 불러와지지 않는다고 하는데 이 부분은 나도 이유는 모르겠음 ..
2. 혹시나 빌드 파일의 패키지네임과 플레이스토어의 패키지 네임이 같지 않은지 확인해보자. 패키지네임이 동일해야한다.