[swift] Swift에서 푸시 알림 사용하기

iOS 애플리케이션에서 사용자에게 푸시 알림을 보내는 것은 매우 중요한 기능 중 하나입니다. Swift 언어를 사용하여 푸시 알림을 구현하는 방법을 알아보겠습니다.

1. 알림 권한 요청하기

애플리케이션에서 알림을 사용하려면, 사용자로부터 알림 권한을 요청해야 합니다. AppDelegate.swift 파일에 다음 코드를 추가하세요:

import UserNotifications

// 알림 권한 요청
func requestNotificationAuthorization() {
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        // 권한 요청 결과 처리
        if let error = error {
            print("알림 권한 요청 실패: \(error.localizedDescription)")
        } else {
            if granted {
                print("알림 권한 허용")
                UIApplication.shared.registerForRemoteNotifications()
            } else {
                print("알림 권한 거부")
            }
        }
    }
}

위 코드를 AppDelegate 클래스의 didFinishLaunchingWithOptions 메서드 안에 호출해주세요:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // ...
    // 알림 권한 요청
    requestNotificationAuthorization()
    // ...
    return true
}

options 매개변수에서 .alert, .badge, .sound 등의 옵션을 지정하여 알림의 타입을 설정할 수 있습니다.

2. 디바이스 토큰 가져오기

푸시 알림을 받기 위해서는 애플 서버가 알아야 하는 디바이스 토큰을 가져와야 합니다. AppDelegate.swift 파일에 다음 코드를 추가하세요:

// 토큰 가져오기 성공 시 호출되는 메서드
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
    let token = tokenParts.joined()
    print("푸시 알림 디바이스 토큰: \(token)")
    // 애플 서버에 토큰 전송
}

// 토큰 가져오기 실패 시 호출되는 메서드
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("푸시 알림 디바이스 토큰 가져오기 실패: \(error.localizedDescription)")
}

didRegisterForRemoteNotificationsWithDeviceToken 메서드에서는 deviceToken 매개변수로 디바이스 토큰을 가져옵니다. didFailToRegisterForRemoteNotificationsWithError 메서드는 토큰 가져오기 실패 시 호출됩니다.

3. 푸시 알림 보내기

디바이스 토큰을 애플 서버로 전송하면, 서버에서는 해당 토큰을 사용하여 푸시 알림을 보낼 수 있습니다.

애플 서버와 통신하는 방법은 여러 가지가 있으며, 여기서는 애플의 발송 API를 사용하지 않고 간단한 예제로 설명하겠습니다.

import Alamofire

// 푸시 알림 보내기
func sendPushNotification() {
    let url = "https://your-push-server.com/send-notification" // 푸시 알림을 전송하는 서버의 URL
    let params: Parameters = [
        "title": "새로운 알림",
        "body": "안녕하세요! 새로운 알림입니다.",
        "target": "home"
    ]
    
    Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default)
        .validate()
        .responseJSON { response in
            switch response.result {
            case .success:
                print("푸시 알림 전송 성공")
            case .failure(let error):
                print("푸시 알림 전송 실패: \(error.localizedDescription)")
            }
        }
}

위 코드에서는 Alamofire를 사용하여 서버에 POST 요청을 보내는 예제를 보여줍니다. url은 푸시 알림을 전송하는 서버의 URL로 변경해야 합니다. params는 푸시 알림의 제목, 내용 등의 정보를 담은 매개변수입니다. 요청은 비동기로 처리되며, 성공과 실패에 따라 적절한 처리를 하시면 됩니다.


푸시 알림을 구현하는 방법에 대해 간단히 알아보았습니다. 애플 개발자 문서를 참고하여 더 자세한 내용을 확인하시기 바랍니다.