SKPaymentTransactionStateRestored не вызывается при восстановлении покупки в приложении

В моей покупке в приложении метод case SKPaymentTransactionStateRestored: не вызывается при восстановлении покупки, вместо этого вызывается case SKPaymentTransactionStatePurchased:, но он хотел бы показать пользователю другую информацию при восстановлении покупки.


person JonasG    schedule 24.07.2011    source источник
comment
Такая же проблема.. вы получили какой-нибудь ответ?   -  person k-thorat    schedule 03.08.2011
comment
@TheAstra нет, я до сих пор не нашел решения. Я, возможно, спрошу на форумах Apple Dev   -  person JonasG    schedule 03.08.2011
comment
нет .... Но я еще не спрашивал на форумах разработчиков Apple. Я бы порекомендовал сделать это, меня сейчас не очень интересует эта проблема, у меня есть другие более серьезные проблемы, которые нужно решить :P!   -  person JonasG    schedule 22.09.2011


Ответы (4)


[queue restoreCompletedTransactions] активирует состояние SKPaymentTransactionStateRestored, где очередью является SKPaymentQueue. Вы не должны ожидать, что это будет вызвано после того, как ваш пользователь подтвердит транзакции. Вместо этого пользователь будет предупрежден устройством, если он уже приобрел продукт.

person Bora    schedule 17.10.2011

У меня есть подсказка. Метод (paymentqueue:updatedTransactions:) и особенно состояние SKPaymentTransactionStateRestored: вызывается, когда я создаю SKProductRequest и начинаю его загружать.

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithArray: productIdentifiers]];
        request.delegate = self; 
        [request start];

Я посмотрю на решение Apple и посмотрю, смогу ли я найти какие-либо различия.

person NicTesla    schedule 23.09.2011

Вы можете реализовать paymentQueueRestoreCompletedTransactionsFinished:, чтобы определить, было ли завершено восстановление:

http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKPaymentTransactionObserver_Protocol/Reference/Reference.html

person robodo    schedule 05.07.2012

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

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

и

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error

чтобы узнать, когда восстановление было завершено. И чтобы сэкономить в этом случае, вы можете не позволять пользователю совершать какие-либо покупки, пока идет восстановление. Вы можете показать пользователю что-то вроде это, чтобы пользователь видит, что что-то в данный момент происходит.

Это то, что я сделал, и это работает для меня.

person NicTesla    schedule 26.04.2013