Как определить, отменяет ли пользователь подписку на Google Play?

О создании продукта подписки в нашем приложении для Android, но немного неясно, как лучше всего узнать об аннулированных подписках. Единственный способ, которым мы планируем разрешить пользователю отменить, - это перейти в Google Play Store и явно отменить, но в этом случае наш бэкэнд не будет уведомлен.

В API API разработчика Google Play явно указано, что вы не должны запрашивать API для статуса всех подписчиков, так как мы должны знать, какие пользователи отменили подписку?

Любая помощь очень ценится!

Ответ 1

Похоже, теперь можно получать уведомления на стороне сервера об изменениях подписки (продление, аннулирование...):

API фактурирования In-app предоставляет уведомления о push-сервере, которые дают разработчикам возможность отслеживать изменения состояния для подписчиков, управляемых Play.

См. эту страницу для более подробной информации: https://developer.android.com/google/play/billing/billing_subscriptions.html#realtime-notifications

Ответ 2

Согласно документации по подписке In-App нет механизма обнаружения, когда пользователь отменяет подписку. Потому что он не отменяется немедленно. Вместо этого он ждет окончания цикла для истечения срока подписки.

Выдержка из документа (источник)

Когда пользователь отменяет подписку, Google Play не предлагает возврат за текущий платежный цикл. Вместо этого он позволяет пользователю имеют доступ к отмененной подписке до конца текущего биллинговый цикл, после чего он прекращает подписку. Для Например, если пользователь покупает ежемесячную подписку и отменяет ее в 15-й день цикла Google Play рассмотрит подписку действителен до конца 30-го дня (или другого дня, в зависимости от месяц)

Приложение не получит никакого уведомления, когда пользователь отменяет подписку.

Поведение подписки - всякий раз, когда вы запрашиваете инвентарь в приложении, SKU будет возвращен, если подписка действительна. Когда срок действия подписки истекает, SKU не будет возвращен при запросе инвентаря.

В соответствии с документацией в этой ссылке

Вполне нормально запускать пакетный запрос, когда подписка приближается к концу

Выдержка из документа (источник):

Запрос на статус подписки только по истечении срока действия - как только ваш сервер получил дату истечения срока действия подписных токенов, она должна не запрашивать серверы Google Play для статуса подписки еще раз пока подписка не будет достигнута или не истечет. Как правило, ваши серверы каждый день запускают пакетный запрос, чтобы проверить статус истечения срока действия подписки, а затем обновить базу данных

Следующий сервер api позволяет запросить статус подписки:

https://developers.google.com/android-publisher/api-ref/purchases/subscriptions#resource-representations

Переменные autoRenewing и cancelReason сообщают вам, была ли отменена подписка.

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

Подробные сведения об аннулировании подписки можно найти на этой ссылке.

Примечание:
В документации указано, что вы должны продолжать предоставлять контент, если у пользователя есть действительная подписка. Если вы планируете запретить доступ к контенту, если кто-то отменил подписку, будет действовать против политики Google

Выдержка из документа (источник)

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