[안드로이드] FCM 백그라운드에서 진동 오도록 하는 방법
얼마전 포스팅에서 웹서버를 통해 FCM 메세지를 날리는 방법에 대해서 알아보았다
2017/07/10 - [Yame Programmer/Android] - [안드로이드] FCM 토큰 저장방법 개별 보내는 방법 SharedPreferences 사용
2017/07/10 - [Yame Programmer/Android] - [안드로이드] FCM 푸시메세지 웹서버(JAVA)에서 보내기
그런데 문제가 있었다.
어플을 켜놓은 상태에선 진동이 오는데
어플을 끄거나 화면을 끈 상태에선 진동알람도 안오고 화면이 켜지는 것도 안되서
알람이 온줄 모르는 상태가 되버린 것
이것때문에 얼마나 삽질을 했던가..
화면켜지는건 고사하고 아얘 어플 끈 상태에선
상단에 알람바만 조용히 생기고 애초에 onMessageReceived 여기서 지정해 놓은 것들이
아얘 안돌아 가는 것 같았다
삽질을 하다가
결국 스택오버 형님들의 글에서 답을 찾았다
저번 포스팅을 보면 웹서버에서 FCM요청을 할떄
1 2 3 4 5 6 7 8 | JSONObject root = new JSONObject(); JSONObject notification = new JSONObject(); notification.put("body", "공조기 장애 현재상태 : OFF"); notification.put("title", "알림 입니다."); notification.put("icon", "ic_message"); root.put("notification", notification); root.put("to", token); root.put("click_action", "OPEN_ACTIVITY"); | cs |
이런식으로 보냈었는데 6번라인의저 노티피케이션이 문제였다.
노티피케이션으로 날려주면 onMessageReceived가 실행이 안된단다
그래서 저 노티피케이션을 data로 바꾸어 주었다
1 2 3 4 5 6 7 8 | JSONObject root = new JSONObject(); JSONObject notification = new JSONObject(); notification.put("body", "공조기 장애 현재상태 : OFF"); notification.put("title", "알림 입니다."); notification.put("icon", "ic_message"); root.put("data", notification); root.put("to", token); root.put("click_action", "OPEN_ACTIVITY"); // click_action 추가! | cs |
이렇게 바꾸고 나니 백그라운드 상태에서도 설정해놓은 vibrate대로 진동도 잘온다!!
화면켜지는것까진 바라지도 않는다
일단 사용자한테 알람이 왔다고 알리기만 하면 되니까
그렇다면 안드로이드 에서도
받는 부분의 메세지를 다르게 받을 필요가 있었다
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 32 | public void onMessageReceived(RemoteMessage remoteMessage) { //추가한것 // sendNotification(remoteMessage.getData().get("message")); // 이렇게 데이터에 있는걸 키값으로 뽑아 쓰면 된다. String title = remoteMessage.getData().get("title"); String body = remoteMessage.getData().get("body"); sendNotification(title, body); } private void sendNotification(String title, String body) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(title) .setContentText(body) .setAutoCancel(true) .setSound(defaultSoundUri) .setVibrate(new long[]{1000, 1000}) .setLights(Color.BLUE,1,1) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); } | cs |
이렇게 코드를 바꿔주면 된다
기존 코드에서 6,7번 라인과 11번읜 매개변수만 바꿔주면 끝!
후.. 이제 다시 화면도 켜지게 하는 방법을 찾아 떠나보도록 하자....
-------------------------------------------------------------------------------
방법 찾았음 ㅋ
2017/07/12 - [Yame Programmer/Android] - [안드로이드] FCM 화면 깨우기 화면 켜지게 하는 방법
'Yame Programmer > Android' 카테고리의 다른 글
[안드로이드] 간단하게 웹뷰 구현 예제 (12) | 2017.08.03 |
---|---|
[안드로이드] FCM 화면 깨우기 화면 켜지게 하는 방법 (11) | 2017.07.12 |
[안드로이드] FCM 토큰 저장방법 개별 보내는 방법 SharedPreferences 사용 (1) | 2017.07.10 |
[안드로이드] FCM 푸시메세지 웹서버(JAVA)에서 보내기 (34) | 2017.07.10 |
[안드로이드 이론] 안드로이드 개발을 위해 기본적인 것들 (0) | 2015.06.19 |