当还没有购买时,IAP正在恢复
当用户调用restorePurchases()时,即使认为它们不拥有它,也会恢复非易失性com.premium。 以下是负责恢复购买和购买IAP的功能。这只是非消耗性IAP的一个问题。 购买没有问题。如果用户试图购买他们已有的IAP,则只需恢复。感谢您查看此内容。当还没有购买时,IAP正在恢复
func restorePurchases() {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print("transactions restored")
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
print("starting restoring")
switch prodID {
case "com.premium":
print("restoring ads")
removeAds()
case "com.cash":
print("we dont restore coins")
case "com.level":
print("we dont restore levels")
default:
print("can't restore")
}
}
这是我的付款队列也。
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("add paymnet")
for transaction:AnyObject in transactions {
let trans = transaction as! SKPaymentTransaction
print(trans.error)
switch trans.transactionState {
case .purchased:
print("buying, ok unlock iap here")
print(p.productIdentifier)
let prodID = p.productIdentifier as String
switch prodID {
case "com.premium":
print("buying ads")
removeAds()
case "com.cash":
print("buying coins")
addCoins()
case "com.level":
print("buying levels")
addLevels()
default:
print("can't buy")
}
queue.finishTransaction(trans)
break;
case .failed:
print("buy error")
queue.finishTransaction(trans)
break;
default:
print("default")
break;
}
}
}
您不应更新paymentQueueRestoreCompletedTransactionsFinished
中的任何购买状态。此功能只是让您知道恢复过程已完成。您可以使用它来更新您的用户界面或显示警报或其他内容。
恢复过程将事务恢复到updatedTransactions
函数,其中您以与处理.purchased
状态相同的方式处理.restored
状态。
基本上“恢复”只是为非消费型和自动续订订购购买类型重放购买交易流程。
,那么您可以编辑您的问题以包含您的“新”代码,因此在我的paymentQueue函数中,在交换机trans.transactionState中。我应该使用.restored情况? – james
是的,这是正确的 – Paulw11
因此,当我调用restorePurchases()时,它会到达.restoringAttempt,但打印(p.productIdentifier)在控制台中打印一条空白行,因此它会转到默认状态并指出:无法购买。但是,如果我按下购买按钮,并登录但不购买。然后我试图恢复它的作品。那么我需要在我的restorePurchases()中包含哪些内容才能提示第一次登录?再次感谢。 – james
您是否每次都使用全新的测试用户帐户进行测试? – brandonscript
@brandonscript是的我每次都使用一个新帐户。 – james
我回滚了你的编辑,因为它删除了原来的代码,这是“问题”,并在一定程度上使答案失效。如果您喜欢 – Paulw11