본문 바로가기
카테고리 없음

[Spring][Android/Kotlin] FCM으로 안드로이드에 푸쉬 알람 보내기 (2)

by 웅대 2023. 8. 15.
728x90
반응형

https://growth-coder.tistory.com/236

 

이전 포스팅에서 기본적인 FCM 용어들과 여러 메시지 유형에 대해 알아보았다.

 

이번 포스팅에서는 본격적으로 안드로이드 앱에 메시지를 보내보려고 한다.

 

안드로이드 애플리케이션을 만들고 Firebase 콘솔 창에서 메시지를 보내보자.

 

우선 안드로이드 프로젝트를 시작하고 프로젝트에 Firebase를 추가해야한다.

 

아래 문서의 순서대로 진행하면 된다.

 

https://firebase.google.com/docs/android/setup?hl=ko 

 

Android 프로젝트에 Firebase 추가  |  Firebase for Android

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 Android 프로젝트에 Firebase 추가 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세

firebase.google.com

AndroidManifest 설정

 

Android 프로젝트에 Firebase를 추가했다는 가정하에 포스팅을 작성해보려고 한다.

 

우선 Androidmanifest.xml에 인터넷 연결을 허용하고 MyFirebaseMessagingService를 등록해준다.

 

<application> element 안에 service를 작성해야 한다.

 

<Androidmanifest.xml>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    
	<uses-permission android:name="android.permission.INTERNET"/>

    <application
		.
        .
        .
        <service
            android:name=".java.MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        .
        .
        .

    </application>
    

</manifest>

 

MyFirebaseMessagingService 설정

 

이제 MyFirebaseMessagingService 클래스를 만들어야 한다. 이 클래스는 FirebaseMessagingService를 상속받아서 만들면 된다.

 

그리고 android:name에 자세히 보면 .java.MyFirebaseMessagingService라고 되어있는 모습을 확인할 수 있고 java 패키지를 만들어서 그 안에 작성하면 된다.

 

MyFirebaseMessagingService 위치

위 구조처럼 보이지 않는다면 상단의 Android를 클릭해서 Project로 바꿔주면 된다.

본격적으로 MyFirebaseMessagingService를 작성하기에 앞서 firebase-messaging-ktx 의존성을 추가해준다.

dependencies {
	.
    .
    .
    implementation("com.google.firebase:firebase-messaging-ktx:23.2.1")
 	.
    .
    .
}

 

이제 MyFirebaseMessagingService 클래스를 생성한다.

 

onNewToken 메소드를 오버라이딩해서 토큰이 생성되면 출력하도록 한다.

 

<MyFirebaseMessagingService.kt>

class MyFirebaseMessagingService : FirebaseMessagingService() {
    // [START on_new_token]
    /**
     * Called if the FCM registration token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the
     * FCM registration token is initially generated so this is where you would retrieve the token.
     */
    override fun onNewToken(token: String) {
        Log.d(TAG, "Refreshed token: $token")

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // FCM registration token to your app server.
    }
    companion object {
        private const val TAG = "MyFirebaseMsgService"
    }

}

 

MainActivity 설정

우선 토큰을 가져와서 로그에 출력하는 코드는 다음과 같다.

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 and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

토큰을 가져올 곳에 작성하면 된다.

 

나는 실행되자마자 token을 가져오도록 할 예정이라서 MainActivity의 onCreate 메소드 안에 작성하였다.

 

<MainActivity.kt>

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        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 and toast
            val msg = getString(R.string.msg_token_fmt, token)

            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })
    }
    companion object {
        private const val TAG = "MyFirebaseMsgService"
    }
}

이제 애플리케이션을 실행해보면 로그에 토큰 값이 출력될 것이다. 해당 토큰 값을 잘 보관해두자.

 

테스트 메시지 보내기

만든 프로젝트에 들어가서 Messaging 페이지에 접속한다.

첫 번째 캠페인을 만든다.

알림 메시지를 선택한다.

원하는 알림 내용을 입력하고 테스트 메시지 전송을 누른다.

이전에 저장해둔 토큰을 입력한다.

 

토큰 추가 후 선택하고 테스트를 누르면 성공적으로 메시지를 받을 수 없다.

 

만약 받을 수 없다면 애플리케이션 설정을 통해 Notification을 허용하자.

 

이렇게 안드로이드 애플리케이션을 만들고 Firebase 콘솔 창에서 푸쉬 알람을 보내보았다.

 

다음 포스팅에서는 토큰을 스프링부트 서버로 보내 저장한 후 스프링부트 컨트롤러를 통해 푸쉬 알람을 보내보려고 한다.

참고

https://herojoon-dev.tistory.com/18

 

Android 앱 프로젝트에 FCM설정 및 코드작성

2020/02/24 - [Backend] - FCM 시작하기 2020/02/24 - [Backend] - Android Studio 환경 셋업 2020/02/28 - [Backend] - Android 앱 프로젝트에 Firebase설정 3. FCM App 프로젝트 생성 (Receiver) 3-1. Android Studio 환경 셋업 3-2. Android 앱

herojoon-dev.tistory.com

https://firebase.google.com/docs/cloud-messaging/android/client?hl=ko 

 

Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐

firebase.google.com

 

728x90
반응형

댓글