IOS개발: SWIFT/7. 실전 프로젝트 제작

Swift 알림: Local Notification과 Remote Notification

_Blue_Sky_ 2024. 9. 19. 14:32
728x90
728x90

알림의 종류와 개념

iOS 앱에서 사용자에게 정보를 전달하는 효과적인 방법 중 하나가 바로 알림입니다. 알림은 크게 Local NotificationRemote Notification 두 가지 종류로 나눌 수 있습니다.

  • Local Notification: 앱 자체에서 특정 조건이나 시간에 맞춰 발생시키는 알림입니다. 앱이 실행 중이든 백그라운드 상태이든 상관없이 사용자에게 알림을 보낼 수 있습니다. 주로 앱 내부의 이벤트나 사용자 설정에 따라 알림을 생성하는 경우에 사용됩니다.
  • Remote Notification: 외부 서버에서 앱으로 알림을 전송하는 방식입니다. 주로 서버에서 새로운 데이터가 업데이트되었거나, 사용자에게 특정 이벤트를 알려야 할 때 사용됩니다. Apple Push Notification service (APNs)를 통해 전달되며, 앱이 실행 중이지 않더라도 알림을 받을 수 있습니다.

Local Notification 구현

  1. UserNotificationCenter 요청:
    • 사용자에게 알림 수신 허용을 요청합니다.
    • 사용자가 허용하면 알림을 생성하고 스케줄링할 수 있습니다.
  2. UNMutableNotificationContent 생성:
    • 알림의 제목, 본문, 배지 숫자, 사운드 등을 설정합니다.
    • Rich Content를 사용하여 이미지나 미리 알림을 추가할 수도 있습니다.
  3. UNCalendarNotificationTrigger 생성:
    • 알림을 전달할 시간을 설정합니다.
    • 특정 날짜나 시간, 반복 설정 등을 사용할 수 있습니다.
  4. UNNotificationRequest 생성:
    • 위에서 생성한 content와 trigger를 이용하여 request 객체를 생성합니다.
    • 고유한 identifier를 부여하여 알림을 식별합니다.
  5. add(_:withCompletionHandler:) 메서드 호출:
    • UserNotificationCenter에 request를 추가하여 알림을 스케줄링합니다.
import UserNotifications

func scheduleLocalNotification() {
    let content = UNMutableNotificationContent()
    content.title = "Local Notification"
    content.body = "이것은 로컬 알림입니다."
    content.badge = 1
    content.sound = UNNotificationSound.default

    let trigger = UNCalendarNotificationTrigger(dateMatching: DateComponents(hour: 10, minute: 0), repeats: true)

    let request = UNNotificationRequest(identifier: "LocalNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request) { error in
        if let error = err or {
            print("Error scheduling  notification: \(error)")
        }
    }
}
 

Remote Notification 구현

  1. APNs 인증:
    • Apple Developer Portal에서 앱을 등록하고 APNs 인증 키를 생성합니다.
    • 생성된 인증 키를 서버 측에서 사용하여 Apple Push Notification service에 알림을 전송합니다.
  2. Device Token 획득:
    • 앱이 처음 실행될 때 사용자에게 알림 수신 허용을 요청하고, 허용하면 device token을 받습니다.
    • device token은 각 기기를 식별하는 고유한 값으로, 서버에서 알림을 전송할 때 사용됩니다.
  3. 서버에서 알림 전송:
    • 서버에서 APNs에 HTTP/2 연결을 통해 알림을 전송합니다.
    • 전송할 때 device token, payload(알림 내용) 등을 포함합니다.
  4. 앱에서 알림 처리:
    • 앱이 foreground 상태일 때는 UNUserNotificationCenterDelegate 메서드를 통해 알림을 처리합니다.
    • 앱이 background 또는 종료된 상태일 때는 앱이 실행되면서 알림을 처리합니다.
// AppDelegate.swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // 서버로 device token 전송
}
 
 

추가 고려 사항

  • 알림 권한: 사용자에게 알림 수신 허용을 요청하고, 허용하지 않으면 알림을 전송할 수 없습니다.
  • 배터리 최적화: iOS는 배터리 소모를 줄이기 위해 백그라운드 앱의 동작을 제한할 수 있습니다. 알림 전송 시 이를 고려해야 합니다.
  • 사용자 경험: 알림은 사용자에게 유용한 정보를 제공해야 합니다. 불필요한 알림은 사용자에게 불편을 줄 수 있으므로 신중하게 설계해야 합니다.
  • Rich Content: 이미지, 미리 알림, 터치 가능한 버튼 등 다양한 Rich Content를 사용하여 알림을 더욱 풍부하게 만들 수 있습니다.

Local Notification은 앱 내부에서 발생하는 이벤트에 대한 알림을 전달하는 데 효과적이며, Remote Notification은 외부 서버에서 실시간으로 알림을 전달해야 할 때 사용됩니다. 각각의 특징을 잘 이해하고, 앱의 요구사항에 맞게 적절한 알림 방식을 선택하여 사용해야 합니다.

더 자세한 내용은 Apple 개발자 문서를 참고하시기 바랍니다.

728x90
728x90