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

FCM사용시 토큰을 메인 액티비티로 전달하는 방법?

0 추천

GCM엣 FCM으로 마이그레이션을 하고 있습니다.

GCM은 여기 저기 소스 찾아가며 구현했었는데 제가 이제 막 안드를 접한 초보이다 보니 막히는 부분이 생기네요.

기존 GCM 소스에서는 RegistrationIntentService 에서 아래처럼 LocalBroadcastManager를 통해서 MainActivity로 토큰을 넘겨줬습니다.

// GCM Instance ID에 해당하는 토큰을 획득하면 LocalBoardcast에 COMPLETE 액션을 알린다.
// 이때 토큰을 함께 넘겨주어서 UI에 토큰 정보를 활용할 수 있도록 했다.
Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE);
registrationComplete.putExtra("token", token);
LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);

그런데 FCM은 RegistrationIntentService 가 없어진것 같더라구요.

대신 아래처럼 FirebaseInstanceIdService 에서 바로 토큰을 서버로 전송하게 샘플코드가 나와있네요.

public class MyInstanceIDListenerService extends FirebaseInstanceIdService
{
    private static final String TAG = "MyInstanceIDLS";
    @Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + token);
        //sendRegistrationToServer(refreshedToken);
    }
}

그런데 문제는 토큰을 받았다고 바로 전송할게 아니라 로그인을 하게되면 userId와 함께 토큰을 서버로 전송해야 합니다.

웹뷰에서 유저가 로그인 -> 자바스크립트로 메인액티비티 함수 호출 -> 유저 아이디와 토큰을 서버로 전송

이렇게 해야 하는데 토큰값이 저 FirebaseInstanceIdService 안에 있어서 어떻게 해야 할지 모르겠네요.

결론은 저 sendRegistrationToServer 함수와 토큰을 메인 액티비티에 놓고

원하는 타이밍(Html에서 자바스크립트로 호출)에 서버로 전송하고 싶습니다.

까막눈에서 구글검색만으로 앱을 만드려니 모르는게 너무 많네요.

조언 부탁드립니다.

사이타마 (1,090 포인트) 님이 2016년 11월 10일 질문

2개의 답변

0 추천
 
채택된 답변

sendRegistrationToServer 함수 동작 시점에 token을 broadcast하여 

Activity에서 받는 식으로 해보세요.

 

Development Guy (70,570 포인트) 님이 2016년 11월 10일 답변
사이타마님이 2016년 11월 10일 채택됨
원래 GCM에서도 비슷한 방식이었던것 같아서 해보다가 잘 안되서 포기했었는데
다시 한번 도전해봐야겠네요. 감사합니다.
0 추천
익명사용자 님이 2016년 11월 10일 답변
감사합니다. 이런 방법도 있었군요.
...