У меня проблемы с настройкой покупок в приложении на Swift 4 в Xcode.
Покупка прошла успешно, я знаю это, потому что в консоль выводится следующее:
«Добавление продукта в очередь платежей
приобретено com.taptrudel.ZenHangman.Zap
ProductID: 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)
}
}
}
}
Расширение, указанное выше, вызывает givePurchasedProduct (productId: String), когда состояние покупки становится .purchased
Эта функция находится чуть ниже,он просто передает 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) в общей сложности (13) кПеременная numberOfZaps.
Сразу после этого я касаюсь фона в любом месте, как я сделал, так что это напечатало бы количество zaps, чтобы убедиться, что все работает.Как вы можете видеть ... без каких-либо действий между добавлением 10 zaps и печатью количества zaps, я почему-то, кажется, потерял их ... numberOfZaps немедленно возвращается к 3.
Я искал весь свой проект каждый раз, когда устанавливал «numberOfZaps», чтобы попытаться выявить проблему, хотя она была установлена только один раз в верхней части моей игровой сцены с другими переменными.
Я безнадежен, поскольку я боролся с этой проблемой в течение дней .Единственное, о чем я могу думать, это то, что, учитывая, что это тестовые покупки в «песочнице», переменная каким-то образом возвращается к своему первоначальному значению, учитывая, что на самом деле не было сделано реального платежа
СПАСИБОМИЛЛИОН ЗА ВРЕМЯ, КОТОРОЕ ВЫ УДИВИТЕЛЬНЫ
пс.Я просто заметил, что если бы я использовал (2) "zaps", например.Оставив меня с (1) zap от оригинала (3), который дается каждому пользователю.
Инициализация показана ниже.
class GameScene: SKScene {
var level = 1
var gameStarted = false
var numberOfZaps = 3
Хотя, когда я покупаю (10) больше zaps.
Ожидается, что пользователь теперь увидит (11) zaps
Хотя моя консоль показывает мне, что у нас снова есть (13) скачок после покупки.Таким образом, кажется, что он добавляет 10 к исходному значению 3 независимо от того, где в данный момент находится счетчик.
Но, как обычно, сразу после того, как я нажимаю «ОК» на подтверждение моих новых zaps, когда я проверяю числоOfZapsмы вернулись в (3).(не 13, не 11 ..)
Я действительно не знаю, что еще я могу здесь сделать.
Единственное время numberOfZaps изменено в 3 разных местах
1) Однажды, когда он инициализируется в верхней части моей игровой сцены
2) Когда пользователь покупает (10) zaps, я добавляю (10) к числуOfZaps
3)Когда пользователь использует zap во время уровня, я вычитаю (1) из numberOfZaps
Когда я вычитаю (1) zap, счетчик работает отлично и поддерживает данные, хотя, когда я добавляю (10) zaps независимо отгде счетчик находится в данный момент, я получаю (13) zaps, чтобы набрать достаточно времени для печати моего утверждения, и, как только я покидаю функцию, мои zaps возвращаются к (3).
По этой причинеЯ также попытался добавить "себя".перед "numberOfZaps", чтобы убедиться, что я ссылаюсь на правильный экземпляр переменной.
Спасибо!