[안드로이드] FCM 토큰 저장방법 개별 보내는 방법 SharedPreferences 사용 


이전 포스팅은 걍 설치한 사람들한테 죄다 다 보내는 방법이었다.


2017/07/10 - [Yame Programmer/Android] - [안드로이드] FCM 푸시메세지 웹서버에서 보내기




그런데 우린 특정인들에게만 보내고 싶을때가 있다



그런데 망할 네이티브와 웹뷰간의 세션공유도 어렵고 쿠키가져오는것도 뭔말인지도 모르겠고


3일을 삽질하다가 그냥 방법을 바꿔버리기로 했다



웹뷰에 있는 js를 안드로이드 네이티브에서 호출을 할 수 있다는걸 알았기에



안드로이드에서 토큰값을 JS로 날려주고 JS에선 사용자ID값과 토큰을 같이 서버로 날려 저장하는


방식을 사용하기로 한다.



우선 안드로이드에서 JS를 호출 하는 방법인다. 물론 변수도 같이 날려줄 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
        // 웹뷰 셋팅팅
       mWebView = (WebView)findViewById(webView);
 
        // 자바스크립트 사용을 반드시 true로 해야 한다
        mWebView.getSettings().setJavaScriptEnabled(true);
 
        mWebView.loadUrl(myUrl+"/mobile/login");
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.setWebViewClient(new WebViewClientClass());
 
        mWebView.addJavascriptInterface(new AndroidBridge(), "android");
        //추가한 라인
        FirebaseMessaging.getInstance().subscribeToTopic("ALL");
        Log.d("아오","테스트");
 
    }
cs



10번 라인을 꼭 추가해준 후



1
mWebView.loadUrl("javascript:setMessage('"+token+"')");
cs


URL요청하는 부분에다가 저거 한줄 넣으면


해당 페이지의  setMessage 라는 펑션이 작동 한다!!!! 물론 저 안에 토큰이라는 변수값도 함께!!!



당연히 js에는



1
2
3
4
5
6
7
8
9
10
11
12
13
function setMessage(arg) {
    // alert(arg);
    var param = {};
    param.token = arg;
    gPost("/저장하러 날릴 URL"
            ,param
            , function(response){
                if(!response.result){
                    alert("디바이스 정보 저장 오류 어플리케이션을 다시 시작해 주십시오");
                }
            });
     
cs



이런식으로 같은 이름의 펑션을 만들어 주어야 한다.





이렇게 하면 토큰과 사용자 ID를 묶어서 저장할 수가 있다.




여기서 문제는 저 토큰값을 어떻게 가지고 오느냐이다.



토큰값은 어플 설치될때 한번 생성되는데 그걸 어디다 저장할까?


토큰 한줄 저장하자고 로컬DB사용하는건 좀 오버하는거 같다


그래서 찾아낸것이


SharedPreferences  바로 이것!@!!!!!!



우왕... 개짱.. 짱짱맨.. 그냥 데이터 파일로 저장하는거임



다시 안드로이드의 토큰생성하는 곳을 가보자



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 private void sendRegistrationToServer(String token) {
        // Add custom implementation, as needed.
 
        // 만들어진 토큰을 저장한다!!!
        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("token", token);
        editor.commit();
        // 여기까지!!!
 
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("Token", token)
                .build();
 
        //request
        Request request = new Request.Builder()
                .url("이제 이건 노신경")
                .post(body)
                .build();
 
        try {
            client.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
cs



5~8번 라인을 추가해주도록 하자 


그럼 불러올땐


1
2
3
4
   // 저장해놨던 토큰값 가져와서 전달
   SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
   String token =  pref.getString("token""");
   mWebView.loadUrl("javascript:setMessage('"+token+"')");
cs



이렇게 토큰이라는 이름으로 불러오면 된다!!!


그러면 끝!!!


이제 사용자 아이디와토큰을 묶어서 디비에 저장해놓고


보내고 싶은사람한테 골라서 보내면 된다!!



+ Recent posts