관리 메뉴

나만을 위한 블로그

[Android] 특정 상황에 FCM 푸시 메시지를 받지 않도록 설정하는 법 본문

Android

[Android] 특정 상황에 FCM 푸시 메시지를 받지 않도록 설정하는 법

참깨빵위에참깨빵_ 2020. 12. 9. 17:08
728x90
반응형

앱을 쓰다보면 앱 안에서 푸시 알림 받아보기 같은 뉘앙스의 문장이 있는 체크박스를 체크하면 그 다음부턴 푸시 알림이 오지 않는 걸 볼 수 있다.

이번 포스팅에선 안드로이드에서 이 처리를 구현하는 방법을 포스팅한다.

FCM 푸시 알림을 보내는 방법은 전에 포스팅한 게 있으니 그걸 참고하면 된다.

onlyfor-me-blog.tistory.com/183

 

[Android] FCM 푸시 알림 보내는 법(+PHP에서 cURL 라이브러리 써서 FCM 푸시 알림 보내는 법)

FCM : 파이버베이스 클라우드 메시징의 이니셜이다. 이전에 GCM(구글 클라우드 메시징)이란 이름이었고 현재는 안드로이드, 아이폰, 웹 앱의 메시지와 메시지 알림을 위한 크로스 플랫폼 클라우드

onlyfor-me-blog.tistory.com

 

@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인 경우에만 푸시 알림이 가지 않는다.

 

참고로 아래 코드는 위 예시와 무관하지만 안드로이드 바탕화면에서 앱을 꾹 눌러 앱 설정을 누른 뒤, 여기서 알림 쪽 체크 여부를 확인할 수 있는 코드다.

 

이 화면의 "사용 중" 스위치가 현재 어떤 값인지를 가져오는 코드다. S20+에선 알림 받기란 이름의 스위치로 나온다

boolean aaa = NotificationManagerCompat.from(getActivity()).areNotificationsEnabled();

aaa 변수를 로그로 출력하면 저 스위치가 true(on)인지 false(off)인지를 알 수 있다.

반응형
Comments