Долгое время триал для приложений в App Store был запрещен. Разработчики не могли закрывать весь функционал бесплатных приложений покупками и приходилось искать обходные пути. Но после WWDC 2019 многое изменилось.
В прошлом месяце на фоне множества анонсов с WWDC вы, возможно, упустили небольшое изменение, которое Apple внесла в свои правила публикации приложений (пункт 3.1.1):
Приложения без подписки могут предлагать ограниченный бесплатный пробный период, прежде чем предоставлять опцию полной разблокировки, настроив нерасходуемую встроенную покупку Уровня 0, которую следует назвать: «ХХ-дневная пробная версия». До внедрения такой пробной версии ваше приложение должно четко определить продолжительность, содержимое или услуги, которые больше не будут доступны после окончания пробной версии, и любые последующие расходы, которые пользователь должен будет заплатить за полную функциональность. Узнайте больше об управлении доступом к контенту и продолжительностью пробного периода, используя Receipts и Device Check.
Учитывая, что iOS-разработчики просили такую модель работы с пробной версией (trialware) с тех пор, как App Store дебютировал десять лет назад, я нашел это дополнение очень интригующим, но не совсем ясно прописанным.
Во-первых, гайдлайны все еще говорят (в разделе 2.2):
.. Триальные версии вашего приложения в App Store не допускаются — используйте вместо этого TestFlight.
Так что это значит, разрешены триальные приложения или нет?
На самом деле, Apple уже молчаливо смирилась с пробными версиями, при условии, что после окончания пробного периода приложения оставляют в использовании некоторые минимальные функции (в некоторых приложениях Omni Group используется эта модель).
Является ли это новое руководство лишь формализацией этой молчаливой политики, или оно действительно разрешает триальные приложения, которые закрывают весь функционал после окончания пробного периода?
Насколько мне известно, ни один разработчик еще не тестировал эту возможность, и я подумал, что было бы интересно заняться ею.
Tempi
Мы попробовали несколько различных моделей оплаты с нашим приложением Tempi, которое помогает музыкантам с их ритмом. Сначала это был freemium со встроенными в приложении покупками, затем использовали предварительную оплату. С точки зрения дохода обе эти стратегии работали примерно одинаково, но я всегда думал, что классическая модель пробного ПО будет более подходящей.
Честно говоря, я был уверен, что Apple откажется от триального приложения в котором дается “все или ничего”, поэтому я не хотел тратить много времени на разработку, однако на важный вопрос в реализации нужно было ответить — как можно хранить данные о том, когда триал для приложений начался? Здесь есть несколько вариантов, каждый из которых имеет свои плюсы и минусы.
Встроенная покупка Tier 0 + DeviceCheck
В руководстве Apple прямо советует нам использовать IAP «Уровня 0» (т.е. бесплатную), которую мы требуем от пользователя «купить», чтобы начать пробный период. Они также вызывают DeviceCheck, новый для iOS 11 API, который хранит только 2 бита информации. Предположительно мы могли бы использовать один из этих битов для хранения информации о том, разблокировано приложение или нет при его установке.
Мне не нравится этот подход. Во-первых, я думаю, что нажатие кнопки «Купить» для продукта IAP стоимостью 0,00 долл. США может ввести в заблуждение значительный процент пользователей. А что, если вы хотите сбросить пробную версию для всех пользователей, которые уже превысили пробный период, скажем, потому что вы добавили некоторые важные новые функции? Для этого вам нужно будет создать совершенно новую встроенную покупку. Наконец, DeviceCheck доступен только в iOS 11 и требует от вас использования JSON Web Tokens в сочетании с REST API, что требует множества новых программных инфраструктур, которые вам необходимо задействовать, если у вас их еще нет.
UserDefaults
Это немного наивно, но вы можете просто сохранить дату запуска пробной версии в UserDefaults. Это банально, но вы сможете в любой момент перезапустить процесс. Очевидным недостатком является то, что любой пользователь может перезапустить пробный период, просто удалив и переустановив приложение.
Keychain
Это малоизвестный факт, но когда приложение хранит информацию в Keychain пользователя, то эта информация сохраняется даже при переустановках приложения. Кроме того, по умолчанию эти элементы хранятся таким образом, что они не синхронизируются с Mac, что делает практически невозможным для пользователя удалить их и обойти пробный период. Очевидно, что этим механизмом нельзя злоупотреблять, но я думаю, что это идеальное решение для хранения даты начала триального периода. Если мы хотим сбросить пробный период, то мы можем либо удалить существующий элемент, либо выбрать новое имя элемента.
Внедрение
Учитывая простую стратегию использования, все остальное было легко осуществить. Я создал новый IAP «Разблокировать пробную версию», сохранил дату начала пробной версии в связке ключей и использовал стандартную проверку квитанции о покупке для проверки. Как я уже сказал, я не хотел тратить много времени на новый пользовательский интерфейс для этого изменения, поэтому я просто добавил пару «неприятных предупреждений»:
Я настроил их так, что они появляются не чаще одного раза в день, и пользователи, которые ранее покупали что-либо в приложении, автоматически разблокируются.
Прохождение проверки в App Store
Чтобы достоверно ответить на вопрос о том, разрешает ли Apple сейчас использовать триал для приложений класса «все или ничего», я хотел объяснить эти изменения и рецензенту в App Store. С этой целью я написал это прямо в заметках для ревьювера:
Мы переходим к модели «пробной версии». У пользователя есть 14 дней, чтобы оценить приложение. После этого их попросят совершить встроенную покупку, чтобы продолжить использовать приложение.
Удивительно, но примерно через день приложение было одобрено! Вот это да!
Теперь это официальным? Возможно, нет. Может быть, мне повезло с этим рецензентом, и другой отказал приложению. Возможно, Фил Шиллер прочитает эту статью (Привет, Фил!) и удалит приложение. Я хотел бы услышать от разработчиков об их опыте работы с пробной версией, поэтому не стесняйтесь, напишите мне в Twitter или присоединяйтесь к комментариям ниже. (Позже мне пришлось исправить небольшую ошибку, так что снова я прошел через процесс проверки, и приложение было снова одобрено, так что это многообещающе!)
Триал для приложений: подводя итоги
- Apple теперь явно разрешает пробные приложения типа «все или ничего».
- Вам не нужно использовать бесплатную встроенную покупку и DeviceCheck, чтобы это работало
Следует отметить, что очевидное применение таких триальных программ не обязательно является идеальным. Как пишет Даниэль Джалкут, есть в этой модели и много минусов. Для меня главным из них является то, что пробные приложения кажутся пользователям «бесплатными». Несомненно, некоторые будут раздражены, когда узнают, что в какой-то момент им действительно нужно будет заплатить. Я осторожно выделил этот факт в верхней части описания и изменил примечания, но я не удивлюсь, если наш рейтинг понизится.