코린이 탈출기
FCM - 푸시알림 본문
푸시 알림이란 카카오톡 등의 앱에서 어떠한 이벤트가 생길 경우에 알림이 울려 사용자에게 알려주는 기능을 말합니다.
개발자의 측면에서는 Firebase라는 사이트의 기능 중 하나를 이용하는 개념입니다.
Firebase - 구글에서 제공하는 BaaS의 일종입니다. 백엔드의 기능을 서비스로 제공하는 것입니다. 앱만 다룰 줄 아는 경우 유용하게 사용할 수 있습니다.
FCM - Firebase Cloud Messaging의 줄임말입니다. 이전에는 안드로이드 따로 IOS 따로 개발했다면, 이제는 FCM 하나로 안드로이드와 IOS 모두 전송이 가능해졌습니다.
이러한 FCM의 알람 푸시 방법을 간단하게 설명하겠습니다.
A가 B에게 메시지를 보낸다고 가정해봅시다.
A폰에서 B폰으로 메시지를 보내는 경우 핸드폰끼리 직접 보내는 것은 불가능합니다.
보내기 위해서는 중간에 API 서버를 거쳐야 가능합니다.
그렇다고 해서 A가 메시지를 보내면 API 서버가 B에게 바로 보낼 수는 없습니다.
API 서버는 구글의 FCM 관련 서버에게 B 기기의 고유번호와 메시지의 내용을 보냅니다.
이때 수신할 폰의 디바이스 토큰을 미리 API 서버에 전달해두고 저장해둬야 합니다.
그러면 이제 B의 폰으로 알림이 울립니다.
다시 B가 A에게 메시지를 보내면 위와 같은 동작이 실행됩니다.
위와 같은 과정을 거치고 나면 푸시 알람이 울립니다. 이때 2가지 타입이 있습니다.
첫 번째는 notification 타입의 푸시로 알림이 오면 소리 / 알림이 뜨는 게 자동으로 작동하는 것으로 커스터마이징이 불가능합니다.
두 번째는 data-message 타입의 푸시로 푸시 알림은 신호만 오고 그 뒤의 소리 / 메시지 등은 모두 수동으로 커스터마이징이 가능합니다.
푸시 알람이 왔을 때, 알람을 화면에 띄우는 등의 작업과 눌렀을 때 어떤 동작을 할 것인지는 직접 코딩을 처리해야 합니다.
활용 요령을 알아보겠습니다.
구글 FCM 서버에 기기를 등록하고 디바이스 토큰을 발급받습니다. FirebaseInstanceId를 받아와 주는 라이브러리를 설치 및 실행해줍니다.
이번 라이브러리는 기존의 것과는 다르게 설치합니다. Firebase는 구글에서 만들었기 때문에 안드로이드 스튜디오에 기능이 들어가져 있습니다.
상단의 Tools > Firebase 누르면 Asisstant 창이 나옵니다.

지금까지 설명한 FCM인 Firebase Cloud Messaging에 해당합니다.

아래와 같은 화면이 나오고 파란 상자 안에 있는 버튼을 눌러 구글 계정을 연결해주어야 합니다.

Firebase의 경우 개발자 계정을 따로 구매할 필요는 없지만 한 계정 당 10개의 프로젝트만 생성이 가능합니다.
로그인 과정을 마치면 안드로이드 스튜디오가 연결하기 위해 로딩이 될 것입니다.
로그인을 하고 나면 사이트에서는 아래와 같은 화면이 나옵니다.

'프로젝트 만들기' 버튼을 누르면 이 사이트의 경우에는 안드로이드 스튜디오 자체에서 띄운 것이어서 자동으로 프로젝트 이름이 설정됩니다.

동의하고 계속 버튼을 눌러줍니다.

애널리틱스 위치만 '대한민국'으로 설정한 후 '약관 동의'하고 '프로젝트 만들기' 버튼을 눌러줍니다.
위와 같은 설정을 마치고 로딩을 기다리면 Firebase에 지금까지 만든 프로젝트가 등록이 됩니다.

위와 같은 화면이 나오고 '연결' 버튼을 누르면 이번에는 Firebase와 안드로이드 스튜디오가 연결되는 것입니다.
다시 안드로이드 스튜디오로 돌아가면 아래와 같은 화면이 나옵니다.

파란색 상자의 경우에는 Firebase와 잘 연결되었다고 나오는 것입니다.
이제 FCM을 앱에 설치하는 과정입니다.
위의 노란색 버튼을 누르면 아래와 같은 상자가 나옵니다.

이 상자는 Gradle을 알아서 편집하고 설치한다는 내용입니다.
Accept Changes를 누르면 알아서 설치해주고 sync now까지 대신해줍니다.

그러면 파란색 상자처럼 FCM이 설치됩니다.
그다음 과정은 메시지를 받아오도록 설정하는 것입니다.
FCM을 전용으로 하는 패키지를 생성합니다.
패키지에 클래스를 생성합니다.

9번 줄처럼 FirebaseMessagingService 함수를 상속받습니다. 함수의 경우 기본 생성자( )로 설정해줍니다.

그러고 나서 Project > app 으로 가면 'google-services.json'이 추가되어있을 것입니다.
만약 빨간색으로 되어 있다면 GIT에 등록이 안되어 있는 것이므로 위와 같은 방법으로 노란색 add를 눌러주면 됩니다.
다시 코드를 보겠습니다.

