应用内购买成功(.purchased),调用了函数,但变量未保持其新值

时间:2018-09-14 01:08:01

标签: swift in-app-purchase

我无法在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
        }
    }

如果从控制台粘贴到我在本文顶部粘贴的消息,您将看到

  1. 购买状态变为.purched

  2. givePurchasedProduct()被称为

  3. 我们成功地向numberOfZaps变量添加了(10)个zaps(用户以3开头),总计(13)。

  4. 此后,我立即触碰到背景,因此将打印出zaps的数量以确保一切正常。如您所见...在添加10个zap和打印zap之间没有任何动作,我似乎以某种方式丢失了它们... numberOfZaps立即设置为3。

  5. 每次我设置“ numberOfZaps”以尝试找出问题时,我都会搜索整个项目,尽管该问题仅在游戏场景的顶部与其他变量一起被设置一次。

  6. 我已经绝望了,因为我已经在这个问题上苦苦挣扎了几天。 我唯一能想到的是,鉴于这些是沙盒测试购买,鉴于实际上没有实际付款,变量以某种方式恢复了其原始值

感谢您投入宝贵的时间

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”之前,以确保我引用的是变量的正确实例。

谢谢!

1 个答案:

答案 0 :(得分:0)

givePurchasedProduct函数中,您将创建一个新的GameScene实例,更改其zaps数量,然后将GameScene对象丢弃。您拥有的其他GameScene对象(表面上控制应用程序正在显示的真实游戏场景)都不会被修改。