본문 바로가기
App/Flutter

[Flutter] 푸시 알림 구현 - flutter_local_notifications, dependency 추가, 안드로이드 및 ios native setting

by Gina Sim 2023. 7. 2.

 

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());
}

 

 

 

반응형

댓글