как понять, оплатил ли я уже In-App Purchase или нет

Я делаю приложение, в котором есть книги, а книги имеют аудио- и видеосервисы.

Клиент хочет In-App Purchase для приложения.

Ниже показано, как будет работать In-App.

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

Когда у меня есть zip, я распаковываю его после завершения загрузки.

Для меня вопрос заключается в том, как я могу определить, купил ли пользователь xyz книгу раньше или нет.

например Сегодня пользователь А оплатил книгу Б. Как я могу получить информацию о том, что пользователь А купил книгу?

Если бы у меня была система регистрации пользователей, я мог бы идентифицировать пользователя по идентификатору пользователя моей системы.

Некоторые говорят, что нужно сохранить идентификатор книги в NSUserDefaults, но проблема в том, что если я удалю приложение и установлю его снова, мне придется загрузить Книгу Б бесплатно.

Я просто хочу знать, как я могу отслеживать, какой пользователь скачал какую книгу.

Я делаю приложение для iOS 6 и 7


person Fahim Parkar    schedule 29.03.2014    source источник


Ответы (1)


РЕДАКТИРОВАТЬ:

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

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

.

NSMutableArray *productIDsToRestore = <# From the user #>;
SKPaymentTransaction *transaction = <# Current transaction #>;

if ([productIDsToRestore containsObject:transaction.transactionIdentifier]) {
    // Re-download the Apple-hosted content, then finish the transaction
    // and remove the product identifier from the array of product IDs.
} else {
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

Источник

person brian    schedule 29.03.2014
comment
Восстановление покупки было функцией покупок в приложении с момента его выпуска. - person Paulw11; 29.03.2014
comment
@Paulw11 : ооо... это звучит хорошо... просто чтобы подтвердить, скажем, я уже заплатил за Книгу Б.. теперь я удаляю приложение и устанавливаю снова... теперь я пытаюсь заплатить за Книгу Б... Будет ли Apple ответить, что вы уже заплатили за эту книгу? Если да, я думаю, что могу добиться того, чего хочу... - person Fahim Parkar; 29.03.2014
comment
Да, это правильно. Это похоже на удаление платного приложения с вашего iPad/iPhone. Когда вы пытаетесь купить его снова, Apple позволяет вам загрузить его бесплатно. - person Paulw11; 29.03.2014
comment
@brian: Но productIDsToRestore — это то, чем я буду управлять в своем приложении… верно? Если я удалю приложение, в productIDsToRestore ничего не будет... - person Fahim Parkar; 29.03.2014
comment
@Paulw11: Ооо... Я ничего не скачиваю с Apple... все скачивается с моего сервера... Apple только за плату... - person Fahim Parkar; 29.03.2014
comment
Да, это был просто пример того, как работает процесс восстановления/покупки. Apple предоставляет вашему приложению квитанцию ​​за предыдущую покупку — вы должны предоставить контент снова. - person Paulw11; 29.03.2014
comment
@Farhim Parker: Если вам нужно поддерживать более ранние версии iOS, чем iOS 7, где квитанция приложения недоступна, вместо этого восстановите завершенные транзакции. - person brian; 29.03.2014
comment
Если это помогло вам, пожалуйста, поместите это как ответ. - person brian; 02.04.2014