[swift] Swift FirebaseUI를 사용하여 응용 프로그램 인앱 구매 구현하기

Firebase는 구글의 클라우드 기반 플랫폼으로, 다양한 기능을 제공하여 응용 프로그램 개발을 간편하게 해줍니다. FirebaseUI는 Firebase를 사용하여 인증 및 데이터 작업을 손쉽게 처리할 수 있는 iOS용 라이브러리입니다. 이번 블로그 포스트에서는 Swift FirebaseUI를 사용하여 응용 프로그램 내에서 인앱 구매를 구현하는 방법을 알아보겠습니다.

1. FirebaseUI 설치하기

FirebaseUI를 사용하기 위해서는 먼저 FirebaseUI 라이브러리를 설치해야 합니다. 이를 위해서는 CocoaPods를 사용할 수 있습니다. Podfile 파일을 열고 다음과 같이 FirebaseUI에 대한 의존성을 추가합니다.

pod 'FirebaseUI/Firestore'

그런 다음 터미널에서 다음 명령을 실행하여 FirebaseUI를 설치합니다.

pod install

2. Firebase 프로젝트 설정하기

FirebaseUI를 사용하여 인앱 구매를 구현하기 전에 Firebase 프로젝트를 설정해야 합니다. Firebase 콘솔에 로그인하고 새 프로젝트를 생성한 후, Firebase 콘솔에서 Firebase 인앱 구매 기능을 활성화해야 합니다.

3. 인앱 구매 화면의 UI 구성하기

인앱 구매 기능을 활성화한 후, 응용 프로그램의 인앱 구매 화면을 디자인합니다. 이는 Xcode의 스토리보드를 사용하여 할 수 있습니다. 필요에 따라 제품 정보, 가격 등을 표시할 수 있습니다.

4. FirebaseUI를 사용하여 인앱 구매 처리하기

이제 FirebaseUI를 사용하여 인앱 구매를 처리할 준비가 되었습니다.

먼저, FirebaseUI에서 제공하는 FUIAuth 객체를 사용하여 사용자 인증을 수행합니다. 응용 프로그램에서 로그인한 사용자가 Firebase 인앱 구매를 이용할 수 있도록 인증이 필요하기 때문입니다.

다음은 FirebaseUI를 사용하여 응용 프로그램에 로그인 기능을 구현하는 예제 코드입니다.

import FirebaseUI

class ViewController: UIViewController, FUIAuthDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let authUI = FUIAuth.defaultAuthUI()
        authUI?.delegate = self

        // 로그인 프로바이더 설정 (구글, 이메일 등)
        let providers: [FUIAuthProvider] = [
            FUIGoogleAuth()
            // 다른 필요한 로그인 프로바이더를 추가할 수 있습니다.
        ]
        authUI?.providers = providers

        let authViewController = authUI!.authViewController()
        self.present(authViewController, animated: true, completion: nil)
    }
    
    // 로그인이 완료되었을 때 호출됩니다.
    func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) {
        if error != nil {
            // 로그인 실패 처리
            return
        }
        
        // 로그인 성공 처리
        // 이후 인앱 구매 관련 동작을 수행합니다.
    }
}

위의 예제 코드에서는 구글 로그인 프로바이더를 사용하여 로그인을 수행하고, 로그인이 완료되면 didSignInWith 메서드가 호출됩니다. 이 메서드 내에서 인앱 구매 관련 동작을 수행할 수 있습니다.

5. 인앱 구매 관련 동작 구현하기

FirebaseUI를 사용하여 로그인한 후, 인앱 구매 관련 동작을 구현할 수 있습니다. Firebase는 실시간 데이터베이스를 사용하여 인앱 상품 및 구매 정보를 저장하고 검색할 수 있는 기능을 제공합니다.

예를 들어, 사용자가 로그인한 후에 특정 인앱 상품을 구매하고자 할 때, Firebase 데이터베이스에 해당 구매 정보를 저장하고, 사용자의 구매 내역을 관리할 수 있습니다.

import FirebaseDatabase

class InAppPurchaseManager {
    
    static let shared = InAppPurchaseManager()
    private lazy var ref = Database.database().reference()
    
    // 인앱 상품 구매 동작
    func purchaseProduct(productId: String, completion: @escaping (Error?) -> Void) {
        let user = Auth.auth().currentUser
        guard let uid = user?.uid else {
            completion(NSError(domain: "", code: 401, userInfo: ["message": "User is not logged in"]))
            return
        }
        
        let purchaseInfo = ["productId": productId, "userId": uid]
        
        ref.child("purchases").childByAutoId().setValue(purchaseInfo) { (error, ref) in
            completion(error)
        }
    }
    
    // 사용자의 구매 내역 조회
    func fetchUserPurchases(completion: @escaping ([Purchase]?, Error?) -> Void) {
        let user = Auth.auth().currentUser
        guard let uid = user?.uid else {
            completion(nil, NSError(domain: "", code: 401, userInfo: ["message": "User is not logged in"]))
            return
        }
        
        ref.child("purchases").queryOrdered(byChild: "userId").queryEqual(toValue: uid).observeSingleEvent(of: .value, with: { (snapshot) in
            var purchases: [Purchase] = []
            
            for child in snapshot.children {
                if let snapshot = child as? DataSnapshot,
                   let purchaseDict = snapshot.value as? [String: Any],
                   let purchase = Purchase(dictionary: purchaseDict) {
                    purchases.append(purchase)
                }
            }
            
            completion(purchases, nil)
        }) { (error) in
            completion(nil, error)
        }
    }
}

struct Purchase {
    let productId: String
    let userId: String
    
    init?(dictionary: [String: Any]) {
        guard let productId = dictionary["productId"] as? String,
              let userId = dictionary["userId"] as? String else {
            return nil
        }
        
        self.productId = productId
        self.userId = userId
    }
}

위의 예제 코드에서는 InAppPurchaseManager 클래스를 정의하여 인앱 상품 구매 동작 및 사용자의 구매 내역 조회 기능을 구현했습니다. purchaseProduct 메서드를 사용하여 인앱 상품을 구매하고, fetchUserPurchases 메서드를 사용하여 사용자의 구매 내역을 조회할 수 있습니다.

인앱 구매 기능을 구현한 후에는 Firebase 콘솔에서 해당 구매 정보를 확인할 수 있습니다.

마무리

이제 Swift FirebaseUI를 사용하여 응용 프로그램 내에서 인앱 구매를 구현하는 방법을 알아보았습니다. FirebaseUI를 사용하면 Firebase를 활용한 인앱 구매 관련 기능을 쉽게 구현할 수 있습니다. FirebaseUI의 다양한 기능을 활용하여 응용 프로그램을 더욱 효율적으로 개발하고 관리할 수 있습니다.

참고: FirebaseUI iOS

프로젝트를 만들고 FirebaseUI를 사용해 보세요!