본문 바로가기
Android

안드로이드 스튜디오 FCM 기기 고유의 토큰값 받아오기.

by 일용직 코딩노동자 2019. 10. 24.
728x90
반응형

FCM을 통해 푸시알림을 전송을 하는데

기기 고유의 토큰값이 존재합니다.

이 토큰값을 알고있다면 내가 원하는 기기에게만 푸시알림을 전송 할 수 있습니다.

 

public void getToken(){
        //토큰값을 받아옵니다.
        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                        if (!task.isSuccessful()) {
                            return;
                        }
                        ////////////////////토큰이 계속 초기화가 되기때문에 sharedPreferences로 저장하여 초기화 방지////////////////////
                        sharedPreferences = getSharedPreferences("sFile1",MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        token = task.getResult().getToken(); // 사용자가 입력한 저장할 데이터
                        editor.putString("Token1",token); // key, value를 이용하여 저장하는 형태
                        editor.commit();
                        ////////////////////토큰이 계속 초기화가 되기때문에 sharedPreferences로 저장하여 초기화 방지////////////////////
                    }
                });
    }

getToken 메소드를 정의하여 줍니다.

그 후 onCreate안에 

SharedPreferences sharedPreferences = getSharedPreferences("sFile1",MODE_PRIVATE); //저장된 토큰을 불러오기 위한 셋팅
        token = sharedPreferences.getString("Token1",token); //key값과 value값으로 구분된 저장된 토큰값을 불러옵니다.

이 코드도 같이 정의해줍니다.

 

굳이 SharedPreferences를 쓸 필요가 있나 싶기도합니다.

다른분들은 아닐수도 있겠지만 저같은 경우는 토큰값을 WebView를 통해서 웹서버로 보내줍니다.

푸시알림을 웹에서 처리해주기 때문이죠.

 

mWebView.loadUrl("띄우고자하는 웹의 주소?userTokenId="+token);

이런식으로 토큰값을 전달해줍니다.

 

근데 토큰값이 저장하고 WebView를 통해 전달되기 직전에 null값으로 초기화가 되버리더군요.

그것을 방지하기위해 SharedPreferences를 사용하였습니다.

 

앱이 꺼져도 저장을 하기위해 미리 방지를 위해 

onStop 메소드에도 정의했습니다.

@Override
    protected void onStop() {
        super.onStop();

// Activity가 종료되기 전에 저장한다.
//SharedPreferences를 sFile이름, 기본모드로 설정
        SharedPreferences sharedPreferences = getSharedPreferences("sFile1",MODE_PRIVATE);

//저장을 하기위해 editor를 이용하여 값을 저장시켜준다.
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("Token1",token); // key, value를 이용하여 저장하는 형태
        editor.commit();
    }

이렇게 토큰값을 저장하여 TextView에도 띄워서 볼 수 있고, 저처럼 웹서버로 전송도 가능합니다.

 

궁금하신 사항은 댓글 남겨주세요.

728x90
반응형

댓글