Кроссплатформенные подписки IAP в iTunes — как это делает Netflix?

Я создаю сервис, который позволяет пользователям регистрироваться на любом количестве устройств (веб, Android, Roku, iOS, Apple TV), а затем приобретать ежемесячную подписку для просмотра видеоконтента. Подписка предоставляет доступ ко всему каталогу. У меня есть собственный API управления подпиской, работающий на сервере, который я хотел бы использовать в качестве источника правды, чтобы пользователи могли приобрести подписку на своем iPad, войти в приложение на Roku и продолжить просмотр с того места, где они остановились.

В общем, Нетфликс.

Вот мои варианты, насколько я могу судить:

  1. Автоматическое продление подписки: это то, что сегодня использует Netflix, но Apple не предоставляет API или какой-либо набор веб-перехватчиков для своей платежной платформы, поэтому я не знаю, как этот вариант может работать. Моя внутренняя служба не будет знать, когда Apple будет автоматически продлевать подписку каждый месяц или когда пользователь отменит свою подписку.

  2. Подписки без продления: пользователи приобретают подписку внутри приложения через IAP. После завершения покупки приложение синхронизирует подписку с моей серверной системой. Приложение взаимодействует с моей серверной частью в любое время, когда требуется проверка прав. Когда срок действия подписки пользователя подходит к концу, приложение должно снова представить рабочий процесс покупки.

  3. Импорт отчетов iTunes: не будет работать, потому что это не в режиме реального времени (вытягивание, а не проталкивание) и ничего не говорит мне об отмененных подписках. Я могу только генерировать отчеты о новых подписчиках.

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

  5. Полностью отказаться от IAP и требовать от пользователей подписки через Интернет.

Я что-то упускаю? Мне действительно любопытно, как Netflix справляется с этим.


person ehynds    schedule 06.10.2015    source источник
comment
Если я ничего не забыл, я не думаю, что Netflix вообще использует систему подписки Apple In-App Purchase. Я думаю, что вы просто покупаете подписку напрямую через Netflix, а они отслеживают состояние вашей учетной записи и т. д. Их приложение просто проверяет сервер и собственное внутреннее отслеживание, чтобы убедиться, что ваша учетная запись все еще активна. Если бы я пытался сделать это, я бы просто использовал подписку PayPal или что-то подобное и полностью обошел API-интерфейсы для конкретной платформы. Кроме того, вам не придется отдавать Apple (или Google и т. д.) долю от каждой подписки.   -  person Nerrolken    schedule 06.10.2015
comment
По состоянию на прошлый месяц Netflix позволяет пользователям подписываться через свои iDevices, и они используют IAP (в соответствии с рекомендациями Apple; они не разрешают платежи в приложении через любую другую систему).   -  person ehynds    schedule 06.10.2015


Ответы (2)


Я знаю, что это устарело, но Apple недавно представила Уведомления об обновлении статуса, которые выполняют то, что запросил OP через веб-перехватчики:

  1. Настройте Apple для отправки уведомлений на указанную вами конечную точку. (небольшое руководство Apple)
  2. Обработайте объект JSON, отправленный через HTTP POST из App Store, и подтвердите последнее получение.
  3. Обновление/сохранение данных в вашей базе данных.
  4. Ответьте с кодом состояния 200, чтобы сообщить об успехе.

Вы сможете обрабатывать следующие типы уведомлений: INITIAL_BUY, CANCEL, RENEWAL, INTERACTIVE_RENEWAL, DID_CHANGE_RENEWAL_PREFERENCE

Документация по ссылке выше более подробно объясняет реализацию и типы.

person John Donner    schedule 28.11.2017
comment
Я хотел бы отметить, что были отмечены проблемы (проверьте этот SO answer и этот форум разработчиков Apple) с полной реализацией этих уведомлений. - person John Donner; 13.03.2018

Для первоначальной покупки подписки:

  1. Пользователь инициирует покупку на iDevice
  2. Устройство связывается с Apple, Apple выдает квитанцию ​​и отправляет ее обратно на устройство.
  3. Устройство отправляет квитанцию ​​​​на мой сервер
  4. Сервер проверяет подлинность квитанции с помощью API проверки квитанций Apple.
  5. Как только квитанция проверена, сервер сохраняет ее в моей БД.
  6. Сервер отвечает приложению, говоря, что все хорошо

Чтобы синхронизировать сервер с подпиской iTunes:

  1. Настройте задание cron для ежедневного получения истекающих квитанций из БД или что-то в этом роде.
  2. Проверяйте каждую квитанцию ​​в Apple
  3. Apple ответит обновленной версией квитанции, которая содержит сведения о том, была ли подписка отменена/продлена и т. д.
  4. Сервер заменяет исходный чек этой обновленной версией в БД.

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

person ehynds    schedule 07.10.2015
comment
вы не сохраняете исходную квитанцию ​​binary64, которую вы проверяете, которая остается неизменной и может быть повторно использована позже в вашем ответе, вы говорите о сохранении того, что мы традиционно рассматриваем как квитанцию, и использовании этого для обновления соответствующих точек данных вокруг подписки и т. д. Ответ делает вид, что это одно и то же. - person myusuf3; 30.05.2016
comment
4.Сервер заменяет исходную квитанцию ​​этой обновленной версией в базе данных. На самом деле это не требуется, исходная квитанция всегда дает вам самую свежую информацию. Нет необходимости заменять его какими-либо другими будущими квитанциями. - person Nagendra Rao; 18.01.2017
comment
И как вы справляетесь, если другой пользователь входит в систему на этом устройстве с новой учетной записью? Вы бы зарегистрировали, что у этого нового пользователя есть действующая квитанция и подписка, хотя он ничего не платил. Теперь они войдут в систему на своем устройстве, и ваша БД разрешит подписку. - person Matteo Gobbi; 30.04.2021