2014-03-25 5 views
5

SKPaymentTransaction이 있다면 SKProduct을 얻을 수있는 방법이 있습니까?StoreKit API의 SKPayment에서 SKProduct를 가져 오는 방법이 있습니까?

내 앱에서 발생하는 모든 인앱 구매를 알릴 수있는 일반 SKPaymentTransactionObserver을 구현하려고합니다. SKPaymentTransactionObserver 인터페이스를 구현했으며 paymentQueue: updatedTransactions: 콜백이 올바르게 실행되고 있습니다. 내 콜백에서는 SKPaymentTransaction 개체에 액세스 할 수 있으며 거기에서 SKPayment 개체를 얻을 수 있습니다. 지불 방법에서 나는 SKProduct을 얻을 수있는 방법을 찾을 수 없습니다.

SKProduct을 사용하여 SKPayment을 만들어야하지만이 인터페이스는 사용자가 productIdentifier을 얻을 수 있도록 허용하기 때문에 실망 스럽습니다. SKPayment를 만들려면

실제로 비용, 수량 및 현지 통화를 사용하고 싶습니다.이 금액은 SKProduct의 속성입니다.

내가 할 수있는 유일한 방법은 [SKPayment paymentWithProduct :]`를 휙하고 지불 계획을 가로 채는 것입니다. 이것은 끔찍한 전망입니다.

답변

5

SKPaymentTransaction 또는 SKPayment 객체에서 해당 정보를 가져 오는 것이 현재 가능하다고 생각하지 않습니다.

하나 이상의 제품 식별자가있는 SKProductRequest를 설정하여이 정보를 쿼리 할 수 ​​있습니다. 응답은 productsRequest:didReceiveResponse에 의해 처리됩니다.

Apple의 설명서에는 수행 방법에 대한 좋은 예가 있습니다. here.

+0

감사합니다. SKProductRequest를 실행하면 앱이 전체 프로세스를 시작하기 위해 앱을 수행해야 할 때이 데이터를 얻기 위해 Apple에 네트워크 요청을 (두 번째) 수행합니다. –

+1

오른쪽.어쩌면 언젠가 애플은 SK 페이먼트 (SKPayment)의 일환으로 SK 제품을 반환 할 것입니다. 나는이 요구를 시작할 때 바로하고 정보를 유지하지만, 나는 약간의 ID만을 가지고 있으므로 내 경우에는 효과가있다. –

5

주어진 SKPaymentTransaction에는 SKProduct를 가져 오는 방법이 있습니까?

당신은 내가이 문제에 달렸다는 productIdentifier의 배열을 찾는하여 SKProducts의 배열이있는 경우에는 제품 정보를 얻을 수있는 트랜잭션 개체에서 productIdentifier,

transaction.payment.productIdentifier 
2

를 얻을 수 , 너무. (나는 성공적인 구매시에 제품의 가격을 얻고 싶었다.) 나의 해결책은 productIdentifier을 키로 사용하여 Dictionary에 각 SKProduct을 저장하는 것이다. 여기에 (스위프트 3) 내 구현의 요지는 다음과 같습니다

는 클래스의 속성으로 사전을 선언 : 사전에

fileprivate var products = Dictionary<String, SKProduct>() 

스토어 제품 SKProductsRequestDelegateproductsRequest(_:didReceive:) 콜백 함수를 호출 할 때 :

SKPaymentTransactionObserverpaymentQueue(_:updatedTransactions:) 콜백 함수가 호출
extension PurchaseManager: SKProductsRequestDelegate { 
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { 
     for product in response.products { 
      products[product.productIdentifier] = product 
     } 
    } 
} 

, 사전에서 제품을 검색 :

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    for transaction in transactions { 
     let product = products[transaction.payment.productIdentifier] 
     let price = product?.price 
    } 
}