[swift] Swift와 Firebase의 인앱 결제 서비스 연동 방법

인앱 결제 서비스는 앱 내에서 제품이나 서비스를 판매하고 결제를 받을 수 있는 기능입니다. Swift와 Firebase를 사용하여 인앱 결제 서비스를 연동하는 방법에 대해 알아보겠습니다.

Firebase 설정

  1. Firebase 콘솔에 로그인하고 프로젝트를 만듭니다.
  2. ‘월드 와이드 웹’을 선택하고, 생성된 프로젝트에 Firebase를 추가합니다.
  3. ‘In-App Purchases’ 탭에서 ‘구축’을 선택하고 ‘플레이스홀더용 App Store Product’을 만듭니다.
  4. 앱 내에서 판매할 제품의 정보를 입력하고 저장합니다.

Swift 프로젝트 설정

  1. Firebase SDK를 사용하기 위해 Podfile에 Firebase 및 Firebase/InAppMessaging 라이브러리를 추가합니다.
pod 'Firebase/Core'
pod 'Firebase/InAppMessaging'
  1. Terminal에서 pod install 명령어를 실행하여 라이브러리를 설치합니다.

  2. Xcode에서 프로젝트를 열고 AppDelegate.swift 파일을 엽니다.

  3. import Firebase 문을 추가하고, didFinishLaunchingWithOptions 메서드에 Firebase 설정 코드를 추가합니다.

import Firebase

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    return true
}
  1. ViewController.swift 파일을 열고, 인앱 결제 서비스를 초기화하는 코드를 작성합니다.
import Firebase

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 인앱 결제 서비스 초기화
        InAppPurchase.shared.initialize()
    }
}
  1. InAppPurchase.swift 파일을 생성하고, 인앱 결제 관련 코드를 작성합니다.
import Firebase

class InAppPurchase {
    static let shared = InAppPurchase()

    func initialize() {
        // Firebase 인앱 결제 서비스 초기화
        IAPHandler.shared.initialize()
        // 구독 관리자 설정
        SubscriptionManager.shared.initialize()
    }
}
  1. 인앱 결제 관련 코드를 작성하기 위해 IAPHandler.swift 파일을 생성합니다.
import StoreKit

class IAPHandler: NSObject {
    static let shared = IAPHandler()
    private override init() {}

    func initialize() {
        // 인앱 결제 트랜잭션 옵서버 등록
        SKPaymentQueue.default().add(self)
    }

    // 인앱 결제 트랜잭션 시작
    func startPayment(productId: String) {
        guard SKPaymentQueue.canMakePayments() else {
            print("인앱 결제가 비활성화되어 있습니다.")
            return
        }
        
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(payment)
    }
    
    // 인앱 결제 트랜잭션 처리
    func handlePaymentTransaction(transaction: SKPaymentTransaction) {
        switch transaction.transactionState {
        case .purchased:
            // 결제 완료 처리
            completePayment(transaction: transaction)
        case .failed:
            // 결제 실패 처리
            failedPayment(transaction: transaction)
        case .restored:
            // 복원 처리
            restorePayment(transaction: transaction)
        default:
            break
        }
    }

    // 결제 완료 처리
    func completePayment(transaction: SKPaymentTransaction) {
        // 제품 제공 및 결제 완료 처리
    }

    // 결제 실패 처리
    func failedPayment(transaction: SKPaymentTransaction) {
        // 결제 실패 처리
    }

    // 복원 처리
    func restorePayment(transaction: SKPaymentTransaction) {
        // 복원 처리
    }
}

// 인앱 결제 트랜잭션 옵서버 구현
extension IAPHandler: SKPaymentTransactionObserver {
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            handlePaymentTransaction(transaction: transaction)
        }
    }
}
  1. 인앱 구독 관리를 위해 SubscriptionManager.swift 파일을 생성합니다.
import Firebase

class SubscriptionManager {
    static let shared = SubscriptionManager()
    private override init() {}

    func initialize() {
        // 구독 관리자 설정
    }
}
  1. 인앱 결제 서비스를 사용하기 위해 해당 제품을 구매하는 버튼을 추가하고, 버튼을 눌렀을 때 IAPHandler.shared.startPayment(productId: "productID") 메서드를 호출하도록 설정합니다.

이제 Swift와 Firebase를 사용하여 인앱 결제 서비스를 연동하는 방법을 알아보았습니다. Firebase 콘솔에서 제품 정보를 설정하고, Swift 프로젝트에서 필요한 설정과 코드를 추가하여 인앱 결제를 사용할 수 있습니다.

참고 자료