[swift] Swift에서 푸시 알림을 사용하여 이동 알림 제공하기

푸시 알림은 사용자에게 중요한 정보를 실시간으로 전달하는 데에 사용됩니다. Swift 언어를 사용하면 iOS 애플리케이션에서 푸시 알림을 손쉽게 구현할 수 있습니다. 이번 포스트에서는 Swift에서 푸시 알림을 사용하여 이동 알림을 제공하는 방법을 알아보겠습니다.

1. 프로젝트 설정

먼저, 푸시 알림을 구현하기 위해서는 애플 개발자 계정과 프로젝트에 등록된 APNs(Apple Push Notification service) 인증서가 필요합니다. 이를 통해 애플 서버에서 알림을 보낼 수 있습니다.

  1. 애플 개발자 포털에 로그인하여 Certificates, Identifiers & Profiles 섹션으로 이동합니다.
  2. 알림을 보낼 애플리케이션에 대한 인증서를 생성하고 다운로드합니다.

2. 푸시 알림 설정

프로젝트에서 푸시 알림을 사용하도록 설정해야 합니다. 이를 위해 다음과 같은 단계를 수행합니다.

  1. Xcode에서 프로젝트를 열고 Capabilities 탭을 선택합니다.
  2. Push Notifications 스위치를 켜고 APNs 인증서를 선택합니다.
  3. 프로젝트의 AppDelegate.swift 파일을 열고 다음과 같은 코드를 추가합니다:
import UserNotifications

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().delegate = self
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        if granted {
            DispatchQueue.main.async {
                application.registerForRemoteNotifications()
            }
        }
    }
    return true
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
    let token = tokenParts.joined()
    print("Device Token: \(token)")
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Failed to register for remote notifications: \(error.localizedDescription)")
}

위 코드에서 didRegisterForRemoteNotificationsWithDeviceToken 메소드는 디바이스 토큰을 가져와서 내부 서버에 등록하는 등의 작업을 할 수 있습니다.

3. 푸시 알림 요청 및 처리

이제 앱 내에서 푸시 알림을 요청하고 처리해야 합니다. 예를 들어, 특정 이벤트가 발생하면 서버로부터 푸시 알림을 수신하는 경우를 가정해보겠습니다.

import UIKit
import UserNotifications

class ViewController: UIViewController, UNUserNotificationCenterDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 푸시 알림 수신을 처리하기 위해 델리게이트를 설정합니다.
        UNUserNotificationCenter.current().delegate = self
    }

    // 서버로부터 푸시 알림을 수신한 경우 호출되는 메소드입니다.
    func handlePushNotification(userInfo: [AnyHashable: Any]) {
        // 알림에 관련된 데이터를 추출합니다.
        if let aps = userInfo["aps"] as? [String: Any],
           let alert = aps["alert"] as? String {
            // 추출한 데이터를 이용하여 사용자에게 알림을 표시합니다.
            showNotificationAlert(title: "새로운 알림", message: alert)
        }
    }
    
    // 알림을 표시하는 메소드입니다.
    func showNotificationAlert(title: String, message: String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let okAction = UIAlertAction(title: "확인", style: .default, handler: nil)
        alert.addAction(okAction)
        present(alert, animated: true, completion: nil)
    }

    // 앱이 foreground에서 실행 중인 경우 푸시 알림을 표시합니다.
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .badge, .sound])
    }

    // 사용자가 푸시 알림을 탭하여 앱을 실행한 경우 호출됩니다.
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        handlePushNotification(userInfo: userInfo)
        completionHandler()
    }
}

위 코드에서 handlePushNotification 메소드는 푸시 알림을 처리하고 사용자에게 알림을 표시하는 역할을 합니다. showNotificationAlert 메소드를 사용하여 알림을 표시하며, userNotificationCenter 메소드를 사용하여 앱이 foreground에서 실행 중인 경우 알림을 표시하도록 설정합니다.

이제 푸시 알림을 통해 사용자에게 이동 알림을 제공할 수 있습니다. 사용자가 푸시 알림을 탭하면 해당 알림과 관련된 앱 화면으로 이동하도록 구현할 수 있습니다.

이상으로 Swift에서 푸시 알림을 사용하여 이동 알림을 제공하는 방법에 대해 알아보았습니다. 푸시 알림은 사용자 경험을 향상시키고 앱의 유용성을 높일 수 있는 강력한 도구입니다. 다음은 개발을 진행하면서 푸시 알림을 적극적으로 활용하여 사용자에게 적시에 필요한 정보를 전달하는 것을 권장합니다.