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


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

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

Когда оплата подписки утверждена, Google Play предоставляет маркер покупки обратно в приложение покупки через API биллинга в приложении. Ваши приложения могут хранить маркер локально или передавать его на серверные серверы, которые затем могут использовать его для проверки или отмены подписки удаленно с помощью разработчика Google Play ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.

Итак, есть ли какой-либо метод на моем сервере, знающий, когда подписка пользователя была продлена? Вместо Google играть отправить новую подписку законопроект в приложения андроид после этого приложение для Android отправить эту новый законопроект на моем сервере, просто для проверки.

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

Мой рабочий результат

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

Возможно ли это?

[Update] Recommend from goolge play api doc

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

Как реализовать recommend from google api, любой документ или учебники ?

1 6

1 ответ:

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

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

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

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

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

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