마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

com.android.vending.INSTALL_REFERRER 에서 MainActivity로 값 넘겨주는 법

0 추천

우선 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

 

유닛룽 (140 포인트) 님이 2016년 7월 18일 질문
유닛룽님이 2016년 7월 19일 수정

1개의 답변

0 추천
그런 것 안됩니다.

 

현실적인 방법을 알려드리면,

A 링크로 설치되는 앱과 일반 앱을 별개로 등록하면 됩니다.
익명사용자 님이 2016년 7월 18일 답변
;;; 음.. 답변우선 감사드려요 그런데 왜 안되는것인지  com.android.vending.INSTALL_REFERRER  실질적으로 타는 시점이 무엇인지 설명해주시면 안될까요?...
ㅠ,ㅠ 저 문서를 보고 만든거에요...! 답변은 감사합니다
...