我无法在Xcode上的Swift 4上设置我的应用内购买。
购买成功完成,我知道这一点,因为以下内容已打印到控制台中。
“将产品添加到付款队列
购买了com.taptrudel.ZenHangman.Zap
ProductID:com.taptrudel.ZenHangman.Zap
给用户10个快捷键,新的快捷键计数: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
}
}
如果从控制台粘贴到我在本文顶部粘贴的消息,您将看到
购买状态变为.purched
givePurchasedProduct()被称为
我们成功地向numberOfZaps变量添加了(10)个zaps(用户以3开头),总计(13)。
此后,我立即触碰到背景,因此将打印出zaps的数量以确保一切正常。如您所见...在添加10个zap和打印zap之间没有任何动作,我似乎以某种方式丢失了它们... numberOfZaps立即设置为3。
每次我设置“ numberOfZaps”以尝试找出问题时,我都会搜索整个项目,尽管该问题仅在游戏场景的顶部与其他变量一起被设置一次。
我已经绝望了,因为我已经在这个问题上苦苦挣扎了几天。 我唯一能想到的是,鉴于这些是沙盒测试购买,鉴于实际上没有实际付款,变量以某种方式恢复了其原始值
感谢您投入宝贵的时间
ps。我只是注意到,例如,如果我使用(2)“ zaps”。让我离开(3)原来的(1)zap,可以给每个用户。
初始化如下所示。
class GameScene: SKScene {
var level = 1
var gameStarted = false
var numberOfZaps = 3
尽管我再购买(10)zaps。
预期的行为是看到用户现在有(11)个zaps
尽管我的控制台向我显示了购买后我们再次有(13)个zaps。因此,无论计数器当前位于何处,它似乎都会在原始值3上加10。
但是,像往常一样,在我单击新的确认确认后,立即单击“确定”,当我检查numberOfZaps时,我们回到(3)。 (不是13,不是11 ..)
我真的不知道我还能在这里做什么
numberOfZaps 的唯一修改时间是在3个不同的地方
1)一旦在我的gameScene顶部将其初始化
2)当用户购买(10)zaps时,我在numberOfZaps中添加了(10)
3)当用户在关卡中使用击键时,我从numberOfZaps中减去(1)
当我减去(1)个zap时,计数器可以正常工作并维护数据,尽管无论计数器当前在哪里,当我添加(10)个zap时,最终我都会得到(13)个zap足够的时间来打印我的陈述,似乎我离开该函数后,zaps就会返回到(3)。
因此,我也尝试添加“自我”。在“ numberOfZaps”之前,以确保我引用的是变量的正确实例。
谢谢!
答案 0 :(得分:0)
在givePurchasedProduct
函数中,您将创建一个新的GameScene
实例,更改其zaps数量,然后将GameScene
对象丢弃。您拥有的其他GameScene
对象(表面上控制应用程序正在显示的真实游戏场景)都不会被修改。