Задать вопрос
@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 Оценить Комментировать
Решения вопроса 1
@s0L
Не завернет. Но лучше делать с серверной частью, во первых саму покупку можно защитить от ломалок, во вторых срок подписки контролировать. При подписке генерируйте UUID, отправляйте его на сервер вместе с покупкой и сохраняйте его в iCloud KVS, потом по этому UUID будете проверять подписку через сервер.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
alexyat
@alexyat
iOS Developer
Делал такие подписки:
1 свой сервер
2 сохранение производится отсылкой рецепта покупки + mac устройства
3 восстановление по запросу к АПИ с отправкой мака
4 регистрация не обязательна(требование Apple), но нужно предупреждать юзера что нужно регаться если захочет восстановить на другом устройстве
Ответ написан
@Rockerman Автор вопроса
Восстановление возможно только если пользователь зарегистрируется или достаточно mac адрес отправить?
Если пользователь сначала купил подписку, а потом захочет привязать покупку к аккаунту, то у него соответственно нет уже шансов?
Ответ написан
@Rockerman Автор вопроса
И как насчёт если сделать без регистрации/авторизации, а только через iCloud синхронизацию, завернёт это apple или нет?
Ответ написан
Комментировать
@Rockerman Автор вопроса
Я читал, iCloud может быть выключен. Надо тогда предупреждение как мимимум сделать, чтобы включить iCloud для шаринга подписок. Получается нужно хранить последний UUID (или md5 от receipt) покупки в iCloud, а при запросе с сервера статуса подписки проверять по этому UUID (есть ли он в базе). При этом, нужно локально сохрянять reciept до тех пор, пока не выполнится запрос проверки покупки на сервере. Мало ли, может интернет пропасть, программа зависнуть и потеряется транзакция покупки. Я правильно всё понимаю? Много тонкостей может всплыть
Ответ написан
@Rockerman Автор вопроса
Возникла трудность при проверке receipt для mac os x.
Беру я его так:
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
if([[NSFileManager defaultManager] fileExistsAtPath:[receiptURL path]]){
NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
}, но преобразовать к словарю, подобно как для iOS нем могу.
Такое ощущение, что у него совсем другой формат.
Кто-нибудь делал проверку покупки для mac?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы