Реклама
Перетяжка // Коробка 3.0

Google Play задерживал уведомления о покупках на два и четыре часа

Официальный инцидент Play Billing длился с 08:54 до 11:43 UTC 1 сентября, но задержки, по отчёту разработчика, продолжались и после.

Обложка: Google Play задерживал уведомления о покупках на два и четыре часа

Разработчик под ником Park112 2 сентября опубликовал в сообществе Google Play разбор задержек Real-time Developer Notifications (RTDN), уведомлений, которыми Play сообщает серверу приложения о покупках и подписках. В двух случаях поле eventTimeMillis появилось через 3 часа 55 минут и 2 часа 11 минут после того, как пользователь заплатил. Сам платёж при этом проходил штатно, а Developer API позже подтверждал покупку.

Для приложения с серверной выдачей контента это означает, что пользователь заплатил и несколько часов не получает подписку или покупку. Google зафиксировала инцидент Play Billing 1 сентября с 08:54 до 11:43 UTC и объявила о решении в 13:59 UTC, но по данным отчёта задержки продолжались и после закрытия инцидента. Официального комментария Google к отчёту на момент публикации нет.

Ключевые выводы
  • Две задержанные транзакции: от покупки до RTDN 3 ч 55 мин 40 с и 2 ч 11 мин 55 с; доставка уже созданного события на сервер заняла 0,6 и 1,4 с.
  • Девять нормальных транзакций того же периода: 0,086–0,148 с до eventTimeMillis, доставка 0,3–2,3 с.
  • Pub/Sub со стороны разработчика работал: максимум одно неподтверждённое сообщение возрастом до 3 с, push-запросы завершались ack_200, максимальная задержка push 4,5 с.
  • Затронуты и одноразовые покупки, и подписки, в нескольких странах и валютах; Россия в отчёте не названа.
  • Официальный инцидент Play Billing: 1 сентября, 08:54–11:43 UTC; отчёт утверждает, что задержки были и позже.

Где именно терялось время

Автор отчёта разложил путь уведомления на два отрезка. Первый: от завершения покупки до момента, когда Google создала событие (это и есть eventTimeMillis, время события в миллисекундах Unix). Второй: от создания события до получения его сервером через Pub/Sub. Второй отрезок оставался быстрым, 0,6 и 1,4 секунды в проблемных случаях. Всё время ушло на первый: уведомление не доходило часами, при том что метрики Pub/Sub со стороны разработчика чистые: очередь пустая, подтверждения приходят, задержка доставки в пределах секунд. На каком именно внутреннем этапе у Google застревало событие, по этим данным установить нельзя.

Есть оговорка, которую автор делает сам: он не сохраняет внешнее поле publishTime из конверта Pub/Sub, поэтому не может доказать, где именно внутри инфраструктуры Google лежала задержка, до публикации в Pub/Sub или после. Вывод о том, что событие создавалось поздно, сделан по eventTimeMillis.

Почему RTDN нельзя считать единственным источником правды

Документация Google требует после получения RTDN вызывать Developer API: уведомление не содержит полного состояния покупки. Этот случай добавляет к этому редакционный вывод: уведомление может прийти поздно или, в худшем сценарии, не прийти вовремя вообще. Если сервер выдаёт доступ только по RTDN, при задержке пользователь остаётся без оплаченного. Если клиент после покупки сам сообщает серверу токен покупки, а сервер проверяет его через Developer API, задержка RTDN ни на что не влияет.

Что проверить в своём приложении

  1. Убедиться, что клиент после успешной покупки отправляет purchase token на сервер, а сервер подтверждает его через Google Play Developer API, не дожидаясь RTDN.
  2. Логировать eventTimeMillis и publishTime из конверта Pub/Sub вместе с временем получения, чтобы при следующем инциденте было видно, на каком отрезке задержка.
  3. Проверить логи за 1–2 сентября на покупки, у которых разница между временем оплаты в клиенте и RTDN больше нескольких минут.
  4. Не завязывать acknowledge покупки только на RTDN: неподтверждённая в течение трёх дней покупка возвращается пользователю автоматически.

Отчёт говорит о нескольких странах и валютах, но Россию не называет; учитывая, что оплата в Google Play российскими картами не работает с 2022 года, задержки касаются в первую очередь приложений с зарубежной аудиторией. Что ещё менялось в правилах Play в последние дни: требование к AnkiDroid убрать ссылку на пожертвования и стабильный релиз Android Studio Quail 4. Появится ли по этому отчёту официальный ответ Google или новая запись в статусе Play Billing, мы проверим.

Источники: Отчёт разработчика в сообществе Google Play, Google Play Status Dashboard: инцидент Play Billing, Справочник RTDN