Задать вопрос
@Rockerman

Как реализовать non-renewing подписку в iOS?

Необходимо реализовать подписку внутри iOS продукта за доступ к фитче. Поскольку auto-renewable подписку использовать скорее всего не получится (строгое ограничение на тип контента подписки), то решено использовать второй тип non-renewing. Но вот проблема - как и где сохранять информацию о сроке подписки, а также как синхронизовать между устройствами активные подписки?
Локально сохранять срок и сравнивать его с системным - это обходится банальной перестановкой системного времени и не вариант.
Apple не предоставляют механизм для восстановления подписок non-renewing, а также для проверки статуса(истечения даты) подписки.
Обязательно ли нужно делать форму регистрации/авторизации пользователя или можно как-то обойтись записью в iCloud? Можно ли использовать e-mail в случае авторизации и регистрации? Какую информацию лучше хранить в iCloud и передавать на свой сервер?

В общем, интересует как это всё можно сделать и не получить reject от apple при рассмотрении приложения. Сильно возиться с аккаунтами не хотелось бы, но с сервера можно сдеать простенький API, только вот что именно... На stackoverflow много обращений по схожим вопросам, но я пока так и не нашёл единого мнения на этот счёт, иногда apple допускает какие-то решения, у других эти же решения заворачивает, в общем полная неразбериха.
Буду очень благодарен, если кто-то поделится практической информацией как это всё можно реализовать, схема, может на примере своих приложений.
P.S.: На статьи по работе с in app на Хабре натыкался, но деталей и логику как работает сервер + клиент с такими подписками не нашёл.
  • Вопрос задан
  • 3226 просмотров
Подписаться 3 Оценить Комментировать
Ответ пользователя Rockerman К ответам на вопрос (6)
@Rockerman Автор вопроса
Я читал, iCloud может быть выключен. Надо тогда предупреждение как мимимум сделать, чтобы включить iCloud для шаринга подписок. Получается нужно хранить последний UUID (или md5 от receipt) покупки в iCloud, а при запросе с сервера статуса подписки проверять по этому UUID (есть ли он в базе). При этом, нужно локально сохрянять reciept до тех пор, пока не выполнится запрос проверки покупки на сервере. Мало ли, может интернет пропасть, программа зависнуть и потеряется транзакция покупки. Я правильно всё понимаю? Много тонкостей может всплыть
Ответ написан