ABOUT ME

-

  • 안드로이드 앱에서 버튼 누르면 모든 사용자에게 알림 보내는 방법. Firebase FCM + 버튼 클릭으로 푸시 자동 발송 시스템 만들기
    카테고리 없음 2025. 4. 3. 12:07
    728x90

    앱 개발을 하다 보면 이런 기능이 필요할 때가 있습니다.

    “특정 사용자가 버튼을 누르면, 앱을 설치한 모든 사용자에게 알림이 자동 전송되면 좋겠는데…
    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
Designed by Tistory.