как да разбера дали вече съм платил или не за покупка в приложението

Създавам приложение, в което има книги, а книгите имат аудио и видео услуги.

Клиентът иска покупка в приложението за приложението.

По-долу е описано как ще работи In-App.

Ако потребителят иска да купи книгата, потребителят ще купи книгата и след като транзакцията приключи, автоматично ще бъде изтеглен zip файл (от моя сървър, където добавям изображения, видео, аудио за книгата).

След като имам zip, го разархивирам, след като изтеглянето приключи.

За мен въпросът е как мога да разбера дали потребителят xyz е закупил книгата преди или не.

напр. Днес потребител A плати за книга B. Как мога да получа информация, че потребител A е закупил книга?

Ако можех да имам система за регистриране на потребители, можех да идентифицирам потребителя по потребителски идентификатор на моята система.

Някои казват, запазете идентификатора на книгата в NSUserDefaults, но проблемът е, че ако изтрия приложението и го инсталирам отново, трябва да изтегля книга B безплатно.

Просто искам да знам как мога да следя кой потребител коя книга е изтеглил.

Правя приложение за 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 : оххк... това звучи добре... само за потвърждение, да кажем, че вече платих за Книга B.. сега изтривам приложението и инсталирам отново... сега се опитвам да платя за Книга B... Ще 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