ITunes кросс-платформенная подписка IAP - как Netflix это делает?
Я создаю службу, которая позволяет пользователям регистрироваться на любом количестве устройств (веб, Android, Roku, iOS, Apple TV), а затем приобретать ежемесячную подписку для просмотра видеоконтента. Подписка обеспечивает доступ ко всему каталогу. У меня есть собственный API управления подписками, который работает на сервере, который я бы хотел использовать в качестве источника правды, чтобы пользователи могли приобрести подписку на своем iPad, войти в приложение на Roku и продолжить просмотр, где они остановились.
В принципе, Netflix.
Вот мои варианты, насколько я могу судить:
-
Автоматическое обновление подписки: это то, что Netflix использует сегодня, но Apple не предоставляет API или любой набор веб-узлов вокруг своей платежной платформы, поэтому я не знаю, как этот вариант может работать. Моя внутренняя служба не имеет понятия, когда Apple автоматически обновляет подписку каждый месяц или если пользователь отменяет свои подписки.
-
Не возобновляемые подписки: пользователи покупают подписку внутри
приложение, хотя IAP. После завершения покупки приложение синхронизирует
подписка на мою внутреннюю систему. Приложение взаимодействует с моим
back-end в любое время, когда требуется проверка прав. Когда пользователи
срок действия подписки истекает, приложение должно представить покупку
рабочий процесс снова.
-
Импорт отчетов iTunes: не будет работать, потому что это не в реальном времени (тянуть, а не нажимать) и ничего мне не говорит об аннулированных подписках. Я могу генерировать отчеты только о новых подписчиках.
-
Проверка чеков и отправка квитанций на мой сервис: не будет работать, потому что это зависит от пользователя, фактически использующего мое приложение. Пользователи могут теоретически подписываться в моем приложении, переключаться на Roku и никогда не открывать его снова.
-
Пропустите IAP в целом и попросите пользователей подписаться через Интернет.
Я что-то упустил? Мне действительно интересно, как Netflix снимает это.
Ответы
Ответ 1
Я знаю, что это устарело, но Apple недавно представила Уведомление об обновлении состояния, которая выполняет то, что OP запросил через webhooks:
- Настройте Apple для отправки уведомлений на указанную конечную точку. (Малый справочник Apple)
- Обращайтесь к объекту JSON, который отправлен через HTTP POST из App Store, и подтвердите получение последней квитанции.
- Обновление/сохранение данных в вашей базе данных.
- Отвечайте с кодом состояния
200
, чтобы сообщить об успешном завершении.
Вы сможете обрабатывать следующие типы уведомлений: INITIAL_BUY
, CANCEL
, RENEWAL
, INTERACTIVE_RENEWAL
, DID_CHANGE_RENEWAL_PREFERENCE
В документации, приведенной в ссылке выше, более подробно описывается реализация и типы.
Ответ 2
Для начальной покупки подписки:
- Пользователь инициирует покупку на iDevice
- Контакты устройства Apple, Apple выдает квитанцию и отправляет ее обратно на устройство
- Устройство отправляет квитанцию на мой сервер
- Сервер подтверждает, что квитанция является законной с помощью API проверки подлинности квитанции Apple
- После подтверждения квитанции сервер сохраняет его в моей БД
- Сервер отвечает на приложение, говоря, что все это хорошо
Чтобы синхронизировать сервер с подпиской iTunes:
- Настройте задание cron для ежедневного получения истекающих квитанций из БД или чего-то типа
- Подтвердите каждую квитанцию с помощью Apple
- Apple ответит обновленной версией квитанции, содержащей подробную информацию о том, была ли отменена/обновлена подписка/etc.
- Сервер заменяет оригинальную квитанцию этой обновленной версией в БД
Теперь, если кто-то войдет в свою учетную запись на Roku или другом устройстве, подписка может быть выполнена, потому что моя БД является источником правды.