В результате покупки в приложении используется неправильная учетная запись после обновления

Типичный сценарий: у пользователя две учетные записи, xyz@gmail.com и abc@gmail.com, как на Android-устройстве. Пользователь покупает мое премиальное обновление в версии 1.0 с помощью учетной записи xyz@gmail.com, а затем обновляется до версии 1.1, а код (код покупки в приложении) теперь считает, что они используют аккаунт abc@gmail.com, поэтому он считает, что Пользователь не купил премиальное обновление. Я знаю, что он использует неправильную учетную запись, потому что они отправляют мне свой заказ электронной почты, а затем они говорят мне, что неправильный адрес электронной почты указан в диалоговом окне покупки, если они нажимают на сумму $. Единственное исправление на этом этапе – удалить и переустановить, используя веб-сайт рабочего стола Play Store и правильную учетную запись.

Я использую IABHelper из образца с некоторыми исправлениями из StackOverflow. Насколько я знаю, у меня нет возможности выбрать учетную запись, которую они используют для этого.

Любые идеи о том, что может происходить? Это случилось с кем-то еще?

Код превысил предел длины в StackOverflow, поэтому я поставил его здесь http://pastebin.com/hLquZ6SP

EDIT: У меня теперь есть пользователь, который утверждает, что это случается с ним каждый раз, когда он обновляет приложение.

EDIT: Это происходит гораздо чаще во время поэтапного развертывания, я думаю, потому что учетная запись, которая получает поэтапное обновление, не та, с которой пользователь купил IAP.

Это похоже на ошибку в приложении Play Store. См. Этот раздел Справочного форума Google для обхода пользователя.

В основном приложение Play Store иногда связывает неправильную учетную запись Google с биллингами приложений в приложении. Но, похоже, он работает правильно, когда установка приложения «выталкивается» с веб-сайта Play Store (с компьютера).

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

У меня была такая же проблема с очень небольшим количеством пользователей.

В коде нельзя контролировать, какая учетная запись используется для проверки покупки. Когда это произойдет, я попрошу пользователей выбрать учетную запись, которую они приобрели в приложении в приложении Google Play, а затем перезапустить устройство, запустить приложение и выполнить операцию «восстановить покупку». В большинстве случаев это помогает. Если это не так, им нужно использовать Google Play web ui, в значительной степени, как вы описали его.

Я также должен признать, что большинство таких вопросов я испытал еще в 2013 году, начиная с 2014 года, и никогда с тех пор. Возможно, Google каким-то образом улучшил это.

У вас нет способа указать в вашем коде, какая учетная запись пользователя будет использоваться для покупки, поскольку ОС / Google Play решает, что:

  • Если вы загружаете приложение из Play Маркета, используя учетную запись xyz, то та же учетная запись будет выставлена ​​на оплату покупок, связанных с вашим приложением
  • Если вы снова установите приложение (переустановить или другое устройство), используя другую учетную запись abc, тогда это будет рассматриваться как владелец этого приложения, поэтому покупки из xyz не отображаются в учетной записи abc
  • Если вы обойдете apk, тогда учетная запись, владеющая приложением, станет первой учетной записью Google, созданной на устройстве

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