[flutter] - Flutter에서의 알림 및 푸시 알림 처리 방법

본 포스트에서는 Flutter 애플리케이션에서 알림 및 푸시 알림을 처리하는 방법에 대해 알아보겠습니다.

Flutter는 iOS와 Android를 모두 지원하는 크로스 플랫폼 프레임워크이므로, 애플리케이션에서 알림 및 푸시 알림을 처리하는 방법도 플랫폼별로 다를 수 있습니다. 여기에서는 iOS와 Android의 알림 처리 방법을 간략하게 소개하겠습니다.

iOS에서의 알림 처리

iOS에서는 알림을 처리하기 위해 UserNotifications 프레임워크를 사용합니다. 먼저, AppDelegateUNUserNotificationCenterDelegate를 구현해야 합니다. 그리고 application(_:didFinishLaunchingWithOptions:) 메서드 내에서 알림 설정을 초기화합니다.

import UIKit
import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    // ...

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // ...

        UNUserNotificationCenter.current().delegate = self
        let options: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(options: options) { (granted, error) in
            if granted {
                // 알림 권한이 허용된 경우
            } else {
                // 알림 권한이 거부된 경우
            }
        }

        // ...
    }

    // ...
}

알림을 트리거하고 싶은 위치에서 다음과 같이 알림을 생성하고 스케줄링할 수 있습니다.

import UserNotifications

class MyNotifier {
    func scheduleNotification() {
        // 알림 내용 설정
        let content = UNMutableNotificationContent()
        content.title = "새로운 메시지"
        content.body = "알림 내용입니다."

        // 알림 트리거 설정
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

        // 알림 요청 생성
        let request = UNNotificationRequest(identifier: "myNotification", content: content, trigger: trigger)

        // 알림 스케줄링
        UNUserNotificationCenter.current().add(request) { (error) in
            if let error = error {
                print("알림 스케줄링 에러: \(error.localizedDescription)")
            }
        }
    }
}

Android에서의 알림 처리

Android에서는 알림을 처리하기 위해 NotificationCompat 라이브러리를 사용합니다. MainActivity에서 알림 설정을 초기화하고, 알림을 생성하고 스케줄링할 수 있습니다.

import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
    // ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 알림 채널 생성 (Android 8.0 이상에서 필요)
        createNotificationChannel()

        // 알림 생성 및 스케줄링
        val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("새로운 메시지")
            .setContentText("알림 내용입니다.")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)

        with(NotificationManagerCompat.from(this)) {
            notify(notificationId, notificationBuilder.build())
        }
    }

    // 알림 채널 생성
    fun createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT)
            val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
        }
    }

    // ...
}

알림을 스케줄링하려면 별도의 백그라운드 서비스를 사용해야 할 수도 있습니다. 이에 대한 자세한 내용은 Android 개발 가이드를 참고하시기 바랍니다.

결론

Flutter를 사용해 iOS와 Android에서 알림 및 푸시 알림을 처리하는 방법에 대해 알아보았습니다. 각 플랫폼별로 알림 처리를 위해 다른 라이브러리와 설정이 필요하기 때문에, 개발자는 플랫폼별 차이를 고려하여 알림 기능을 구현해야 합니다. Flutter의 풍부한 생태계를 활용하여 알림 기능을 보다 쉽게 구현할 수 있습니다.

참고 자료