- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我收到“此应用程序内购买已购买,它将免费恢复”但未调用代理 updatedTransactions 并且没有任何反应,IAP 未执行。
我已经实现了 Restore Purchase,它运行良好,但我如何防止用户再次购买非消耗品?为什么没有调用委托(delegate) updatedTransactions(SKPaymentTransactionState.Restored)?
即使在删除并重新安装应用程序后进行购买也会显示此弹出窗口。
这是我的代码。如果我做错了什么请告诉我。谢谢
func makePaymentForProduct(product:SKProduct){
let payment = SKPayment.init(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
func restorePurchases(){
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
//MARK: SKProductsRequestDelegate
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
self.delegate?.didGetProducts(response.products)
}
func request(request: SKRequest, didFailWithError error: NSError) {
self.delegate?.purchaseFailed(error.localizedDescription)
}
//MARK: SKPaymentTransactionObserver
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for (_, transaction) in transactions.enumerate() {
switch (transaction.transactionState) {
case SKPaymentTransactionState.Purchased:
self.completeTransaction(transaction)
break
case SKPaymentTransactionState.Restored:
self.restoreTransaction(transaction)
break
case SKPaymentTransactionState.Failed:
self.failedTransaction(transaction)
break
default:
break
}
}
}
func completeTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseSuccessful()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
func restoreTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseSuccessful()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
func failedTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseFailed("")
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
//Restore Purchase
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
self.delegate?.purchaseRestored()
}
func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) {
self.delegate?.purchaseFailed(error.localizedDescription)
}
最佳答案
您在 调用 .restoreCompletedTransactions()
后设置事务观察器,这可能是问题所在 - 我建议您尝试
func restorePurchases(){
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
而不是上面的实现。
作为旁注,我看到您的原始代码在多个位置添加了事务观察器 - 您可能会考虑尝试将其减少到一个位置(如果可能的话!)。
关于ios - SKPaymentQueue updatedTransactions 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362244/
请耐心等待。 我是 StoreKit 的初学者,对此我感到非常困难。 应用内购买的配置已全部完成,我已经成功进行了一些先前的测试。但现在该应用程序在启动后每隔一段时间就会崩溃一次。显然问题是以下错误:
我一直在测试 In App Purchases,只能假设队列中有交易。 我已经调用了 [[SKPaymentQueue defaultQueue] finishTransaction:transact
我通过 iTunes connect 在购买时设置了 6 个月的自动续订订阅。我创建了一个测试用户并购买了该订阅,现在当我尝试恢复我的购买时,它在 的交易数组中多次返回相同的交易 - (void)pa
我已经在 Apple 的门户中配置了我的 iOS 应用程序的应用内购买,我正在使用 SKProductsRequest 请求我的产品,并正确接收并将它们存储在 NSMutableDictionary
交易突然/意外/从 SKPaymentQueue 中删除 - 任何想法为什么? 简介 我们在 iOS-9 和 iOS-9.0.1 下遇到了 SKPaymentQueue 的奇怪行为。我们怀疑这是 iO
在我的 AppDelegate 中,我运行这个命令: SKPaymentQueue.defaultQueue().addTransactionObserver(self.storeDel); 当我运行
我正在尝试实现自动续订产品。问题是 SKPaymentQueue 无法通过调用 SKPaymentQueue.defaultQueue().finishTransaction(transaction)
我运行 Instrument 来检查我的应用程序中的 Leaks。它有 1 个新的泄漏 [SKPaymentQueue canMakePayments] 每次启动甚至没有调用支付代码。 最佳答案 根据
我收到“此应用程序内购买已购买,它将免费恢复”但未调用代理 updatedTransactions 并且没有任何反应,IAP 未执行。 我已经实现了 Restore Purchase,它运行良好,但我
我正在尝试为我的 Mac 应用设置应用内购买。购买产品工作正常,但我无法让 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions] 工
我正在通过应用内购买创建我的第二个应用。第一个应用程序的一切都很顺利,并且已在应用程序商店中显示,但是,当我调用第二个应用程序 [SKPaymentQueue canMakePayments] 时,我
SKPaymentQueue canMakePayments 总是返回 null 的原因可能是什么?我在 Simluator 中运行... 最佳答案 它返回 false,因为您正在模拟器中运行它并且您
我正在使用已弃用的 API,我想更新我的代码以使用未弃用的代码。 所以我的大问题是如何获得响应列表? - (void) buyFeature:(NSString*) featureId { //
我对什么时候打电话有点困惑: [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 在“服务器产品模型”中:http://dev
我有一个 iOS 应用程序,其中包含非消费性 IAP Apple 托管内容。下载量非常大 (~500MB)。 在下载内容时,我必须保持事务“打开”,并且只有在下载完成后才完成事务。 问题是,每次我将应
我无法在我的 paymentQueue:updatedTransactions: 委托(delegate)方法中接收任何交易。只有委托(delegate)方法 paymentQueueRestoreC
我已经在我的应用中实现了自动续订订阅。一切正常。唯一的问题是方法 public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactio
重要的是检查是否启用了应用内购买以正确阻止 UI,RayWenderlich 博客说: Apple requires that you handle this situation gracefully
我们的应用程序中有两个用于购买非续订订阅的 IAP。 - (void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray*
我正在构建一个带有 IAP(自动续订订阅)的应用程序。工作流程似乎工作正常,IPA 已创建(在 iTunes 连接中),沙盒用户也已登录。IAP 产品 ID 也正确,但我收到错误(来自 SKPayme
我是一名优秀的程序员,十分优秀!