Мой вопрос в основном заключается в том, как воспроизвести поведение, которое я вижу в других приложениях в магазине приложений в отношении покупок в приложении:
- Сразу после того, как пользователь нажимает «Купить», кнопка скрывается, и отображается счетчик (по сути, устраняющий отскок действия «Купить»).
- Пользователь, нажимающий кнопку "Отмена" в диалоговом окне StoreKit (в приложении или вне его), приводит к исчезновению счетчика.
Я пытаюсь показать и скрыть счетчик на основе наблюдения за состоянием транзакций в SKPaymentQueue.
Моя проблема описана этим плакатом:
Я вижу то же поведение, что и в сообщении выше, независимо от того, вошел ли тестовый пользователь первым или нет. Транзакция в основном «застряла» в очереди с состоянием покупки навсегда (это означает, что мой счетчик отображается навсегда). Когда приложение полностью закрыто и перезапущено (а не просто многозадачно), транзакция больше не находится в очереди платежей, поэтому на самом деле это явно не покупка. Это похоже на то, что SKPaymentQueue «пропустил» изменение состояния.
Еще одна деталь, которую я заметил, заключается в том, что в типичном случае сразу после добавления платежа транзакция появляется в очереди с состоянием покупки. Если пользователь нажимает кнопку «Отмена», транзакция переходит в состояние «сбой».
В случае отмены задачи сразу после добавления платежа транзакция не появляется в очереди до тех пор, пока задача не будет возвращена в приложение. Вместо двух вызовов делегата updatedTransactions (один с состоянием покупки и один с состоянием отказа) есть только один вызов делегата updatedTransactions с состоянием покупки. Транзакция никогда не становится неудачной.
Очень редко, возвращаясь к приложению, я получаю обратный вызов удаления транзакции (после просмотра updateTransaction с состоянием покупки). Даже в этом случае я никогда не вижу ожидаемого обновления транзакции до состояния сбоя.
Я не могу воспроизвести это поведение в приложениях в магазине приложений (они всегда правильно показывают/скрывают счетчик, независимо от того, отстранены ли они от задачи или нет), но мне не ясно, связано ли это с тем, что они делают что-то хитрое, или это только проблема в песочнице.
Как воспроизвести это поведение, если не отслеживать состояние транзакции? Это не проблема в производстве?
Благодарность!
1 ответ
Я использовал MKStoreKit для всех своих приложений.
Он имеет блочный интерфейс, который сообщает вам, когда транзакция началась (чтобы скрыть кнопку и начать анимацию).
Он также сообщит вам, если транзакция не удалась или она была завершена, поэтому вы можете остановить анимацию и восстановить кнопку (если она не удалась) или показать что-то еще, когда она будет завершена.
Поскольку он использует блоки, вы можете справиться со всем этим поведением без написания большого количества шаблонного кода.
Похожие вопросы
Связанные вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].