반응형

진행중인 프로젝트에서 댓글, 대댓글간에 알림기능을 구현하기 위해서 푸쉬 메시지라고 불리는 서비스중 파이어베이스에서 사용하는 파이어베이스 클라우드 메세징(FCM)을 이용하려고 합니다. 

 FCM은 사용자 디바이스에 특별한 코드를 삽입하지 않고도 메시지 전달이 가능하고, 사용자가 클릭한 메시지를 통해 앱을 열 수도 있습니다. 원하는 기기에만 알림을 보내기 위해 토큰을 생성하고, 그 토큰을 이용하여 간단하게 알림을 보낼 것 입니다.

FCM의 접근 방식

 

FCM은 보안 문제로 다음과 같은 접근 방식으로 진행됩니다.

- 디바이스에서 직접 접근하지 않는다.

- 백앤드 서버를 통하여 전송해야한다.

- FCM 서버는 전송받은 메시지와 [서버 키]를 확인한다.

- 메시지가 전송되어야 할 디바이스로 메시지를 전송.

 

파이어베이스 연동

 우선 이름 그대로 파이어베이스 클라우드 메세징(Firebase Cloud Messaging)이기 때문에 파이어베이스와 앱을 연동해주어야합니다.

안드로이드 스튜디오[Android Studio] 파이어베이스(Firebase) 연동하기

 

안드로이드 스튜디오[Android Studio] 파이어베이스(Firebase) 연동하기

파이어 베이스는 앱, 웹 등 개발할 때 도움을 주는 매우 편리한 백앤드 서비스입니다. 파이어 베이스와 안드로이드 스튜디오 프로젝트를 연동시켜보겠습니다. (이 글은 3월 7일 기준으로 작성되

soopeach.tistory.com

위의 링크에서 파이어베이스와 앱을 연동하는 과정을 자세히 작성해두었습니다.

토큰 얻기

원하는 기기에만 알림을 보내기위하여 기기 고유의 토큰을 구해야합니다.

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Log.d("MyFirebaseMessagingService", "Refreshed token: $token")
    }
}

 

FirebaseMessagingService()를 상속받는 서비스를 만들고 위와 같이 onNewToken을 오버라이딩 기기의 토큰을 얻어옵니다. 

onNewToken()메서드는 토큰이 생성될 때마다 안드로이드가 호출해줍니다. 

토큰이 갱신되기 전까지는 앱을 재실행해도 onNewToken() 메서드는 다시 호출되지 않기 때문에 받아온 토큰은 서버나 디바이스에 저장해두어야합니다.

 토큰은 다음과 같은 경우에 갱신이 될 수 있습니다.

  • 새 기기에서 앱 복원
  • 사용자가 앱 삭제/재설치
  • 사용자가 앱 데이터 소거

아래의 코드를 작성하는 것으로 토큰을 재호출 할 수 있습니다.

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log
    Log.d("토큰", token)

})

AndroidManifest[매니패스트] 수정

 아래 내용은 공식문서 내용입니다.

  • FirebaseMessagingService를 확장하는 서비스를 추가합니다. 백그라운드에서 앱의 알림을 수신하는 것 외에 다른 방식으로 메시지를 처리하려는 경우에 필요합니다. 포그라운드 앱의 알림 수신, 데이터 페이로드 수신, 업스트림 메시지 전송 등을 수행하려면 이 서비스를 확장해야 합니다.
<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

 위와 같이 매니페스트의 service 부분에

<intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>

를 작성해줍니다.

파이어베이스 콘솔에서 메시지 보내기

위의 토큰값을 가지고 있는 기기에 알림을 보내기 위하여 파이어베이스 콘솔에있는 [Cloud Messaging]을 이용하겠습니다.

앱과 연동된 프로젝트에 들어가서 [Cloud Messaging]에 들어가면 됩니다.

들어간 후 send your first message를 눌러줍니다.

우선 테스트용으로 필수항목인 알림 제목과 알림 텍스트만 입력해주었습니다. 알림 내용을 입력해주면 우측하단에서 미리보기로 어떻게 알림이 사용자에게 보여지게 되는지 확인할 수 있습니다.

마지막으로 "위에서 구한 토큰 값 입력" 에 아까 구한 토큰 값을 넣고 오른쪽에 +버튼을 눌러 테스트 기기의 토큰값을 추가해줍니다.

보내고싶은 기기의 토큰들을 체크하고 테스트 버튼을 눌러주면 그 기기로 알림이 전송됩니다! 여러 토큰을 입력하고 한 번에 여러 기기에 보낼수도 있습니다.

이런식으로 알림이 오게됩니다. 

 앱이 포어그라운드에 있으면 알림이 나타나지 않을 수 있기 때문에 앱을 종료한 후 메세지를 보내야합니다.

HTTP 프로토콜 형식으로 데이터 보내기

 

안드로이드[Android] HTTP프로토콜 형식으로 FCM에서 백그라운드 메시지 보내기(POSTMAN)

파이어베이스와 앱 연결 2022.04.01 - [안드로이드[Android]] - 안드로이드[Android] 안드로이드 백그라운드에서 알림보내기(FCM) 안드로이드[Android] 안드로이드 백그라운드에서 알림보내기(FCM) 진행중인

soopeach.tistory.com

위의 링크에서는 파이어베이스 콘솔뿐만 아니라 HTTP 프로토콜 형식으로 알림을 보내는 기능에 대하여 설명하고 있습니다. 

위의 링크에 보면 Notification을 사용하여 알림을 관리하는데 저런 방식으로 구현하면 앱이 실행중인 상태에서도 알림이 오도록 처리할 수 있습니다.

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기