11번 줄은 메시지를 받았을 때의 사용하는 기능을 설정하겠습니다.
이 함수의 내부에는 핸들러를 만들어 사용하겠습니다. 핸들러를 변수로 설정한 후 Handler(android.os로 선택)로 설정하겠습니다.
핸들러 내부에 토스트를 띄우는 작업을 수행하겠습니다. 16 ~ 18번 줄에 해당합니다.
17번 줄을 보면 기존에는 mContext로 사용하였는데, 지금 사용하는 클래스의 경우에는 따로 물려받은 것이 없어서 applicationContext로 대체하겠습니다. 그다음으로 context는 11번 줄을 보면 p0로 메시지가 들어있어서 그대로 사용합니다. 이 메시지의 경우에는 notification 타입으로 사용하겠습니다. 연습하는 용도이기 때문에 !!를 선언해서 무조건 있다고 설정하겠습니다.
메시지를 받으면 토스트를 띄워주는 코드를 작성하였습니다. 즉, 푸시 알림에 대한 대응 코드입니다.
manifests로 이동해서 설정을 마무리해줍니다.

</application> 태그가 닫히기 전에 <service> 태그를 추가해줍니다.
서비스의 태그의 이름은 FCM에서 자동으로 설정되어 있어 Tool이 알려주는 것을 바로 적용해주면 됩니다.
그 내부에 적어줄 내용은 Firebase Asisstant의 마지막 부분에 적혀있는 것을 그대로 복사해서 붙여주면 됩니다.

<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
위의 코드는 구글에서 Firebase에 메시지가 왔을 경우에는 MyFCM에서 처리해달라는 것을 의미합니다.
이제 기기의 토큰을 받아서 임시로 메시지를 띄워보겠습니다.
우선 Firebase 사이트로 이동합니다.
사이트에 들어가서 지금 메시지를 띄울 프로젝트를 들어가면 왼쪽처럼 메뉴 창이 있습니다.
그중에서 메시지를 띄울 Cloud Messaging이라 쓰여있는 파란색 상자를 눌러줍니다.
메시지를 띄워보기 위해 노란색 상자를 눌러봅니다.

누르면 아래와 같은 화면이 나옵니다.
메시지를 어떻게 띄울 것인지 설정하는 화면이 나옵니다.
알림 제목과 알림 텍스트를 설정해줍니다.
지금은 임의로 메시지를 보내는 것이기 때문에 오른쪽 파란색 버튼을 눌러줍니다.

버튼을 누르면 테스트하기 위한 기기의 고유 토큰을 추가해달라고 나옵니다.

지금은 임의로 메시지를 보내는 것이기 때문에 에뮬레이터의 토큰을 불러보겠습니다.
다시 안드로이드 스튜디오로 이동해서 설정하겠습니다.
메인 화면에서 코드를 작성하겠습니다. 왜냐하면 다른 화면에서 불러올 경우에는 로딩하는 것이 오래 걸리기 때문입니다.
onCreat 함수 내에 작성하면 됩니다.
로그를 이용해서 디바이스의 토큰을 불러오는 방식입니다.
디바이스 토큰을 불러오는 방법을 2가지로 설명하겠습니다.
그 이유는 버전에 따라 다르기 때문입니다.
우선 첫 번째는 최신 이전의 버전입니다.

27번 줄과 같이 로그를 작성하여 FirebaseInstanceId를 이용해서 토큰을 불러오는 방식입니다. 이 방식의 경우에는 오래되어 사용하는 것을 지양합니다.
위와 같은 코드가 작성이 안 될 경우에는 최신 버전이어서 지원하지 않기 때문입니다.
이럴 경우에는 아래와 같이 작성하면 됩니다.

28 ~ 29번 줄과 같이 FirebaseMessaging을 불러서 addOnSuccessListener를 이용해서 그 내부에 로그를 찍어 사용합니다.
두 가지 방법 중 하나를 선택해서 코드를 작성하여 Logcat으로 디바이스 토큰을 받아옵니다.
받아온 토큰을 사이트로 가서 입력해줍니다.

토큰을 입력한 후 파란색 상자인 플러스 버튼을 눌러 테스트를 눌러보면 에뮬레이터에서 푸시 알림이 오는 것을 볼 수 있습니다.
앱이 화면에 꺼져 있을 경우에는 아래와 같이 알람이 오는 것을 볼 수 있습니다.

만약 앱이 화면에 켜져 있을 경우에는 onMessageReceived 함수 내에 작성해주면 됩니다.
FCM을 통한 메시지를 띄우는 방법에 대해 다루어보았습니다.
'인터넷 강의 > 클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기' 카테고리의 다른 글
| chapter 18.2 - AAB&APK 만들기 + 앱 서명 후 업로드 (0) | 2021.07.19 |
|---|---|
| chapter 18.1 - 플레이스토어 콘솔 - 앱 출시 (0) | 2021.07.19 |
| chapter 13.6 - 토큰(Token) (0) | 2021.06.22 |
| chapter 13.5 - Postman (0) | 2021.06.22 |
| chapter 13.4 - JSON 활용 (0) | 2021.06.22 |