Восстановление купленных продуктов

Пользователи восстанавливают транзакции для поддержания доступа для удовлетворения, они уже купили. Например, когда они обновляют до нового телефона, они не теряют все элементы, которые они купили по старому телефону. Включайте некоторый механизм в свое приложение, чтобы позволить пользователю восстановить их покупки, такие как кнопка Restore Purchases. Восстановление покупок запрашивает учетные данные App Store пользователя, прерывающие поток Вашего приложения: из-за этого автоматически не восстанавливайте покупки, особенно не каждый раз, когда Ваше приложение запускается.

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

Обновление получения просит у App Store последнюю копию получения. Обновление получения не создает новых транзакций. Несмотря на то, что необходимо избежать обновляться многократно подряд, это действие имело бы тот же результат как обновление его только один раз.

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

Дайте пользователю надлежащий уровень управления тем, какое содержание повторно загружается. Например, не загружайте ценность трех лет ежедневных газет или сотни ценности мегабайтов игровых уровней одновременно.

Обновление получения приложения

Создайте запрос обновления получения, установите делегата и запустите запрос. Запрос поддерживает дополнительные свойства для получения получений в различных состояниях во время тестирования, таких как истекшие получения — для подробных данных, посмотрите значения для initWithReceiptProperties: метод SKReceiptRefreshRequest.

request = [[SKReceiptRefreshRequest alloc] init];
request.delegate = self;
[request start];

После того, как получение обновляется, исследуйте его и поставьте любые добавленные продукты.

Восстановление завершенных транзакций

Ваше приложение запускает процесс путем вызова restoreCompletedTransactions метод SKPaymentQueue. Это отправляет запрос к App Store для восстановления всех завершенных транзакций приложения. Если Ваше приложение устанавливает значение для applicationUsername свойство его платежных требований, как описано в Обнаружении Неправильного Действия, использует restoreCompletedTransactionsWithApplicationUsername: метод для предоставления той же информации при восстановлении транзакций.

App Store генерирует новую транзакцию для каждой ранее завершенной транзакции. Восстановленная транзакция имеет ссылку на исходную транзакцию: экземпляры SKPaymentTransaction имейте a originalTransaction свойство и записи в получении имеют поле Original Transaction Identifier.

Вашего наблюдателя очереди транзакции вызывают с состоянием SKPaymentTransactionStateRestored для каждой восстановленной транзакции, как описано в Ожидании App Store для Обработки Транзакций. Меры, которые Вы принимаете в этой точке, зависят от проекта Вашего приложения.