应用内购买成功(。购买),调用函数但变量不保持其新值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用内购买成功(。购买),调用函数但变量不保持其新值相关的知识,希望对你有一定的参考价值。
我在Xcode中在Swift 4上设置我的In App Purchase时遇到问题。
购买顺利完成,我知道这是因为以下内容已打印到控制台中。
“将产品添加到付款队列
购买了com.taptrudel.ZenHangman.Zap
产品ID:com.taptrudel.ZenHangman.Zap
给用户10个zaps,新的zap计数:13
numberOfZaps = 3“
extension IAPService: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
switch transaction.transactionState {
case .purchasing, .deferred: break // do nothing
case .purchased:
queue.finishTransaction(transaction)
givePurchasedProduct(productID: transaction.payment.productIdentifier)
case .restored:
self.restorePurchase()
queue.finishTransaction(transaction)
case .failed:
queue.finishTransaction(transaction)
}
}
}
}
一旦购买状态变为.purchased,上面的扩展调用givePurchasedProduct(productId:String)
该功能就在这里,它只是将productId传递给我的游戏场景中的一个功能,该功能将为用户提供他刚刚购买的消耗品。
func givePurchasedProduct(productID: String) {
guard let gameScene = GameScene(fileNamed: "GameScene") else { return }
gameScene.givePurchasedProduct(productId: productID)
}
现在,如果你看下面我们在我的GameScene。
func givePurchasedProduct(productId: String) {
print("ProductID : (productId)")
if productId.range(of: "Zap") != nil {
numberOfZaps += 10
print("Gave user 10 zaps, new zap count: (numberOfZaps)")
// TODO: CALL SAVE DATA HERE
}
}
如果您从我在此帖子顶部粘贴的控制台返回消息,您将看到
- 购买状态变为.purchased
- 调用givePurchasedProduct()
- 我们成功地将(10)zaps(用户以3开头)添加到numberOfZaps变量的总共(13)。
- 在此之后,我立即在任何地方触摸背景,这样就可以打印出zaps的数量,以确保一切正常。正如你所看到的......在添加10个zaps和打印zaps数量之间没有任何动作,我似乎已经失去了它们... numberOfZaps立即被设置回3。
- 每次我设置“numberOfZaps”来尝试识别问题时我搜索了我的整个项目,尽管它只在我的游戏场景的顶部设置了一次与其他变量。
- 因为我几天来一直在努力解决这个问题,所以我无望。我唯一能想到的是,鉴于这些是沙箱测试购买,变量以某种方式恢复到其原始值,因为实际上没有实际付款
感谢你花费数百万的时间
PS。我只是注意到,如果我使用(2)“zaps”例如。让我(1)从原始(3)中删除每个用户。
初始化如下所示。
class GameScene: SKScene {
var level = 1
var gameStarted = false
var numberOfZaps = 3
虽然我买了(10)更多的zaps。
预期的行为是看到用户现在有(11)zaps
虽然我的控制台告诉我,我们在购买后再次(13)zaps。因此,无论计数器当前在哪里,它似乎都会将原始值3加10。
但是像往常一样,在我点击确认我的新zaps之后立即点击,当我检查numberOfZaps时我们又回到了(3)。 (不是13,不是11 ..)
我真的不知道我还能在这做什么。
numberOfZaps被修改的唯一时间是3个不同的地方
1)一旦它在我的gameScene顶部初始化
2)当用户购买(10)zaps时,我将(10)添加到numberOfZaps
3)当用户在一个级别中使用zap时,我从numberOfZaps中减去(1)
当我减去(1)zap时,计数器完美地工作并保持数据,尽管当我添加(10)zaps而不管计数器当前在哪里时,我最终得到(13)zaps足够的时间来打印我的语句,一旦我离开这个功能,我的zaps就会回到(3)。
出于这个原因,我也尝试添加“自我”。在“numberOfZaps”之前确保我引用了变量的正确实例。
谢谢!
在givePurchasedProduct
函数中,您正在创建一个新的GameScene
实例,更改其zaps数,然后丢弃GameScene
对象。任何其他GameScene
对象,表面上控制着你的应用程序显示的真实游戏场景,都不会被修改。
以上是关于应用内购买成功(。购买),调用函数但变量不保持其新值的主要内容,如果未能解决你的问题,请参考以下文章
亚马逊应用内购买 API 版本 1.0 和 2.0 Android 之间的区别
iOS - 并非我所有的应用内购买都显示在 iTunesConnect 中
App Rejected - Uploaded new binary - In App Purchase - 需要开发人员操作 - 等待审核