Работа с подписками

Приложения, использующие подписки, имеют некоторые дополнительные способы поведения и соображения. Поскольку подписки включают элемент времени, Ваше приложение должно иметь надлежащую логику, чтобы определить, в настоящее время активна ли подписка и во сколько периоды подписка были активны в прошлом. Ваше приложение также должно реагировать на новые и возобновленные подписки, и должным образом обработать истекшие подписки. Рисунок 5-1 показывает временную шкалу подписки в качестве примера, включая некоторые сложности, которые должно обработать Ваше приложение.

  Временная шкала подписки рисунка 5-1 В качестве примера

Вычисление активного периода подписки

Ваше приложение должно определить, к какому содержанию у пользователя есть доступ на основе промежутка времени, подписка была активна. Рассмотрите, например, пользователя с подпиской к журналу, публикующему новую проблему в первый день каждого месяца, после временной шкалы, показанной в Таблице 5-1.

Табличная 5-1  Временная шкала демонстрационной подписки

Дата

Событие

1 февраля

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

20 февраля

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

1 марта

Проблема в марте публикуется. Это сделано доступным сразу, потому что у пользователя есть активная подписка.

20 марта

Подписка пользователя автоматически возобновляет в течение другого месяца.

1 апреля

Проблема в апреле публикуется. Это сделано доступным сразу, потому что у пользователя есть активная подписка.

20 апреля

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

1 мая

Может выйти публикуется. Это не сделано доступным, потому что истекла подписка пользователя.

1 июня

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

17 июня

Пользователь повторно подписывается. Проблема в июне сделана доступной сразу.

1 июля

Проблема в июле публикуется. Это сделано доступным сразу, потому что у пользователя есть активная подписка.

Для реализации этой логики в приложении ведите учет даты, что публикуется каждая часть содержания. Считайте поле Original Purchase Date и Subscription Expiration Date из каждой записи получения для определения запуска и даты окончания подписки. (Для получения информации о получении см. Руководство по программированию Проверки Получения.) У пользователя есть доступ ко всему содержанию, опубликованному между каждым, запускаются и дата окончания, а также содержание, первоначально разблокированное, когда была куплена подписка. Если подписка истекла, будут многократные промежутки времени, в течение которых подписка была активна, и будут части содержания, разблокированного в начале периода подписки.

Продолжая пример от Таблицы 5-1, получение показало бы, что следующее запускается и даты окончания:

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

У пользователя есть доступ до марта, апреля, июня и проблем в июле, потому что подписка активна в те времена.

Истечение срока и возобновление

Процесс возобновления начинается с проверки «перед рейсом», запускаясь за десять дней до даты истечения срока. В течение тех десяти дней, проверок App Store на любые проблемы, которые могли бы задержать или препятствовать тому, чтобы подписка была автоматически возобновлена — например, если у клиента больше нет активного способа оплаты, если цена продукта увеличилась, так как пользователь купил подписку, или если продукт больше не доступен. App Store уведомляет пользователей любой проблемы так, чтобы они могли разрешить его, прежде чем подписка должна будет возобновить, гарантируя, что не прервана их подписка.

В течение 24-часового периода, прежде чем истекает подписка, App Store начинает пытаться автоматически возобновить его. Если существует слишком много неудачных попыток, App Store предпринимает несколько попыток автоматически возобновить подписку в течение времени, но в конечном счете останавливается.

App Store возобновляет подписку немного, прежде чем это истечет, для предотвращения любой ошибки в подписке. Однако ошибки все еще возможны. Например, если бы информация о платеже пользователя больше не действительна, первая попытка возобновления перестала бы работать. Если бы пользователь не обновляет эту информацию, пока подписка не истекает, была бы короткая ошибка в подписке между датой истечения срока и датой, за которой следует последующее автоматическое возобновление. Пользователь может также отключить автоматическое возобновление и преднамеренно позволить подписке истечь, затем возобновить его позднее, создав более длинную ошибку в подписке. Удостоверьтесь, что логика подписки Вашего приложения может обработать ошибки различных продолжительностей правильно.

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

Отмена

За подписку платят полностью, когда она куплена и может быть возмещена только путем обращения в службу поддержки клиентов Apple. Например, если пользователь случайно покупает неправильный продукт, поддержка клиентов может аннулировать подписку и выпустить возмещение. Для клиентов не возможно передумать в середине периода подписки и решить, что они не хотят платить за остальную часть подписки.

Чтобы проверить, была ли закупка отменена, ищите Поле даты Отмены в получении. Если поле имеет дату в нем, независимо от даты истечения срока подписки, закупка была отменена — обрабатывают отмененное получение то же, как будто никогда не совершалась никакая покупка.

В зависимости от типа продукта можно быть в состоянии проверить только в настоящее время активную подписку, или Вы, возможно, должны проверить все прошлые подписки. Например, приложение журнала должно было бы проверить все прошлые подписки для определения, к каким проблемам у пользователя был доступ.

Межплатформенные соображения

Идентификаторы продукта связаны с отдельным приложением. Приложения, имеющие и iOS и версию OS X, имеют отдельные продукты с идентификаторами отдельного продукта на каждой платформе. Вы могли позволить пользователям, у которых есть подписка в доступе приложения для iOS содержание из приложения OS X (или наоборот), но реализация, что функциональность является Вашей ответственностью. Вам была бы нужна некоторая система для идентификации пользователей и отслеживания того, какое содержание они подписали на, подобный тому, что Вы реализовали бы для приложения, использующего невозобновляемые подписки.

Позволяющие пользователи управляют подписками

Вместо того, чтобы должным быть кодировать Ваше собственное управление подпиской UI, Ваше приложение может открыть следующий URL:

https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions

Открытие этого URL запускает iTunes или iTunes Store, и затем выводит на экран страницу Manage Subscription.

Тестовая среда

Ради тестирования существуют некоторые различия в поведении между автовозобновляемыми подписками в продуктивной среде и в тестовой среде.

Возобновление происходит на ускоренном темпе, и автовозобновляемые подписки возобновляют максимум шести раз в день. Это позволяет Вам протестировать, как Ваше приложение обрабатывает возобновление подписки, ошибку подписки и историю подписки, включающую разрывы.

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