[flutter] Firebase Firestore를 사용한 알림 기능 구현하기

Firebase Firestore는 클라우드 기반의 NoSQL 데이터베이스로, 실시간 데이터 동기화와 데이터베이스 관리에 용이한 기능을 제공합니다. 알림 기능을 구현할 때 Firebase Firestore를 사용하면 효과적으로 데이터를 저장하고 관리할 수 있습니다. 이번 글에서는 Flutter 앱에서 Firebase Firestore를 사용하여 알림 기능을 구현하는 방법을 알아보겠습니다.

목차

Firebase 프로젝트 설정

Firebase 콘솔에서 새 프로젝트를 생성하고, Firestore 데이터베이스를 사용할 수 있도록 설정합니다. 필요한 경우 Firebase Authentication 서비스를 활성화하여 사용자 인증을 추가할 수도 있습니다.

Flutter 앱에 Firebase 라이브러리 추가

Firebase Firestore를 사용하기 위해 cloud_firestore 패키지를 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가합니다:

dependencies:
  flutter:
    sdk: flutter

  cloud_firestore: ^2.5.3

의존성을 추가한 후에는 flutter pub get 명령어를 실행하여 패키지를 다운로드합니다.

Firebase 초기화

Flutter 앱을 시작할 때 Firebase 연결을 초기화해야 합니다. main() 함수가 있는 main.dart 파일에서 다음과 같이 초기화합니다:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  runApp(MyApp());
}

푸시 알림 등록

알림을 받을 사용자를 등록하기 위해 Firebase의 사용자 고유 ID를 Firestore에 저장해야 합니다. 로그인 또는 회원가입 후에 Firebase 사용자를 생성하고 다음과 같이 Firestore에 저장합니다:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;
final FirebaseFirestore _firestore = FirebaseFirestore.instance;

void registerForPushNotifications() async {
  User? user = _auth.currentUser;

  if (user != null) {
    await _firestore.collection('users').doc(user.uid).set({
      'pushNotifications': true,
    });
  }
}

알림 보내기

알림을 보내기 전에 Firebase 관리 콘솔에서 알림을 설정해야 합니다. Firebase 알림 게시판에서 새 알림을 만들고 필요한 정보를 입력합니다. 그런 다음, 다음 코드를 사용하여 Firestore에 알림을 추가합니다:

void sendNotification(String title, String message) async {
  await _firestore.collection('notifications').add({
    'title': title,
    'message': message,
    'sentAt': DateTime.now(),
  });
}

알림 받기

Firestore에 알림이 추가되면 Flutter 앱에서 알림을 받을 수 있습니다. Stream을 사용하여 실시간 업데이트를 수신하고, StreamBuilder 위젯을 사용하여 알림을 표시합니다:

StreamBuilder<QuerySnapshot>(
  stream: _firestore.collection('notifications').snapshots(),
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (snapshot.hasError) {
      return Text('오류가 발생했습니다: ${snapshot.error}');
    }

    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    }

    return ListView(
      children:
          snapshot.data!.docs.map((DocumentSnapshot document) {
        Map<String, dynamic> data =
            document.data()! as Map<String, dynamic>;

        return ListTile(
          title: Text(data['title']),
          subtitle: Text(data['message']),
        );
      }).toList(),
    );
  },
);

이제 Firebase Firestore를 사용하여 알림 기능을 구현하는 방법을 알았습니다. 알림을 보내고 받는 기능을 탐색하고 사용자 경험을 향상시키기 위해 필요한 추가적인 로직을 추가할 수 있습니다.

더 자세한 정보를 원하시면 Firebase 공식 문서를 참고하십시오.