1. pubspec.yaml 파일에 dependency 추가
timezone은 다른 기능 구현을 위해 추가한 패키지로 무시해도 됨,
알림 기능 구현을 위해서는 'flutter_local_notifications'만 추가
- 이때 패키지의 최신 버전을 추가해주어야 함
- 2023년 7월 기준 최신 버전은 아래와 같음
+) visual studio code 사용하는 경우 command+p(mac), ctrl+p(window) 단축키로 파일 이동 가능
2. Andriod native setting
- 'android/app/src/main/AndroidManifest.xml' 파일 작업
- <activity> 안에 아래 코드 추가 - 기기가 잠겨 있을 때도 알림 표시하도록 함
android:showWhenLocked="true"
android:turnScreenOn="true"
3. IOS native setting
- 'ios/Runner/AppDelegate.swift' 파일 작업
- Bool 안에 아래 코드 추가
- IOS는 기본적으로 어플이 열려있을 때 (foreground) 알림이 울리지 않도록 설정되어 있음
- IOS 10 이상에서 프레젠테이션 옵션을 사용하여 foreground에 있는 동안 알림이 표시되도록 설정
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
반응형
4. notification.dart 파일을 따로 만들어서 기본 설정 세팅
timezone 패키지 import 및 initializeTimeZone 함수는
다른 기능 구현을 위한 작업으로 알림 설정에서는 무시해도 됨
- main.dart 파일에 작업해줘도 되지만, 새로운 파일에 따로 Notification 클래스 생성
- IOS의 경우 앱을 실행했을 때 알림 권한을 묻고 싶으면 initializationSettingsIOS 안의 request 들을 true로 바꿔주면 됨
- 위 코드는 앱을 실행할 때 묻는게 아니라 알림 시간을 설정 후 권한을 묻기 위해 false로 세팅함
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
final notification = FlutterLocalNotificationsPlugin();
class PharmacyNotificationService { // 클래스명은 앱에 맞게 임의로 지정
Future<void> initializeNotification() async {
const initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
const initializationSettingsIOS = DarwinInitializationSettings(
requestAlertPermission: false,
requestBadgePermission: false,
requestSoundPermission: false,
);
const initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
await notification.initialize(
initializationSettings,
);
}
5. main.dart에서 클래스 인스턴스 생성 및 초기화 작업
- 위에서 추가한 notification.dart 파일 import (위 코드에서는 pharmacy_notification_service.dart)
- notification.dart 파일에서 생성한 Notofication 클래스의 인스턴스 생성 (위 코드에서는 PharmacyNotificationService())
- 알림 설정 세팅 - initializeNotification 메소드 호출
import 'services/pharmacy_notification_service.dart'; // norification.dart
final notification = PharmacyNotificationService(); // 위 파일에 생성한 Notification 클래스
void main() {
notification.initializeNotification();
runApp(const MyApp());
}
반응형
댓글