샌드 박스 환경에서 작동하지만 앱 스토어 버전의 인앱 구매는 사용자 계정에서 인출되지만 콘텐츠는 잠금 해제되지 않습니다.iOS- 앱 구매시 샌드 박스 환경에서 제대로 작동 함, 앱 스토어 버전 콘텐츠가 잠금 해제되지 않음
코딩에 문제가 있다고 생각하지 않습니다. 그렇지 않으면 샌드 박스 환경에서 작동하지 않습니다. 거래 영수증이 무효라고 생각할 수 있습니다.
다시 구입하려면 "이미 가입하셨습니다"라는 메시지가 나타납니다. 하지만 여전히 앱 콘텐츠를 잠금 해제하지는 않습니다. 심지어 구입을 복원하기 위해 클릭했지만 작동하지 않습니다. 나는 모든 것이 샌드 박스 환경에서 작동하는 것에 놀랐다.
구독 유형 : 자동 재생 가능. 콘텐츠 잠금 해제 : 오디오, 비디오 및 pdf 자습서.
백엔드 로그를 확인했습니다. API가 실행 된 적이없고 내가 채울 수있는 유일한 문제는 사용자가 성공적으로 구매 한 경우에도 앱 스토어 영수증을받지 못했다는 것입니다. 모든 것이 샌드 박스 환경에서 완벽하게 작동합니다.
코드 : 당신이 영수증 queue.finishTransaction (트랜잭션)를 확인 후
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing:
handlePurchasingState(for: transaction, in: queue)
case .purchased:
handlePurchasedState(for: transaction, in: queue)
case .restored:
handleRestoredState(for: transaction, queue: queue)
case .failed:
handleFailedState(for: transaction, in: queue)
case .deferred:
handleDeferredState(for: transaction, in: queue)
}
}
}
//On transaction state changed to purchased:
func handlePurchasedState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
print("User purchased product id: \(transaction.payment.productIdentifier)")
print("User purchased product id: \(transaction)")
queue.finishTransaction(transaction)
self.completeTransaction(transaction:transaction)
}
//In completeTransaction Method:
func completeTransaction(transaction:SKPaymentTransaction)
{
if let receiptURL = Bundle.main.appStoreReceiptURL,FileManager.default.fileExists(atPath: receiptURL.path)
{
let receipt:Data = try! Data(contentsOf: receiptURL)
let jsonObjectString = receipt.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
var strIdentifier:String = transaction.transactionIdentifier!
if let identifier = transaction.original?.transactionIdentifier
{
strIdentifier = identifier
}
//API call to save receipt to validate later and unlock the content
//In case API calling failed then I stored data and called API again on app home page.
}
}
우리는 자세한 내용을 필요하다 IAP의 유형이, 어떤 유형의 콘텐츠가 잠금 해제하고 코드를 게시 할 수 있습니다. 일반적으로 콘텐츠 잠금 해제는 앱의 책임이므로 코딩 문제는 배제하지 않을 것입니다. –
당신이 물어 본 질문을 편집했습니다. 확인해주십시오. 감사. – Vicky
[이 질문에 대한 답변] (https://stackoverflow.com/q/20027322/2466193)의 답변에 설명 된대로 refreshReceiptRequest를 사용하여 영수증을 새로 고침 해 보았습니다 –