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

У меня возникла проблема с покупками / подписками приложений :

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

Я использую классы IabHelper из этого примера .

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

Я хотел бы обратить внимание на Google, поэтому они обеспечивают правильное исправление для этого, будь то в классах IabHelper или в Службе воспроизведения, или для предоставления информации, как это следует обрабатывать.

Я использую код в приложении с (на момент написания) 900.000 активных пользователей, и из-за этого мне приходится вызывать довольно много возмещений.

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

Изменить: Иногда вообще невозможно получить покупки, даже если на телефоне есть только одна учетная запись.

Solutions Collecting From Web of "Покупки в приложении с несколькими учетными записями"

Похоже, что для решения этого не существует односторонней дороги, но давайте попробуем это сделать.

  1. Когда пользователь сначала устанавливает приложение, получает его / ее основной адрес электронной почты или все учетные записи на устройстве

  2. Спросите пользователя, какой адрес электронной почты они будут использовать для будущей оплаты / или какая учетная запись активна для игры Google.

    Вы можете использовать этот код для получения учетной записи

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ Account[] accounts = AccountManager.get(context).getAccounts(); for (Account account : accounts) { if (emailPattern.matcher(account.name).matches()) { String possibleEmail = account.name; ... } } 

    Не забудьте спросить разрешения

     <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

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

  3. Ведите весь платеж по этому конкретному письму.

Способ 2

Использовать новую версию «Отправить и получить деньги с помощью Gmail»

  1. Создайте намерение электронной почты и отправьте конкретные данные в намерение электронной почты и выполните платежи.

  2. После успеха отправьте код в адрес электронной почты пользователя

  3. Используйте код, чтобы активировать все, что они приобрели.

Способ 3

Используйте другую библиотеку платежей или шлюз для покупки в приложении вместо Google.

Уверен, что ошибка в сервисной службе биллинга в приложении.

Это аналогичный вопрос, и, как упоминалось в одном из ответов, может возникнуть необходимость ввести механизм входа и сохранить покупки, сделанные из учетной записи на ваш сервер, или локально на устройстве в зашифрованном файле или что-то подобное.

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

Вы можете использовать OAuth 2.0.

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

Вы можете использовать первую учетную запись Google, разрешающую аутентификацию на вашей стороне. OAuth 2.0 – это инструмент, который упрощает и позволяет разработчикам легко разрешить пользователям доступ к вашему приложению. Класс OAuthHmacSigner управляет аутентификацией.

 signer = new OAuthHmacSigner(); signer.clientSharedSecret = Constants.CONSUMER_SECRET; 

Затем действие Android использует следующий код для запуска потока OAuth:

 launchOauth.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent().setClass(v.getContext(), PrepareRequestTokenActivity.class)); } }); 

Чтобы получить токен доступа OAuth 2.0, вам просто нужно позвонить:

 AccountManager.getAuthToken() 

Надеюсь, это может помочь 🙂

У меня две учетные записи, но никто не работает. То, что я сделал, это то, что я зашел в настройки Android, а затем вошел в учетные предпочтения. Я изменил свою основную учетную запись с той, которая не работает на рабочем. Затем я назначил новую учетную запись основным для всех моих приложений, включая Google Play. Это сработало для меня. Иногда, если он по какой-то причине не работает, вы также можете выйти в интернет и получить доступ к магазину Google Play из Интернета.

Попробуйте получить dup … duplicate dot с сигнатурой файла, заканчивающейся на .apk или .xcode

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

(См. https://support.google.com/googleplay/answer/7007852?hl=ru )