Мой вопрос в основном состоит в том, как воспроизвести поведение, которое я вижу в других приложениях в магазине приложений в отношении покупок в приложении:
- Сразу после того, как пользователь нажал кнопку «Купить», кнопка скрыта и отображается счетчик (по существу, отменяется откат действия «Купить»).
- Нажатие кнопки отмены в диалоговом окне StoreKit (в приложении или вне его) приводит к отключению счетчика.
Я пытаюсь показать и скрыть счетчик на основе наблюдения за состоянием транзакций в SKPaymentQueue.
Моя проблема описана этим постером:
При покупке приложения пользователь отменяет передачу, когда приложение в фоновом режиме: состояние покупки остается при покупке
Я вижу то же поведение, что и в посте выше, независимо от того, вошел ли тестовый пользователь первым или нет. Транзакция в основном «застряла» в очереди с состоянием покупки навсегда (то есть мой счетчик отображается навсегда). Когда приложение полностью закрывается и перезапускается (а не просто выполняет многозадачность), транзакция больше не находится в очереди платежей, поэтому она, очевидно, на самом деле не продолжает совершать покупки. Это похоже на то, что SKPaymentQueue «пропустил» изменение состояния.
Еще одна деталь, которую я заметил, заключается в том, что в типичном случае сразу после добавления платежа транзакция отображается в очереди с состоянием покупки. Если пользователь нажимает кнопку «Отмена», состояние транзакции становится неудавшимся.
В случае отмены задания сразу после добавления платежа транзакция не отображается в очереди, пока не будет выполнена возврат к приложению. Вместо того, чтобы видеть два вызова делегата updatedTransactions (один с состоянием покупки и другой с состоянием сбоя), есть только один вызов делегату updatedTransactions с состоянием покупки. Транзакция никогда не завершится неудачей.
Очень редко при возврате к приложению я получаю обратный вызов удаленной транзакции (после просмотра обновленной транзакции с состоянием покупки). Даже в этом случае я никогда не увижу ожидаемое обновление транзакции до состояния сбоя.
Я не могу воспроизвести это поведение в приложениях в магазине приложений (они всегда правильно показывают / скрывают счетчик независимо от того, выполняют ли они задачи или нет), но мне не ясно, потому что они делают что-то хитрое, или если это только проблема в песочнице.
Как реплицировать это поведение, если нет, отслеживая состояние транзакции? Разве это не проблема на производстве?
Спасибо!