구글 인스톨 리퍼러 브로드캐스트 동작 방식 변경 안내
팔로우
주요 변경점
2019년 12월 11일, Google 개발자 콘솔을 통해 인스톨 브로드캐스트의 동작 방식 변경에 대한 공지사항이 올라왔습니다. 2020년 3월 1일부로 업데이트되는 구글 플레이 버전부터는 "com.android.vending.INSTALL_REFERRER" 를 사용하는 브로드캐스트 리시버로 구글 인스톨 리퍼러 정보를 전달하지 않습니다.
참고자료 : [Still Using InstallBroadcast? Switch to the Play Referrer API by March 1, 2020]
<application> ... <receiver android:name="com.myapp.googleInstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> ... </application>
[위와 같은 브로드캐스트 리시버로 구글 인스톨 리퍼러를 받을 수 없습니다.]
위 변경점이 적용되는 시점부터는 브로드캐스트 리시버가 아닌, 구글 인스톨 리퍼러 API를 통해서만구글 인스톨 리퍼러 정보를 얻을 수 있습니다.
dependencies { implementation 'com.android.installreferrer:installreferrer:1.0' }
[구글 리퍼러를 받기 위해서는 위와 같이 구글 인스톨 리퍼러 api를 등록해야 합니다.]
디파이너리 SDK 연동 시 변경 사항
디파이너리는 이미 구글 인스톨 리퍼러 API를 이용하여 구글 인스톨 리퍼러 정보를 처리하고 있습니다.
이번 구글의 변경사항을 프로젝트에 적용하기 위해서는 단순하게 안드로이드 프로젝트의 AndroidManifest.xml 파일에서 com.android.vending.INSTALL_REFERRER 를 사용하는 브로드캐스트 리시버를 삭제하는 것만으로 충분합니다.
[[인용:위험:보통]] 주의!!!
구글 인스톨 리퍼러를 통한 유입 측정을 위해서는 구글 인스톨 리퍼러 API를 반드시 gradle에 추가해야 합니다.
디파이너리 SDK의 필수 dependency로 안내를 하고 있으니 다음의 가이드를 참고 부탁 드립니다.
"디파이너리(애드브릭스) Android 연동하기 [Java] : gradle 설정"
다음의 예시와 같은 항목을 AndroidManifest.xml 에서 제거하시는 것을 권장합니다.
<receiver android:name="myapp.packagename.MyMultipleInstallReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>
[자체 인스톨리시버 클래스 사용 시]
<receiver android:name="com.igaworks.v2.core.AbxReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
[디파이너리 제공 인스톨 리시버 클래시 사용 시]
구글 인스톨 리퍼러 데이터 얻어내기
위와 같은 변경 사항을 적용하면 디파이너리 서비스는 아무런 문제 없이 이용을 할 수 있습니다.
하지만 때로는 직접 구글 인스톨 리퍼러 데이터를 얻어내고 활용하셔야 할 때가 있습니다.
이전에는 직접 구글 인스톨 리퍼러를 위한 브로드캐스트 리시버를 생성하여 핸들링하셨다면,
변경사항 이후에는 구글 인스톨 리퍼러 api 를 이용하여 데이터를 얻을 수 있습니다.
다음은 'com.android.installreferrer:installreferrer:1.0' 을 이용하여 구글 인스톨 리퍼러 데이터를 얻는 간단한 샘플 코드입니다.
/** * 구글 인스톨 리퍼러 API 를 통해 데이터를 얻기 위해서 구글플레이 앱에 연결을 시도합니다. * onInstallReferrerSetupFinished의 결과에서 연결이 성공했을 때, 구글 리퍼러 정보를 얻는 작업을 수행합니다. * 아래 샘플은 'com.android.installreferrer:installreferrer:1.0' 을 기준으로 작성 되었습니다. * * */ boolean isEnableTisEnableToGetGoogleInstallRefererDataoGetGR = false; InstallReferrerClient referrerClient; referrerClient = InstallReferrerClient.newBuilder(MyActivity.this).build(); referrerClient.startConnection(new InstallReferrerStateListener() { @Override public void onInstallReferrerSetupFinished(int responseCode) { switch (responseCode) { case InstallReferrerClient.InstallReferrerResponse.OK: // Connection established. // 구글 플레이 앱과 연결이 성공했을 때, 리퍼러 데이터를 얻기 위한 작업을 수행합니다. isEnableToGetGoogleInstallRefererData = true; break; case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED: // API not available on the current Play Store app. break; case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE: // Connection couldn't be established. break; } } @Override public void onInstallReferrerServiceDisconnected() { // Try to restart the connection on the next request to // Google Play by calling the startConnection() method. } }); /** * 구글플레이 앱과 연결이 성공했을 때에 구글 인스톨 리퍼러 데이터를 얻어 오기 위한 작업을 수행합니다. * * */ try { if(isEnableToGetGoogleInstallRefererData == true){ ReferrerDetails response = referrerClient.getInstallReferrer(); String referrerUrl = response.getInstallReferrer(); long referrerClickTime = response.getReferrerClickTimestampSeconds(); long appInstallTime = response.getInstallBeginTimestampSeconds(); } } catch (RemoteException e) { e.printStackTrace(); }