Подписка с/без автоматическим продлением


#1

Всем привет.

Посмотрела я курс по встроенным покупкам, но так и не поняла, вот пользователь сделал покупку, например с автопродлением подписки … или без него … закончилась подписка, либо он отменил автопродление. Дальше то что? Как-то же нужно ограничить функционал? А для этого нужно сперва как-то понять, что подписка отменена либо закончилась. Помогите сообразить :hugs:

ps. Спасибо админам за курсы! как бы я не выёживалась - всё равно эти курсы swiftbook самые-самые классные)


Подписки в приложении
#2

Вдруг это то что нужно


#3

Я смотрела, там нет файла этого и у автора он не сохранился


#4

Да. В курсе вроде бы показывали как проверять. Но вообще когда подписка сделана и если сама платежная система это никак не контролирует (дату истечени подписки), то это надо реализовывать либо в программе (в каком-нидь Keychain сохранить) либо отправить на сервер и там пусть данные лежат. А при запуске сверять актуальная подписка или нет.


#5

В курсе всё есть вроде:
на сколько помню там, так же через ReceiptValidator от Andrew Bancroft, который используется в курсе для проверок покупок, получаете чек нужной покупки (receipt). Там есть метод .subscriptionExpirationDate?.compare(Date()) == .orderedDescending - который сравнивает дату окончания подписки с текущей. Вот и всё - дальше ваша логика, если дата окончания прошла, то получите false
Невозобновляемая вроде отличается просто чётким сроком окончания. Если есть подписка, то и срок окончания всегда впереди. (могу ошибаться по этому поводу, но вроде так)

Посмотрите курс ещё раз, там всё что нужно для подписок есть.


#6

В курсе ReceiptValidator позиционируется как защита от взлома.

Мне вообще просто нужно, чтобы приложение было доступно бесплатно для установки + через неделю появлялось сообщение, что дальнейшее использование только за денюжку. А покупка одна - использование на месяц. Человек купил премиум - деньги списались … а через месяц опять напомнило.

И вопрос возник … есть авто-возобновляемая и не возобновляемая. Читаю вот, что у авто-возобновляемой должен быть какой-то динамический контент. А если у меня просто программы … человек пользуется и всё. Ну и обновления выходят. В этом случае как быть лучше, чтобы не отказали в размещении?


#7

тогда просто покупка полной версии: т.е. базовый функционал бесплатно, а дополнительный за плату. Я считаю такую модель достаточно удобной и честной, тк человек пользуется и если действительно полезно для него, он купит. И есть возможно бесплатно оценить само приложение - надо или нет. На такое приложение “статичное” конечно нельзя делать подписку.

там же с помощью его есть и проверка подписки


#8

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


#9

Поддержка всё ровно должна быть у приложений, даже бесплатных :wink:
Подписка нормально когда, разный контент постоянно (радио или что-то подобное), огромное количество контента, который вы будете потре■■■■■ ни один месяц/год (например изучение языка), необходимость платить за серверы (сетевые функции в приложении)…

Смотрите сами… По мне так просить плату за полный функционал и давать что-то бесплатно, чтобы люди могли оценить для первого приложения - норм. Требовать подписку за первое корявое приложение - это уже слишком )))
Все учимся, успеете ещё подписок наделать за более приемлемый контент :wink:

З.Ы Встроеный фильтр не знает синоним слова “усваивать/получать” (от слова “потребность”) контент??? Админы, АУ )))


#10

Пересмотрела в курсе урок про валидацию. Возник вопрос вот. Там получается идет проверка только при покупке … То есть человек покупает и у него записывается в юДефолтс значение тру/фолс … Но в дальнейшем, в момент окончания подписки должно же как-то об этом сообщить приложение и ограничить функционал, а перед этим приложение должно опять обратиться за датой окончания. Получается сперва нужно дату взять и куда-то записать … и потом проверять её регулярно … так получается? запуталась. Вот если дата вышла или пользователь отменил подписку, надо же об этом узнать? Там такого нет в курсе. Там проверка действует или не действует подписка получается в момент покупки …


#11

Опять же, не возобновляемая подписка … нужно где-то хранить дату. если хранить в юДефолтс - то приложение можно переустановить и всё … либо валидация при первом запуске … я не поняла в итоге, в курсе есть ответы на эти вопросы и это я не понимаю ничего, или там нет ответов на эти вопросы?


#12

Плохо посмотрели значит ))) При каждом использовании валидатора, скачивается чек о покупке с серверов эпл и по нему идёт проверка, поэтому там надо ещё учитывать доступность инета, а то всё упадёт если сделать всё прямо как в курсе :wink:


#13

А валидатор когда используется?
Каждый раз при запуске?


#14

Посмотрите курс, а то я его сейчас просто перескажу ))
Когда идёт проверка есть покупка или нет.


#15

Пересмотрела видео, всё равно не поняла. Ну установилось приложение, скачался чек, прошел валидацию, записалось значение тру … и всё. При запуске приложения стоит тру, всё ок … приложение работает … подписка закончилась - а там тру … в итоге получается нужно взять дату, сохранить отдельно и при запуске её проверять получается постоянно …

