[flutter] 플러터에서의 로컬 알림 처리 방법

플러터(Flutter)는 크로스 플랫폼 모바일 앱 개발을 위한 프레임워크로, 로컬 알림(local notification)을 처리하는 기능도 지원합니다. 로컬 알림은 사용자가 앱을 사용하지 않는 동안에도 앱의 알림을 통해 정보를 전달할 수 있는 강력한 도구입니다.

안드로이드와 iOS에서 로컬 알림을 처리하는 방법은 조금씩 다를 수 있지만, 플러터는 플랫폼 별로 일관된 인터페이스를 제공합니다. 이제 로컬 알림을 처리하는 기본적인 방법에 대해 알아보겠습니다.

1. flutter_local_notifications 패키지 설치

플러터에서는 flutter_local_notifications 패키지를 사용하여 로컬 알림을 처리할 수 있습니다. pubspec.yaml 파일에 다음과 같이 패키지를 추가해주세요:

dependencies:
  flutter_local_notifications: ^2.0.0

이제 터미널에서 flutter pub get 명령을 실행하여 패키지를 다운로드하고 프로젝트에 적용시키세요.

2. 로컬 알림 초기화

앱이 시작될 때 로컬 알림을 초기화해야 합니다. main() 함수 내에서 다음과 같은 코드를 추가해주세요:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

Future<void> main() async {
  // 앱 초기화 코드...

  WidgetsFlutterBinding.ensureInitialized();
  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      FlutterLocalNotificationsPlugin();
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher'); // 앱 아이콘 사용
  final InitializationSettings initializationSettings =
      InitializationSettings(android: initializationSettingsAndroid);
  await flutterLocalNotificationsPlugin.initialize(initializationSettings);
  // 앱 초기화 코드...
}

initialize() 메서드를 사용하여 로컬 알림을 초기화하고 설정합니다. 앱 아이콘을 사용하여 알림 아이콘을 구성하기 위해 @mipmap/ic_launcher로 설정해야합니다. 이 부분은 필요에 따라 수정할 수 있습니다.

3. 로컬 알림 설정

로컬 알림을 설정하려면 flutter_local_notifications 패키지가 제공하는 AndroidNotificationDetailsNotificationDetails 인스턴스를 사용해야 합니다. 다음은 예제 코드입니다:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

Future<void> scheduleNotification() async {
  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'your_channel_id',
    'your_channel_name',
    'your_channel_description',
    importance: Importance.max,
    priority: Priority.high,
  );
  const NotificationDetails notificationDetails =
      NotificationDetails(android: androidPlatformChannelSpecifics);

  await FlutterLocalNotificationsPlugin().show(
    0, // 알림 ID
    '알림 제목',
    '알림 내용',
    notificationDetails,
    payload: 'your_payload',
  );
}

여기서는 AndroidNotificationDetails 인스턴스를 생성하여 알림 채널 ID, 이름, 설명을 설정합니다. importancepriority는 알림의 중요도와 우선순위를 설정하는 매개변수입니다. 이 값을 필요에 따라 조정할 수 있습니다.

FlutterLocalNotificationsPlugin().show() 메서드를 사용하여 실제로 알림을 표시합니다. 알림 ID, 제목, 내용, 설정한 NotificationDetails 인스턴스, 그리고 선택적으로 페이로드를 지정할 수 있습니다.

4. 로컬 알림 예약

로컬 알림을 예약하기 위해서는 flutter_local_notifications 패키지에서 제공하는 flutterLocalNotificationsPlugin.zonedSchedule() 메서드를 사용합니다. 다음은 예제 코드입니다:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

Future<void> scheduleNotification() async {
  const tz.TZDateTime now = tz.TZDateTime.now(tz.local);
  final DateTime scheduledDate = now.add(const Duration(seconds: 5));

  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'your_channel_id',
    'your_channel_name',
    'your_channel_description',
    importance: Importance.max,
    priority: Priority.high,
  );
  const NotificationDetails notificationDetails =
      NotificationDetails(android: androidPlatformChannelSpecifics);

  await FlutterLocalNotificationsPlugin().zonedSchedule(
    0, // 알림 ID
    '알림 제목',
    '알림 내용',
    tz.TZDateTime.from(scheduledDate, tz.local),
    notificationDetails,
    payload: 'your_payload',
    androidAllowWhileIdle: true,
    uiLocalNotificationDateInterpretation:
        UILocalNotificationDateInterpretation.absoluteTime,
  );
}

여기서는 tz 패키지의 TZDateTime 클래스를 사용하여 예약된 날짜와 시간을 지정합니다. zonedSchedule() 메서드를 사용하여 알림을 예약하고, 기타 알림 설정은 이전 단계와 동일합니다.

로컬 알림을 예약하는 방법은 위와 같습니다. 이제 플러터로 간단하고 효율적인 로컬 알림을 사용하여 앱을 개발할 수 있습니다.

참고 자료