우선 com.android.vending.INSTALL_REFERRER 가 정확히 타는 시점이 궁금합니다.
"market://details?id=com.apps.test&referrer=hello"
를 누른 뒤
1. 구글스토어에서 설치 버튼을 눌렀을때
2. 구글스토어에서 설치 버튼을 누른뒤 앱을 실행했을때
둘다 referrer 값을 가져왔음 좋겠는데 현재 제 앱에서는 1번에서만 referrer값을 가져오더라구요 ...
정작 필요한건 2 번이거든요 .
구현하고자하는 기능은
1. A가 앱 다운로드 링크를 공유 "market://details?id=com.apps.test&referrer=A의고유번호"
2. B가 해당 링크를 통해 구글스토어에서 설치 후 실행 시 referrer값이 있으면 첫화면이 Main 페이지가 아닌 회원가입 페이지로 이동
3. B가 회원가입이 완료되면 referrer값으로 전달된 A의 고유번호로 캐쉬 충전
을 구현하고자 합니다. 그래서 com.android.vending.INSTALL_REFERRER 를 사용하려고 시도해보는데 도저히 1번에 2번으로 referrer 값을 넘기는 법을 모르겠어요.
[AndroidMainifest.xml]
<receiver android:exported="true" android:name="com.test.app.InstallReferrerReceiver">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
</intent-filter>
</receiver>
[InstallReferrerReciver.java]
: 받은 referrer이 있으면 intent 를 이용해 MainActivity.class에 넘겨주려고 했습니다.
public class InstallReferrerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent mainIntent = new Intent(context, MainActivity.class);
Log.d("log...","onReceive진입");
String referrer = intent.getStringExtra("referrer");
if( referrer == null || referrer.length() == 0) {
Log.d("referrer", "referrer.length() === 0 ");
}else{
Log.d("referrer", referrer);
mainIntent.putExtra("referrer", referrer);
mainIntent.addFlags(mainIntent.FLAG_ACTIVITY_NEW_TASK);
}
}
}
[MainAcivity] 에서 intent에 저장되어있는 값에 따라 분기를 태워 첫 페이지를 보여주려고 합니다.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent current = getIntent();
Log.d("log...","Main진입");
if (current != null && current.getStringExtra("url") != null) {
// PUSH 통해 들어왔을 때
loadUrl(current.getStringExtra("url"));
notificationNo = current.getStringExtra("notificationNo");
} else if(current != null && current.getStringExtra("referrer") != null){
// 설치를 해서 들어왔을 때 referrer 는 공유 유저 고유 번호
loadUrl("http://local/join/A/"+current.getStringExtra("referrer"));
} else{
// 일반적으로 실행했을때
loadUrl("http://localhost:3000");
}
}
결과적으로는 앱설치시 referrer에 들어온 값을 앱이 실행될때 Main에 넘겨주기만 하면되는데 ..
이게 참 어렵네요 ...
어떻게하면 좋을까요 ?
---- 위에 소스를 실행해서 공유링크를 통해 구글스토어에 접속 및 설치후 실행했을때 찍히는 로그 순서입니다 ----
07-18 01:06:32.689 6092-6092/? D/log...: Main진입
07-18 01:06:33.510 6092-6092/? D/log...: onRecive진입
07-18 01:06:33.510 6092-6092/? D/referrer: A의고유번호
07-18 01:06:34.982 6092-6092/com.test.app D/log...: onRecive진입
07-18 01:06:34.982 6092-6092/com.test.app D/referrer: referrer.length === 0