Я почему-то думала, что всё проще гораздо. Если авто-возобновляемая подписка - то закончился период - приложение просто не запускается и Apple сама просит денег … без всяких этих танцев с бубном блин …

Из курса я так и не поняла, как сделать то, что нужно, но как бы теоретически ты да, можешь сделать покупку, а что дальше с ней делать и как быть - как использоваться, какие варианты - нет информации…

Вот у меня вопрос, если я выложу бесплатное приложение - можно его потом сделать платным? И что если приложение сразу платное, можно ли его потом сделать с непродлеваемой подпиской …

Но с другой стороны … … почему нельзя проверить срок действия прям у эппл … просто приложение само должно знать, действует оно или закончился срок … неужели эппл такого не сделало … с ума сойти …


#16

Мне интереснее всего Non-renewing subscriptions … если исходить их курса, то мы просто скачиваем чек и смотрим на его дату … потом записываем эту дату куда-либо … и при запуске сравниваем каждый раз … и потом функция, если нет даты, либо она меньше текущей … то снимаем шляпу и просим денег … можно так сделать?

А может как-нибудь можно это сделать не скачивая чек? Может где-то есть у эппл информация о последнем чеке … например у меня подписка на 1 месяц … всё … при установке я обращаюсь куда-то?куда? к Эппл … он мне возвращает: последняя транзакция была такого-то числа … в итоге я знаю, что у меня период месяц … значит ничего вообще выдумывать не надо - просто при установке сравниваю дату последней транзакции с текущей … если даты нет, то снимаю шляпу)? есть у яблока какая-то функция которая возвращает дату последней транзакции?


#17

Подписка без автоматического продления = расходуемая покупка … получается можно временную подписку сделать на основании расходуемой покупки … получается …

В чем разница не могу найти информации … какие возможности дает -> Подписка без автоматического продления … что возвращает …


#18

В курсе по-моему довольно понятно расписывали все варианты. Подписка без продления делает это один раз.

Мне кажется, тебе надо просто информацию после валидации чека сохранять и при каждом запуске проверять. Если дата подписки валидна, то просто кнопки покупок блокируешь и предоставляешь доступ. Если дата не валидна, то активизируешь кнопки, а дату затираешь. Но я могу ошибаться. Сам реализовывал обновляемую подписку. И там пляски были с согласованием метаданных. Поэтому помню это как в тумане. :slight_smile:


#19

Вариантов масса: скачивать чек при каждом запуске, раз в день, да как угодно! Там байты данных, переживать за трафик не нужно.
Лучший, по моему мнению, сценарий я вам описал: платный какой-то отдельный функционал. Вот как раз когда к нему обращается юзер, можно скачать чек и проверить есть покупка или нет и по результатам дать доступ или нет.

При чём тут юзердефолтс!!! Это же просто для удобства или если вдруг интренета в данный момент нет, чтобы подряд не делать одну и туже операцию скачивания! Вы как первый раз, а ещё подписку хотите )))

Значит ещё раз посмотреть и повторить. Там есть в StoreManager раширение IAPManager, которое обрабатывает полученный ответ от стора о транзакциях - есть покупка или нет или ошибка. Вот там как раз в функции обработки успешной транзакции идёт проверка по валидатору чека. Вы такую контсрукцию можете запихнуть в любое место.
Например:
При попытке доступа к платному контенту вы пишите что-то типа:

        let receiptValidator = ReceiptValidator() //иницилизация валидатора
        let result = receiptValidator.validateReceipt() //скачивание чека всех покупок
        //обработка результата попытки скачивания
        switch result {
        case let .success(receipt):
            //успешное скачивание - есть покупки. Если у вас в приложении всего одна покупка без подписки (например полная версия), то и дальше вам даже не нужно их фильтровать и смотреть какая конкретно, можно сразу переходить к своей логике обработки результата.
            guard let purchase = (receipt.inAppPurchaseReceipts?.filter({ $0.productIdentifier == IAPProducts.fullVersion.rawValue }).first) else { return } // здесь фильтруется массив всех покупок на нужную вам IAPProducts.fullVersion.rawValue
           //далее идёт сравнение даты истечения подписки с текущей датой
            if purchase.subscriptionExpirationDate?.compare(Date()) == .orderedDescending {
                //... подписка ещё активна
            } else {
                //... подписка истекла
                print("Subscription has ended")
            }
         case let .error(error):
            //ошибка получения чека - нет покупок (или инет)
         }

Всё записано втупую не понимая что к чему, давно с курса Ивана. По-моему куда уж понятнее Иван объясняет я не знаю.

Не поленитесь и пересмотрите ещё сколько надо раз .

всё можно

З.Ы. Если где-то ошибся, то поправят, но вроде всё по курсу Ивана.


#20

Конечно, наверное, можно, но зачем, если есть решение ДВУМЯ СТРОКАМИ???