[flutter] 플러터 RxDart에서의 알림 및 푸시 알림 처리 방법

RxDart는 플러터에서 반응형 프로그래밍을 구현하기 위한 강력한 패키지입니다. 알림 및 푸시 알림과 같은 사용자 알림을 처리하는 데에도 RxDart를 유용하게 활용할 수 있습니다. 이 글에서는 RxDart를 사용하여 플러터에서 알림 및 푸시 알림을 처리하는 방법에 대해 알아보겠습니다.

알림 처리하기

알림 처리를 위해선, Stream을 사용하여 알림을 받는 StreamController를 생성해야 합니다. 아래는 간단한 예시입니다.

import 'dart:async';

class NotificationHandler {
  final _notificationController = StreamController<String>();

  Stream<String> get notificationStream => _notificationController.stream;

  void sendNotification(String message) {
    _notificationController.sink.add(message);
  }

  void dispose() {
    _notificationController.close();
  }
}

final notificationHandler = NotificationHandler();

위의 코드에서 NotificationHandler 클래스는 알림 처리를 위한 클래스입니다. StreamController를 사용하여 notificationStream을 생성하고, sendNotification 함수를 통해 알림을 전송할 수 있습니다.

알림을 받는 위젯에서는 아래와 같이 StreamBuilder를 사용하여 notificationStream을 구독할 수 있습니다.

StreamBuilder<String>(
  stream: notificationHandler.notificationStream,
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return Text('No notification');
    }

    return Text(snapshot.data);
  },
)

위의 코드에서 notificationHandler.notificationStreamstream으로 설정하여 알림을 실시간으로 받아옵니다. 그리고 builder 콜백에서는 snapshot을 통해 데이터를 확인하고, 알림을 화면에 표시합니다. 데이터가 없는 경우 “No notification”을 표시합니다.

푸시 알림 처리하기

푸시 알림은 앱이 백그라운드 또는 꺼진 상태에서 알림을 받기 위해 사용됩니다. 푸시 알림을 처리하기 위해선 Firebase Cloud Messaging (FCM)과 함께 RxDart를 사용할 수 있습니다. 아래는 푸시 알림 처리를 위한 예시입니다.

// FCM에서 알림 데이터를 처리하기 위한 함수
void firebaseMessagingBackgroundHandler(RemoteMessage message) {
  notificationHandler.sendNotification(message.notification.body);
}

Future<void> main() async {
  // FCM 초기화
  await Firebase.initializeApp();
  
  // 앱이 포그라운드에 있을 때 알림 처리
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    notificationHandler.sendNotification(message.notification.body);
  });

  // 앱이 백그라운드 또는 꺼진 상태일 때 알림 처리
  FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
}

위의 코드에서 firebaseMessagingBackgroundHandler 함수는 FCM이 백그라운드 또는 꺼진 상태에서 알림을 받을 때 호출되는 함수입니다. 이 함수에서는 notificationHandler.sendNotification을 사용하여 알림을 처리합니다.

main 함수에서는 FirebaseMessaging.onMessage를 사용하여 앱이 포그라운드에 있을 때 알림을 처리합니다. FirebaseMessaging.onBackgroundMessage를 사용하여 앱이 백그라운드 또는 꺼진 상태에서 알림을 처리할 수 있도록 설정합니다.

마무리

위에서는 RxDart를 사용하여 플러터에서 알림 및 푸시 알림을 처리하는 방법에 대해 알아보았습니다. RxDart를 활용하면 알림을 쉽고 효율적으로 처리할 수 있으며, FCM과 함께 사용하면 푸시 알림을 효과적으로 처리할 수 있습니다. 추가적인 자세한 내용은 RxDart 및 FCM의 공식 문서를 참고하시기 바랍니다.

참고 자료