Транзакция.finish() не работает во время покупок в приложении Swift StoreKitIOS

Программируем под IOS
Ответить
Anonymous
 Транзакция.finish() не работает во время покупок в приложении Swift StoreKit

Сообщение Anonymous »

В настоящее время я разрабатываю приложение с использованием Swift.
Продукт не является расходным материалом (однократная покупка), а тестирование покупок в приложении проводится через TestFlight.
Некоторые тестировщики загружают приложение по общедоступной ссылке TestFlight и выполняют тесты покупок со своими личными идентификаторами Apple ID без использования специальных тестовых учетных записей в песочнице.
(Эти покупки по-прежнему обрабатываются как тестовые транзакции, а не как реальные обвинений.)
Проблема в том, что после завершения покупки транзакция.finish() не работает в состоянии .verified.
Когда приложение запускается, я проверяю незавершенные транзакции с помощью Transaction.unfinished.
Транзакция обнаруживается в операторе переключения в разделе .verified, и в этот момент я вызываю транзакцию.finish().
Однако после закрытия и перезапуска приложения происходит то же самое транзакция обнаруживается снова при повторении Transaction.unfinished.
На самом деле различий в коде нет по сравнению с ранее выпущенной производственной версией, но при тестировании покупки TestFlight транзакция.finish(), похоже, не завершается должным образом.
Из-за этой проблемы:
При повторной попытке приобрести тот же продукт лист покупки продукта иногда не отображается, или
После удаления и при переустановке приложения продукт считается уже купленным и восстановленным.
Я читал, что поведение может отличаться в производственной среде, но мне хотелось бы знать, как это исправить или правильно обработать.
мой простой код
public func buyProduct(_ product: Product){

Task {
do{
let result = try await product.purchase()

switch result{
case .success(let verification):
switch verification{
case .verified(let transaction):
await handleTransaction(transaction)
await transaction.finish()

case .unverified(_, let error):
}
case .userCancelled:
case .pending:
@unknown default:
}
}catch{
print("purchase failed: \(error.localizedDescription)")
}
}

}

public func checkedTransaction(){
for await result in Transaction.unfinished {

switch result {

case .verified(let transaction):
await transaction.finish()

case .unverified(_, let error):
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -purchases
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»