반응형

Flutter 앱에서 백엔드 서버의 알림을 받는 일반적인 방법은 다음과 같습니다:


1. Firebase Cloud Messaging (FCM) 사용 (추천)

Firebase Cloud Messaging(FCM)을 사용하면 iOS 및 Android에서 푸시 알림을 쉽게 받을 수 있습니다.

설치 및 설정

  1. Firebase 프로젝트 생성 및 앱 추가
  2. firebase_core 및 firebase_messaging 패키지 추가
    dependencies:
      firebase_core: latest_version
      firebase_messaging: latest_version
    
  3. Firebase 초기화
    await Firebase.initializeApp();
    
  4. 알림 권한 요청 (iOS)
    FirebaseMessaging messaging = FirebaseMessaging.instance;
    await messaging.requestPermission();
    
  5. 백그라운드 및 포그라운드 메시지 리스너 설정
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print("Foreground 메시지: ${message.notification?.title}");
    });
    
    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
    
    Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
      await Firebase.initializeApp();
      print("Background 메시지: ${message.notification?.title}");
    }
    
  6. 토큰 받아서 서버에 저장
    String? token = await FirebaseMessaging.instance.getToken();
    print("FCM Token: $token");
    

2. WebSocket 사용 (실시간 데이터)

백엔드에서 WebSocket 서버를 운영하는 경우, web_socket_channel 패키지를 사용하여 Flutter에서 실시간 알림을 받을 수 있습니다.

설치

dependencies:
  web_socket_channel: latest_version

사용법

import 'package:web_socket_channel/io.dart';

final channel = IOWebSocketChannel.connect('ws://yourserver.com/socket');

channel.stream.listen((message) {
  print("서버에서 받은 메시지: $message");
});

3. SSE (Server-Sent Events)

SSE는 단방향 푸시 방식으로, 서버에서 클라이언트로 이벤트를 보낼 수 있습니다.

설치

dependencies:
  http: latest_version

사용법

import 'package:http/http.dart' as http;

void listenToSSE() async {
  var response = await http.get(Uri.parse('http://yourserver.com/events'),
      headers: {'Accept': 'text/event-stream'});

  response.stream.listen((event) {
    print("서버에서 받은 이벤트: $event");
  });
}

4. 백그라운드 알림을 위한 flutter_local_notifications

푸시 알림이 올 때 flutter_local_notifications를 사용하여 로컬 알림을 표시할 수도 있습니다.

설치

dependencies:
  flutter_local_notifications: latest_version

사용법

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

void showNotification(String title, String body) async {
  var android = AndroidNotificationDetails('channelId', 'channelName',
      importance: Importance.max, priority: Priority.high);
  var platform = NotificationDetails(android: android);
  await flutterLocalNotificationsPlugin.show(0, title, body, platform);
}

어떤 방법을 선택해야 할까?

방법 장점 단점

FCM 무료, 글로벌 스케일, 손쉬운 설정 Firebase 의존성
WebSocket 실시간 양방향 통신 가능 백엔드에서 WebSocket 서버 필요
SSE 간단한 실시간 푸시 단방향, 브라우저 친화적
Local Notifications 푸시 알림이 없을 때도 사용 가능 백엔드 푸시는 지원하지 않음

가장 많이 사용되는 방법은 FCM이며, WebSocket은 채팅 등 실시간 기능이 필요한 경우 적합합니다.

어떤 방식이 가장 적합한지 백엔드 환경과 앱의 목적에 따라 결정하면 됩니다! 😊

반응형

+ Recent posts