티스토리 뷰

 

목록

  1. 앱 스토어(App Store)에 제품 등록 하기
  2. 앱 스토어(App Store)에서 제품 정보 및 목록 가져오기
  3. 앱 스토어(App Store)에 제품 결제 요청 및 응답  처리하기
  4. In App Purchase API

 

 

앱 스토어(App Store)에 제품 결제 요청 및 응답을  처리하기

//
//  AppStore.swift
//  DoctorSL
//
//  Created by 장정훈 on 2021/10/30.
//

import StoreKit

class AppStore: NSObject, ObservableObject {    
    private var productsRequest: SKProductsRequest?
    private var fetchedProducts = [SKProduct]()
    private var fetchCompletionHandler: (([SKProduct]) -> Void)?
    
    override init() {
        super.init()
        
        // 지불 대기열에 자신을 관찰자로 추가합니다.
        SKPaymentQueue.default().add(self)
    }
    
    // MARK: 2.1) 앱 스토어(App Store)에 제품 구매에 대한 지불을 처리합니다.
    private func paymentProduct(product: SKProduct) {
        // 지불할 상품을 설정합니다.
        let payment = SKPayment(product: product)
        
        // 앱 스토어(App Store) 지불 요청 큐에 지불 요청을 추가합니다.
        // SKPaymentTransactionObserver가 지불 요청에 대한 응답을 처리합니다.
        SKPaymentQueue.default().add(payment)
    }
}

extension AppStore {    
    // MARK: 2) 제품을 구매합니다.
    public func purchaseProduct(_ product: SKProduct) {
        self.paymentProduct(product: product)
    }
}

// MARK: 2.2) 제품 지불 요청에 대한 앱 스토어(App Store)의 응답을 처리합니다.
extension AppStore: SKPaymentTransactionObserver {    
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                // 트랜잭션 처리가 완료 되었음을 App Store에 알립니다.
                SKPaymentQueue.default().finishTransaction(transaction)
                break
            case .restored:
                // 트랜잭션 처리를 완료했음을 App Store에 알립니다.
                SKPaymentQueue.default().finishTransaction(transaction)
                break
            case .failed:
                // 트랜잭션 처리를 완료했음을 App Store에 알립니다.
                SKPaymentQueue.default().finishTransaction(transaction)
                break
            case .deferred, .purchasing:
                break
            @unknown default:
                break
            }
        }
    }
    
    // Tells the observer that the payment queue has finished sending restored transactions.
    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {        
    }
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함