-
안드로이드 앱에서 버튼 누르면 모든 사용자에게 알림 보내는 방법. Firebase FCM + 버튼 클릭으로 푸시 자동 발송 시스템 만들기카테고리 없음 2025. 4. 3. 12:07728x90
앱 개발을 하다 보면 이런 기능이 필요할 때가 있습니다.
“특정 사용자가 버튼을 누르면, 앱을 설치한 모든 사용자에게 알림이 자동 전송되면 좋겠는데…
Firebase FCM으로 이런 게 가능할까?”결론부터 말씀드리면, 가능합니다! 단, Firebase 콘솔에서 수동으로 알림을 보내는 방식이 아니라 앱 내에서 버튼 클릭 → 자동으로 전 사용자에게 FCM 알림 발송되게 만들기 위해서는 조금 더 서버 또는 Firebase Functions 연동이 필요합니다.
🎯 목표 기능 정리
기능 설명 로그인 Firebase Auth로 사용자 인증 버튼 클릭 로그인된 사용자만 가능하도록 제한 알림 발송 버튼 클릭 시 앱 설치자 모두에게 푸시 알림 자동 전송 푸시 방식 Firebase Cloud Messaging(FCM) 활용 콘솔 사용 ❌ Firebase 콘솔 직접 접속 없이 자동화 구현
🔧 구현 방식 개요
Firebase FCM에서 푸시 메시지를 직접 앱에서 보내는 것은 불가능합니다.
보안상의 이유로 서버에서만 전송이 가능하며,
이를 위해 다음 구조를 사용합니다:[앱] → 버튼 클릭 ↓ [Cloud Functions 또는 Node.js 백엔드] ↓ [FCM 서버에 요청] ↓ [전체 사용자에게 푸시 전송]
🛠️ Step-by-Step 구현 방법
✅ Step 1. 모든 사용자를 특정 토픽(Topic)에 구독시키기
FirebaseMessaging.getInstance().subscribeToTopic("all_users")
📌 이 코드는 앱 실행 시 한 번만 실행되면 됩니다.
이제 해당 기기는"all_users"
라는 토픽에 포함되어 푸시 수신이 가능합니다.
✅ Step 2. Firebase Cloud Functions로 서버 역할 구현
// functions/index.js const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.sendNotificationToAll = functions.https.onCall(async (data, context) => { const message = { notification: { title: "📢 공지 알림", body: "누군가 버튼을 눌렀습니다!", }, topic: "all_users", }; try { await admin.messaging().send(message); return { success: true }; } catch (error) { return { success: false, error: error.message }; } });
이렇게 하면 Firebase Functions가 미니 서버처럼 작동해
버튼 클릭 시 전 사용자에게 알림을 보낼 수 있어요.
✅ Step 3. 앱에서 버튼 클릭 시 함수 호출
val functions = Firebase.functions val data = hashMapOf("trigger" to true) // 예시 데이터 functions .getHttpsCallable("sendNotificationToAll") .call(data) .addOnSuccessListener { Toast.makeText(this, "전체 알림 전송 완료!", Toast.LENGTH_SHORT).show() } .addOnFailureListener { Toast.makeText(this, "알림 전송 실패: ${it.message}", Toast.LENGTH_SHORT).show() }
이제 앱 내 버튼을 누르면,
콘솔에 들어가지 않아도 바로 푸시 알림이 전송됩니다.
📱 알림 받는 쪽 코드 (기본 수신 설정)
class MyFirebaseMessagingService : FirebaseMessagingService() { override fun onMessageReceived(remoteMessage: RemoteMessage) { // 알림 수신 시 동작 처리 val title = remoteMessage.notification?.title val message = remoteMessage.notification?.body // 알림 표시 처리 } }
그리고
AndroidManifest.xml
에 서비스 등록도 잊지 마세요!<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
🔐 보안 팁
- Firebase Functions에서만 메시지 전송이 가능하도록 하고
- 앱 내에서는 FCM 서버 키를 절대 포함하지 않도록 해야 합니다.
- Firebase Authentication으로 로그인한 사용자만 버튼을 클릭할 수 있게 제한하세요.
📌 마무리 요약
항목 설명 사용자 인증 Firebase Auth 로그인 사용 토픽 설정 FirebaseMessaging.subscribeToTopic("all_users")
푸시 전송 방식 Firebase Cloud Functions 사용 버튼 기능 앱 내에서 클라우드 함수 호출 보안 서버에서만 FCM 전송 가능 (앱에서 직접 전송 ❌)
✅ 마무리하며
Firebase를 활용하면 복잡한 서버 없이도 앱 내 버튼 하나로 전 사용자에게 알림을 보내는 시스템을 구현할 수 있습니다. 특히 이벤트 알림, 긴급공지, 실시간 반응이 필요한 앱에서는 이 기능 하나만으로도 사용자 만족도를 크게 높일 수 있어요!
728x90