[swift] Swift Moya에서 Firebase Cloud Messaging 사용하기

Firebase Cloud Messaging (FCM)은 앱 개발자가 앱 사용자들에게 푸시 알림을 보낼 수 있는 플랫폼입니다. Moya는 Swift로 작성된 네트워크 추상화 라이브러리로, FCM을 Swift Moya에서 사용하려면 몇 가지 설정이 필요합니다.

1. Firebase 설정

FCM을 사용하려면 먼저 Firebase 프로젝트를 만들고 FCM을 활성화해야 합니다. Firebase 콘솔에서 프로젝트를 생성하고, iOS 앱에 해당 프로젝트를 연결하세요. Firebase에서 제공하는 GoogleService-Info.plist 파일을 다운로드한 후, 프로젝트에 추가해야 합니다.

2. Moya에 FCM을 위한 Provider 추가

Moya를 사용하여 FCM을 사용하려면 Firebase의 MessagingDelegate를 구현해야 합니다. 이를 위해 FirebaseMessagingProvider라는 Moya에서 사용 가능한 커스텀 provider를 생성할 수 있습니다.

import FirebaseMessaging
import Moya

final class FirebaseMessagingProvider: MoyaProvider<MultiTarget> {
    
    init() {
        let configuration = URLSessionConfiguration.default
        configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
        super.init(configuration: configuration)
    }
    
    func sendMessage(_ message: String, to token: String, completion: @escaping (_ success: Bool) -> Void) {
        let target = MultiTarget(FirebaseMessagingEndpoint.sendMessage(message: message, to: token))
        request(target) { result in
            switch result {
            case .success:
                completion(true)
            case .failure:
                completion(false)
            }
        }
    }
}

enum FirebaseMessagingEndpoint: TargetType {
    
    case sendMessage(message: String, to: String)
    
    var baseURL: URL {
        return URL(string: "https://fcm.googleapis.com/fcm/")!
    }
    
    var path: String {
        switch self {
        case .sendMessage:
            return "send"
        }
    }
    
    var method: Moya.Method {
        return .post
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {
        switch self {
        case .sendMessage(let message, let to):
            let parameters: [String: Any] = [
                "to": to,
                "notification": ["body": message],
                "priority": "high"
            ]
            return .requestParameters(parameters: parameters, encoding: JSONEncoding.default)
        }
    }
    
    var headers: [String: String]? {
        return [
            "Content-Type": "application/json",
            "Authorization": "key=YOUR_SERVER_KEY"
        ]
    }
}

위의 코드에서 Authorization 헤더에는 Firebase Console에서 받은 서버 키를 사용해야 합니다.

3. FCM 메시지 보내기

이제 FCM 메시지를 보낼 수 있는 FirebaseMessagingProvider를 사용하여 메시지를 보낼 수 있습니다. 다음은 예시 코드입니다.

let provider = FirebaseMessagingProvider()

provider.sendMessage("Hello, World!", to: "FIREBASE_DEVICE_TOKEN") { success in
    if success {
        print("Message sent successfully")
    } else {
        print("Failed to send message")
    }
}

FIREBASE_DEVICE_TOKEN은 푸시 알림을 받을 디바이스의 Firebase 토큰입니다.

이제 Swift Moya에서 Firebase Cloud Messaging을 사용하는 방법을 알았습니다. Firebase 프로젝트와 Swift Moya를 통해 앱에 푸시 알림을 구현할 수 있습니다.

참고 자료