КАК отслеживать автоматически продлеваемые подписки в iOS In-App Purchases?

Мы создаем платформу видео по запросу на основе подписки, которая позволяет нашим подписанным пользователям получать доступ к фильмам с различных устройств, включая iOS, Интернет и т. д.

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

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

Я прочитал несколько документов по теме «Покупки в приложениях iOS» и пришел к выводу, что мы подходим для категории автоматически продлеваемой подписки.

Я уже интегрировал подписки через Roku и использую это как образец. Для пользователей, оформляющих подписку через Интернет, я также интегрировал платежные системы, такие как Amazon Payments, Stripe и PayPal, транзакции для которых инициируются уже созданной мной платформой выставления счетов за подписки.

Мой сервер (или, по сути, конечная точка) должен иметь возможность получать следующие биты информации, предпочтительно напрямую из iTunes, а не из моего приложения.

  • Уведомление об успешной подписке пользователя на один из моих продуктов
  • Уведомление, когда iTunes успешно продлевает подписку, т. е. если пользователь подписан на ежемесячный продукт, то в начале следующего месяца мне нужно получить уведомление от iTunes о том, что с пользователя была успешно списана плата за предстоящий месяц.
  • Уведомление, когда iTunes успешно возвращает деньги пользователю по какой-либо причине
  • Уведомление, когда пользователь отменяет подписку непосредственно из iTunes (не из приложения). Я знаю, что в этом случае это будет означать, что он останавливает автоматическое обновление, но мне все равно нужно знать, что это произошло.
  • Уведомление, когда пользователь отменяет автоматическое продление.

Поддерживает ли iTunes какое-либо из этих действий через Webhook, Push или IPN (мгновенные уведомления о платежах) и т. д.? Я не сталкивался с этим, если это так.

Я знаю, что есть что-то, называемое Проверка квитанций, но это кажется мне не очень хорошим решением, так как мне нужно как можно скорее узнать из iTunes, что один из вышеперечисленных потоков произошел.

Каковы обходные пути для получения этой информации, если таковые имеются? Я боюсь, что получение этой информации из моего приложения не является ни своевременным, ни гарантированным.


person Chantz    schedule 15.05.2015    source источник
comment
Эй, Чанц, ты смог создать такую ​​систему, которая проверяла бы отмененные подписки? Я сталкиваюсь с подобными проблемами и ищу решение.   -  person Andrey    schedule 03.02.2017
comment
@ Андрей, да, поэтому IIRC затем запускал задание каждые несколько часов, чтобы выяснить, активна ли конкретная подписка. У меня нет кода или каких-либо документов для подтверждения, так как я покинул эту компанию некоторое время назад.   -  person Chantz    schedule 04.02.2017
comment
Это круто, в любом случае спасибо, я чувствую, что я на правильном пути.   -  person Andrey    schedule 04.02.2017


Ответы (1)


Если вы ожидаете прямую подачу из iTunes, вам необходимо пересмотреть свои требования. Экосистема покупок в приложении просто так не работает. У вас может быть возможность написать собственную систему обработки подписки (требуется внешний платежный процессор), но одобрение Apple будет зависеть от точного характера вашего контента. Судя по вашему описанию, у вас есть взаимоисключающие требования.

Если непреложным требованием является использование iTunes, вам необходимо подтвердить квитанции и отправить эти результаты на ваш сервер.

person Brad Brighton    schedule 15.05.2015
comment
Просто уточнил свой вопрос. Платежные процессоры, которые я интегрировал, предназначены исключительно для тех случаев, когда пользователи подписываются через Интернет. Для пользователей, оформляющих подписку через устройства iOS, мы предоставим только iTunes IAP и ничего больше. - person Chantz; 15.05.2015
comment
В порядке. Я бы сказал, что ваше беспокойство по поводу получения обновлений через приложение может иметь смысл (хотя, если контент подключен к сети, ваши шансы не получить обновления кажутся небольшими). Вам по-прежнему придется проверять и пересылать через приложение или выполнять проверку получения на сервере, но в любом случае инициирование действия, зависящего от iTunes, будет на уровне устройства. - person Brad Brighton; 15.05.2015
comment
Меня беспокоило использование приложения: что, если пользователь сначала удалит приложение, а затем отменит подписку через itunes? Они по-прежнему смогут просматривать платный контент в Интернете, поскольку наблюдатель транзакции отсутствовал, когда iTunes отправил ему уведомление об отмене. - person Chantz; 15.05.2015
comment
Я согласен, это было бы серьезной проблемой, хотя я думаю, что реальное воздействие вполне управляемо. С подписками iTunes, даже если пользователь не продлевает подписку, она по-прежнему действительна до конца срока (то есть без возврата средств). Вы получите дату истечения срока действия, когда транзакция пройдет изначально, и вы можете использовать ее для правильного прекращения доступа к серверу, когда это время придет. Возможно, вы рассматриваете возможность нарушения условий подписки Apple и хотите немедленно прекратить подписку, но я не рекомендую этого делать. Держу пари, если это обнаружится, это станет основанием для отклонения приложения. - person Brad Brighton; 15.05.2015
comment
re: немедленное прекращение = Согласен. Мы сами позволяем подпискам заканчиваться после отмены, так что это не проблема. Я предполагаю, что нам придется создать некоторые процессы, чтобы время от времени проверять квитанцию ​​​​и смотреть, отменена ли она уже. - person Chantz; 15.05.2015
comment
Я предполагаю, что нам придется создать некоторые процессы, чтобы время от времени проверять квитанцию ​​​​и смотреть, отменена ли она уже. В любом случае вам понадобится по существу тот же процесс, чтобы узнать, когда новый срок действия находится в режиме автоматического обновления, поскольку для этого есть случаи сбоя, отличные от активного завершения (в первую очередь истечение срока действия CC). Звучит как тривиальное дополнение к существующим требованиям. - person Brad Brighton; 15.05.2015