Приобретение непотребляемых продуктов в Xamarin.iOS

Неиспотребляемые продукты принадлежат клиенту. Ожидание заключается в том, что они всегда будут иметь доступ к ним, даже если их устройство потеряно или украдено или они покупают новый. Они полезны для книг, вопросов журнала, игровых уровней, фильтров фотографий, про-функций и т. д. Когда пользователь приобрел непотребляемый продукт, им никогда не придется платить за него снова. Если код случайно позволяет им попробовать, StoreKit отобразит сообщение о том, что он уже приобретен.

Пример неиспотребляемых продуктов

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

Процесс покупки показан в этой серии снимков экрана: кнопка "Купить " становится кнопкой активации функций:

Процесс покупки показан в этой серии снимков экрана

Процесс приобретения совпадает с потребляемым продуктом; Ключевое различие заключается в том, как покупка отслеживается в коде приложения. В этом примере кнопка "Купить" доступна только в том случае, если продукт еще не приобретен, в противном случае кнопка активирует саму функцию.

На следующей схеме показаны взаимодействия между классами и сервером App Store для выполнения неиспотребляемой покупки продукта:

Взаимодействие между классами и сервером App Store для выполнения покупки неиспотребляемого продукта

Ключевое отличие от примера Потребляемого заключается в том, что после завершения покупки пользовательский интерфейс обновляется, чтобы предотвратить повторную покупку. В этом примере уведомление об успешной транзакции обновляет пользовательский интерфейс, чтобы кнопка "Купить " была преобразована в кнопку, которая активирует саму функцию.

Повторное приобретение непотребляемых продуктов

Код должен обычно скрывать или перенацеливать кнопку покупки после успешной покупки продукта, чтобы предотвратить попытку пользователя снова приобрести продукт. Пример приложения делает это, изменив кнопку "Купить " на кнопку, которая делает пример фильтра фотографий работой.

Существуют ситуации, когда приложение не может определить, был ли уже приобретен непотребляемый продукт:

  • Если приложение удаляется и повторно устанавливается на устройстве, все записи покупки будут удалены (если пользователь не выполнит резервное копирование).
  • Если у пользователя установлено приложение на двух (или более) устройствах и выполняется покупка на одном из устройств. Другие устройства будут продолжать отображать продукт, доступный для покупки.
  • Если клиент пытается повторно приобрести непотребляемый продукт в этих ситуациях, Магазин приложений снова выполнит продукт без платы. Пользовательский интерфейс изначально будет отображаться для выполнения покупки (например, отображается оповещение о подтверждении и требуется идентификатор Apple ID), однако пользователь увидит сообщение о том, что продукт уже приобретен.

Путь кода в этом сценарии точно совпадает с обычной покупкой, единственными отличиями являются:

  • Пользователь снова не получает плату за продукт.
  • Объект SKPaymentTransaction , переданный приложению, будет иметь OriginalTransaction свойство, которое ссылается на транзакцию, созданную при первоначальной покупке продукта.
  • Приложения, которые продают непотребляемые продукты, также должны реализовать функцию восстановления StoreKit, чтобы помочь пользователям получить существующие покупки.