스마트폰 앱 개발에서 푸시 알림은 사용자 경험을 향상시키는 데 매우 중요한 역할을 합니다. 앱의 새로운 소식, 이벤트, 업데이트 등을 사용자에게 실시간으로 알릴 수 있기 때문이죠. 이번 글에서는 안드로이드 앱에 푸시 알림 기능을 구현하기 위해 Firebase의 FCM(Firebase Cloud Messaging)을 사용하는 방법에 대해 알아보겠습니다. 복잡한 서버 구축 없이 간편하게 푸시 알림 시스템을 구축할 수 있다는 것이 FCM의 가장 큰 장점입니다.
FCM 설정 및 기본 구현
본격적인 시작에 앞서 Firebase 콘솔 계정 생성 및 기본적인 사용 방법은 이미 숙지하고 있다는 가정하에 설명을 진행하겠습니다. FCM을 사용하기 위해서는 먼저 앱에 Firebase를 연동해야 합니다. Firebase 콘솔에서 프로젝트를 생성하고, 안드로이드 앱을 등록하여 google-services.json 파일을 다운로드 받아 앱 프로젝트에 추가하는 과정을 거쳐야 합니다. 이 파일은 앱이 Firebase와 통신하는 데 필요한 정보를 담고 있습니다.
FirebaseMessagingService 생성 및 Manifest 등록
가장 먼저 해야 할 일은 FirebaseMessagingService를 상속받는 클래스를 생성하는 것입니다. 이 클래스는 FCM으로부터 푸시 메시지를 수신하고 처리하는 역할을 담당합니다. onMessageReceived() 메소드를 오버라이드하여 수신한 메시지의 내용을 확인하고, 필요한 동작을 수행할 수 있습니다. 예를 들어, 메시지 내용을 기반으로 Notification을 생성하여 사용자에게 알림을 표시하거나, 앱 내 특정 기능을 실행하는 등의 작업을 수행할 수 있습니다.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// 푸시 메시지 수신 및 처리 로직 구현
if (remoteMessage.getNotification() != null) {
Log.d("FCM", "Message Notification Body: " + remoteMessage.getNotification().getBody());
// Notification 생성 및 표시 로직 추가
}
}
@Override
public void onNewToken(String token) {
// 새로운 토큰 생성 시 처리 로직 구현
Log.d("FCM", "Refreshed token: " + token);
// 생성된 토큰을 서버에 전송하는 로직 추가
}
}
다음으로, 생성한 FirebaseMessagingService를 AndroidManifest.xml 파일에 등록해야 합니다. <service> 태그를 사용하여 등록하고, intent-filter를 통해 FCM 메시지를 수신할 수 있도록 설정해야 합니다.
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
FCM 토큰 확인 및 서버 전송
FCM을 통해 푸시 알림을 보내려면 각 기기별로 고유한 토큰이 필요합니다. 이 토큰은 FirebaseMessaging.getInstance().getToken() 메소드를 통해 얻을 수 있습니다. 앱을 처음 실행할 때 또는 토큰이 갱신될 때마다 새로운 토큰이 생성되며, 이 토큰을 서버에 전송하여 저장해야 합니다. 서버는 이 토큰을 사용하여 특정 기기에 푸시 알림을 전송할 수 있습니다. 토큰을 확인하기 위해 앱을 구동하고 로그를 확인하여 토큰 값을 추출할 수 있습니다.
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w("FCM", "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
// Log and toast
Log.d("FCM", "FCM 토큰: " + token);
Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
}
});
POSTMAN을 이용한 푸시 알림 테스트
이제 POSTMAN과 같은 API 테스트 도구를 사용하여 FCM 서버에 직접 푸시 알림을 전송하여 테스트해볼 수 있습니다. FCM 서버 주소(https://fcm.googleapis.com/fcm/send)와 Content-Type, Authorization 헤더를 설정하고, JSON 형식으로 메시지 payload를 작성하여 요청을 보내면 됩니다. Authorization 헤더에는 Firebase 콘솔에서 얻은 서버 키를 사용해야 합니다. 메시지 payload에는 to 필드에 대상 기기의 FCM 토큰을, notification 또는 data 필드에 푸시 메시지의 내용(제목, 본문 등)을 포함해야 합니다.
마무리
이번 글에서는 안드로이드 앱에 Firebase FCM을 연동하고, 기본적인 푸시 알림 기능을 구현하는 방법에 대해 알아보았습니다. FirebaseMessagingService를 통해 메시지를 수신하고 처리하는 방법, FCM 토큰을 확인하고 서버에 전송하는 방법, POSTMAN을 사용하여 푸시 알림을 테스트하는 방법 등을 다루었습니다. 다음 글에서는 푸시 알림의 고급 기능, 예를 들어 특정 주제에 대한 구독, 예약된 푸시 알림 전송 등에 대해 자세히 알아보도록 하겠습니다. 이러한 기능들을 활용하면 더욱 강력하고 효과적인 푸시 알림 시스템을 구축할 수 있습니다.