일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 플러터 설치 2022
- android retrofit login
- 큐 자바 코드
- android ar 개발
- rxjava hot observable
- 2022 플러터 설치
- 안드로이드 유닛 테스트
- 안드로이드 유닛테스트란
- 스택 큐 차이
- 객체
- rxjava cold observable
- 2022 플러터 안드로이드 스튜디오
- 스택 자바 코드
- jvm이란
- rxjava disposable
- 멤버변수
- Rxjava Observable
- 안드로이드 라이선스
- 클래스
- 안드로이드 os 구조
- 안드로이드 레트로핏 crud
- 자바 다형성
- ANR이란
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트 예시
- jvm 작동 원리
- 안드로이드 레트로핏 사용법
- 안드로이드 라이선스 종류
- ar vr 차이
- 서비스 쓰레드 차이
- Today
- Total
나만을 위한 블로그
[Android] 특정 상황에 FCM 푸시 메시지를 받지 않도록 설정하는 법 본문
앱을 쓰다보면 앱 안에서 푸시 알림 받아보기 같은 뉘앙스의 문장이 있는 체크박스를 체크하면 그 다음부턴 푸시 알림이 오지 않는 걸 볼 수 있다.
이번 포스팅에선 안드로이드에서 이 처리를 구현하는 방법을 포스팅한다.
FCM 푸시 알림을 보내는 방법은 전에 포스팅한 게 있으니 그걸 참고하면 된다.
onlyfor-me-blog.tistory.com/183
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (remoteMessage.getNotification() != null)
{
msg = remoteMessage.getNotification().getBody();
title = remoteMessage.getNotification().getTitle();
icon = remoteMessage.getNotification().getIcon();
boolean isDenied = sharedPreferences.getBoolean("Key", false);
if (isDenied)
{
showNotification(title, msg, icon);
}
else
{
manager.deleteNotificationChannel(channelID);
}
}
}
FCM을 보내고 받을 수 있게 설정하려면 FirebaseMessagingService를 상속받은 클래스를 하나 만들고 onMessageReceived()를 재정의해야 한다.
여기서 onMessageReceived()를 건드려야 한다. 푸시 알림을 받는 곳인 onMessageReceived()에서 어떤 상황에 어떤 채널로는 메시지를 보내지 말라는 코드를 넣으면, 원하는 방식으로 FCM이 작동하는 걸 볼 수 있다.
가장 안쪽의 if를 보면 isDenied 변수가 있는데, 이것은 쉐어드에서 boolean 값을 가져와 저장한 변수다.
이 변수의 값이 true라면 FCM 푸시 알림을 보내는 메서드에 인자를 넣어 호출하고, false라면 deleteNotificationChannel()을 호출해서 FCM 푸시 알림이 가지 않도록 한다.
삭제된 채널을 다시 만들 필요는 없다. showNotification()을 만들 때 String 변수에 채널로 쓸 이름을 넣은 뒤 createNotificationChannel()이 작동하기 때문에, showNotification()이 호출되면 자동으로 삭제됐던 채널이 다시 만들어진다.
이렇게 한 다음 액티비티나 프래그먼트에서 스위치 같은 토글이 가능한 버튼을 놓은 뒤, 그 값을 쉐어드에 저장하기만 하면 onMessageReceived()에서 받아와 처리하니 스위치 값이 false인 경우에만 푸시 알림이 가지 않는다.
참고로 아래 코드는 위 예시와 무관하지만 안드로이드 바탕화면에서 앱을 꾹 눌러 앱 설정을 누른 뒤, 여기서 알림 쪽 체크 여부를 확인할 수 있는 코드다.
boolean aaa = NotificationManagerCompat.from(getActivity()).areNotificationsEnabled();
aaa 변수를 로그로 출력하면 저 스위치가 true(on)인지 false(off)인지를 알 수 있다.
'Android' 카테고리의 다른 글
[Android] 리사이클러뷰 아이템 안의 체크박스의 체크 상태를 유지시키는 법 (0) | 2020.12.24 |
---|---|
[Android] 레트로핏을 이용한 회원가입, 로그인 기능 구현 (with MySQL, PHP) (0) | 2020.12.12 |
[Android] SQLite 사용법 - INSERT - (0) | 2020.12.07 |
[Android] editText 바깥 부분을 클릭하면 키보드 내려가게 하는 법 (0) | 2020.11.30 |
[Android] AR core 공식 홈페이지 예제 빌드하는 법 (0) | 2020.11.15 |