Как реализовать автоматическое продление подписки в приложении биллинг google play

Я исследую метод для реализации автоматического продления подписки в биллинге приложений с google play. Я читал https://developer.android.com/google/play/billing/billing_subscriptions.html и смотрите

выставление счетов продолжается бесконечно с интервалом и ценой, указанными для подписки. При каждом продлении подписки Google Play автоматически заряжает учетную запись пользователя, а затем уведомляет пользователя о расходах по электронной почте. Для ежемесячного и ежегодного подписки, циклы выставления счетов всегда будут соответствовать циклам подписки на основе даты покупки. (Сезонная подписка взимается ежегодно, в первый день сезона.)

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

Итак, есть ли какой-либо метод на моем сервере знать, когда была продлена подписка пользователя? Вместо google play отправить новый счет подписки на android app после этого android app отправить этот новый счет на мой сервер только для проверки.

может ли google play отправить уведомление на мой сервер при возобновлении подписки пользователя, например, уведомить Пользователя по электронной почте ? Я хочу, чтобы google play отправил мне уведомление о том, что подписка пользователя была автоматически обновлена, чтобы мой бэкэнд обновление истекает срок их подписки в app increase. Не нужно android-приложение должно проверять счет каждый раз, когда пользователь открывает магазин, чтобы проверить новый счет от Goole play charge automation или нет. Реализуют ли это?

мой workfollow

  1. Google взимает новую подписку на цикл и уведомляет мой сервер { тело, такое как bundId, bill, product_id или имя пакета подписки, дата истечения срока действия...), также отправлено письмо пользователю об их автоматизации подписки обновленный.
  2. мой сервер определить изменение подписки пользователя и проверить в покупке приложения с помощью Google play api и изменить срок действия подписки пакета в приложении, если проверка действительна.
  3. магазин новейший счет в моей БД

Это возможно?

[обновление] рекомендовать от goolge play api doc

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

Как реализовать рекомендации из Google api, любого документа или учебников ?

1 ответов


У меня сейчас точно такая же проблема. Концепция Google не очень хорошо продумана. Существует возможность уведомлять ваш сервер о финансовых транзакциях (см. здесь), но я бы не рекомендовал этого. Вы полагаетесь на свои бизнес-транзакции на множество сервисов Google и на время работы вашего сервера. Если что-то пойдет не так или вниз или что-то, вы не будете проинформированы, и ваша бэкэнд бизнес-логика больше не работает.

эта рекомендация В Google вы упомянули также хреново. Что произойдет, если есть авто-renawal (который доставляет новый purchaseToken в ваше приложение), и пользователь никогда не открывает ваше приложение. Тогда новые данные подписки никогда не будут переданы на ваш сервер. И если вы никогда не получали новый токен, как вы можете проверить, является ли пользователь все еще подписчиком, так как этот ограниченный API разработчика Google Play глупо нуждается в purchaseToken в качестве параметра (см. здесь), который вы никогда не получите, пока пользователь не откроет app по крайней мере один раз после автоматического продления (чтобы отправить его на свой сервер).

Я думаю о реализации этого таким образом:
1.) Я постоянно проверяю записи о покупке по cron job. Запись покупки-это запись базы данных, которая содержит все данные из начальной подписки (orderId, purchaseToken и т. д., Все, что необходимо для процесс проверки безопасности на сервере). Каждая запись покупки подключается к учетной записи пользователя (некоторому идентификатору пользователя) в моем бэкэнде система. Пока autoRenewing атрибут purchaseRecord не является ложным, подписка действительна. Даже если expiryTimeMillis превышен, этот пользователь все еще может иметь действительную подписку, из-за случая использования я описал выше: подписка будет автоматически продлеваться Google, но пользователь никогда не открывает приложение, поэтому токен передачи не отправляется на ваш сервер, и вы все еще не информированы об обновлении подписки.

2.) Если использование отменяет его подписку в любое время, когда autoRenewing будет ложным в любое время. Это означает, что подписка действительно закончится на expiryTimeMillis.

3.) Когда пользователь откроет ваше приложение и перенесет новый purchaseToken на ваш сервер, вы получите новую запись о покупке, которая снова будет подключена к учетной записи Пользователя с его идентификатором пользователя. Пользователь, вероятно, будет иметь 2 записи покупки сейчас. Старый и новый. Если да, то вы могли бы удалите старый, и тот же процесс повторится с новой записью покупки на шаге 1.

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