В случае, если это еще не решено, вы можете сделать это с помощью логического трюка. Когда восстановление запускается, запомните его с логическим флагом (или перечисленным состоянием, если хотите) и покажите другое сообщение, когда запускается SKPaymentTransactionStatePurchased. Вы можете реализовать два метода делегата
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
и
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
чтобы узнать, когда восстановление было закончено. И чтобы сохранить в этом случае, вы можете не позволить пользователю делать какие-либо покупки, пока идет восстановление. Вы можете показать пользователю что-то вроде this , чтобы пользователь увидел, что что-то происходит в данный момент.
Это то, что я сделал, и это работает для меня.