WedX - журнал о программировании и компьютерных науках

iOS Webhook / Уведомление о регулярном платеже для автоматически возобновляемых подписок

Есть ли уведомление, которое iOS отправляет для автоматически возобновляемых подписок, когда регулярный платеж обрабатывается и подписка продлевается? Это то, как следует интерпретировать веб-перехватчик RENEWAL?

ios
21.01.2018

  • См. мой ответ в этом вопросе: возобновляемая подписка"> stackoverflow.com/questions/50947948/ 30.01.2019

Ответы:


1

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

RENEWAL фактически отправляется, когда «происходит сбой в обслуживании и восстановление с помощью продукта Apple для повторной попытки выставления счетов».

Это реальный ответ, и его НИГДЕ нет в документации Apple. Я надеюсь, что это поможет другим людям.

04.02.2018
  • Спасибо за Ваш ответ. Apple что-нибудь говорила об INTERACTIVE_RENEWAL? Согласно документации, оно должно быть отправлено для автоматического продления подписки, но я предполагаю из вашего ответа, что это событие не отправляется автоматически, и вместо этого нам нужно опросить. 17.11.2018
  • Отличная статья, в которой шаг за шагом обсуждается, как обрабатывать подписки с автоматическим продлением в iOS: medium.com/@AlexFaunt/ 10.09.2019

  • 2

    Вот что говорится в документации:

    Уведомления об обновлении статуса

    StatusUpdateNotification — это межсерверная служба уведомлений для автоматически возобновляемых подписок. В уведомлении указывается состояние подписки на момент отправки уведомления.

    Чтобы получать актуальную информацию по мере обработки событий, ваше приложение должно подтвердить последнее получение в App Store. Рекомендуется использовать службу уведомления об обновлении статуса вместе с проверкой квитанции, чтобы проверить текущий статус подписки пользователя и предоставить ему услугу. Информацию о проверке получения см. в Руководстве по программированию проверки получения.

    Чтобы получать уведомления об обновлении статуса, настройте URL-адрес статуса подписки для своего приложения в iTunes Connect. App Store будет доставлять объекты JSON через HTTP POST на ваш сервер для ключевых событий подписки, перечисленных в таблице 6-3. Ваш сервер отвечает за анализ, интерпретацию и реагирование на все сообщения statusUpdateNotification.

    Затем он продолжается ниже, перечисляя условия для уведомления:

    • INITIAL_BUY Первоначальная покупка подписки. Сохраните last_receipt на своем сервере в качестве токена, чтобы в любое время проверить статус подписки пользователя, проверив его в App Store.

    • ОТМЕНА Подписка была отменена службой поддержки Apple. Проверьте дату отмены, чтобы узнать дату и время отмены подписки.

    • ПРОДЛЕНИЕ Автоматическое продление подписки с истекшим сроком действия прошло успешно. Проверьте дату истечения срока действия подписки, чтобы определить дату и время следующего продления.
    • INTERACTIVE_RENEWAL Клиент продлил подписку в интерактивном режиме после истечения срока ее действия либо с помощью интерфейса вашего приложения, либо в App Store в настройках учетной записи. Услуга становится доступной немедленно.
    • DID_CHANGE_RENEWAL_PREFERENCE Клиент изменил план, который вступит в силу при следующем продлении подписки. Текущий активный план не затрагивается.

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

    Однако он не отправляется на iOS, а только на сервер. Вам необходимо зарегистрировать URL-адрес в Apple, по которому они затем будут размещать эти уведомления. Затем ваш сервер и экземпляр приложения iOS должны взаимодействовать через ваш веб-API, чтобы приложение уведомлялось.

    21.01.2018
  • Спасибо за ответ. У меня настроена среда iOS Sandbox, и я регистрирую различные уведомления, которые Apple отправляет для различных покупок пробной подписки, которые я совершаю. Однако мне не ясно, действительно ли RENEWAL отправляется для регулярных платежей, потому что поведение в Sandbox не соответствует этому. 22.01.2018
  • При использовании тестовой учетной записи sanbox событие INITIAL_BUY никогда не приходит. 28.02.2019

  • 3

    Да, согласно документации, RENEWAL отправляется после автоматического продления подписки с истекшим сроком действия (обратите внимание, что это отличается от INTERACTIVE_RENEWAL тем, что RENEWAL запускается автоматически по истечении срока действия автоматического продления подписки, а не действия пользователя).

    Однако среда Sandbox немного отличается (см. «Среда тестирования» в документация):

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

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

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

    Таким образом, для каждого productId, который у вас есть, он будет автоматически обновляться до шести раз в день в песочнице. После этого вы перестанете получать уведомления RENEWAL от Apple.

    23.01.2018

    4

    Вы можете использовать следующие шаги для настройки уведомлений между серверами:

    • Войдите в App Store Connect и выберите свое приложение.
    • Перейдите в раздел «Информация о приложении».
    • Вставьте URL-адрес API в поле URL-адрес для уведомлений сервера App Store.
    • Нажмите Сохранить в верхней части страницы.

    введите здесь описание изображения

    21.01.2021
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]