티스토리 뷰



안녕하세요 박스여우입니다.

지난번에 작업하다 만 GCM구현을 마저 해보도록 하겠습니다.



gcm-server.jar

json-simple-1.1.1.jar


우선 push message를 전송하는 서버 프로젝트를 이클립스에서 생성하고, 위의 Json과 GCM라이브러리를 다운받아서 Build Path를 해 주세요

그리고 메인 클래스를 생성한 뒤에, 아래 코드를 작성합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        String regId = "Registeration ID!";
        String Text = "Test Message";
        List<String> list = new ArrayList<String>(); //클라이언트 registeration id 리스트
        list.add(regId);
        try {
        Sender sender = new Sender("API Key");
        Message message = new Message.Builder().addData("msg", URLEncoder.encode(Text, "EUC-KR")).build();
        MulticastResult multiResult = sender.send(message, list, 5);
 
        if (multiResult != null) {
            List<Result> resultList = multiResult.getResults();
            int i=0;
            for (Result result : resultList) {
                if(result.getMessageId()==null||result.getMessageId().equals("null")){
                    //등록되지 않은 GCM 처리. 해당 아이디를 삭제해야 권장.
                }
                i++;
            }
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
cs


제가 3부분을 파랑색으로 중요표시를 해 두었고, 한 줄을 연녹색으로 중요표시를 해 두었습니다. 우선, 파랑색의 Registeration ID는 GCM-1편 에서 작성된 앱을 통해 등록된 앱의 regid입니다. 안드로이드 스튜디오를 통해 앱을 작동하다 보면 콘솔에 regID가 나올 겁니다. 그걸 복사해서 저 부분에 넣어주시고,


두 번째로 파랑색의 Test Text부분은 앱에 전송할 메세지의 내용입니다. 그리고 세 번째로 API Key부분! API key는 마찬가지로 GCM-1편에서 프로젝트를 생성하여 얻은 프로젝트의 API Key입니다. 그 API Key를 저 부분에 붙여넣으시면 됩니다.


실질적으로 가장 중요한 메세지 전송 부분은 연녹색으로 중요표시를 해 둔부분과 바로 아래 부분입니다. json을 사용하여 msg라는 이름의 Key에 대응하는 String 형 Text를 넣어준 것 입니다. 여기서 EUC-KR로 인코딩 해 주는 이유는 인코딩 해주지 않으면 한글이 깨져서 전송되기 때문입니다. 마찬가지로 클라이언트에서는 디코딩을 해줘야 하구요. 


그럼 실제 message 전송 서버 작성은 끝났습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
        String msg = intent.getStringExtra("msg");
        try {
            msg = URLDecoder.decode(msg, "EUC-KR");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(R.drawable.logo_small, "DSM 알리미 - 소식 왔어요!"System.currentTimeMillis());
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE ;
        PendingIntent pendingIntent = PendingIntent.getActivity(this0new Intent(this, SplashActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(this"DSM 알리미", msg, pendingIntent);
        nm.notify(1234, notification);
 
cs


GCM-1편에 가보면 GCMIntentService 클래스에 이런 메소드가 있습니다. 이 메소드는 서버에서 전송한 push 메세지를 전송받아 실제 띄우는 역할을 맡고 있는 메소드 입니다.


3번 라인의 String msg = intent.getStringExtra("msg")는 아까 서버에서 msg라는 이름의 key에 String 형 text를 넣어서 전송한 것을 다시 받아서 msg라는 이름의 key에서 text를 꺼내는 코드 입니다. 아래 부분들은 얻어낸 text를 사용해 push 메세지를 띄워주는 역할을 합니다.



GCM을 사용한 push message 구현은 모두 마쳤습니다.



만약 API Level (Comple SDK Version)이 23이상 이시라면 http://boxfoxs.tistory.com/266




댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
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 29 30
31
글 보관함