2016-12-14 2 views
0

У меня есть приложение Xamarin для iOS с покупками в приложении. Во время тестирования я купил один расходный продукт, но не закончил трансляцию (потерпел крах при ошибке). Теперь, если я переустанавливаю приложение, он позволяет приобрести этот продукт, но, конечно, он его восстанавливает и показывает сообщение «продукт был восстановлен бесплатно».iOS: ранее приобретенный продукт в приложении восстанавливается при покупке, но транзакции не обновляются

Ожидается такое поведение, но UpdateTransactions слушателя очереди не запускается. Я мог проверить очередь непосредственно через StoreKit.SKPaymentQueue.DefaultQueue.Transactions, но мне нужно знать, когда пользовательское взаимодействие заканчивается (пользователь нажимает OK в этом диалоговом окне сообщений). Но никакие методы прослушивания не запускаются. Как я понимаю из документов Apple, после этого должно быть обновление транзакций. Может быть, он уволен до того, как я попытаюсь купить. Но тогда я должен проверить очередь вручную перед покупкой?

ответ

3

Я не использую Xamarin, но StoreKit подкладочный iOS, поэтому он не может работать иначе в Xamarin. Событие должно быть запущено раньше. Как только вы добавите наблюдателя транзакций ([[SKPaymentQueue defaultQueue] addTransactionObserver: self]), вы получите обратный вызов обновления со всеми незавершенными транзакциями. Если это будет сделано при запуске приложения (и оно должно быть), к моменту выхода на экран покупки у вас будут обновлены транзакции. Для меня это самая сложная часть разработки IAP, так как вы должны обрабатывать их при запуске приложения, а также на всех экранах, где у вас есть, и обратные вызовы могут произойти в любое время.

Также обратите внимание, что эта ожидающая транзакция может появляться несколько раз в списке транзакций (в основном я использовал неиспользуемые ресурсы, поэтому новая транзакция добавляется каждый раз, когда вы перезапускаете приложение, не закрывая все ожидающие транзакции). Для этого у меня был компонент, который добавляется как наблюдатель транзакций, как только приложение запускается, прослушивает обновленные транзакции и сохраняет их в переменной экземпляра для последующего использования. Прежде чем начать новую покупку, я проверю, есть ли ожидающая транзакция с таким же идентификатором продукта и действует соответственно.

Надеюсь, это поможет.

+0

спасибо, я подозревал что-то подобное. Кстати, вы можете проверить очередь в любое время, так что вам не нужно делать это точно, когда приложение запускается - по крайней мере, в xamarin SKPaymentQueue.DefaultQueue.Transactions всегда доступно, поэтому нет необходимости хранить их дополнительно. – Tertium

+0

Я отредактировал ответ. Обязательно перечитайте. Извините за это :) –

+0

Я переписал код, а позже пометьте свой ответ – Tertium

Смежные вопросы