Как получить список платных приложений пользователем из Google Play?
Недавно я наткнулся на это приложение " Купить приложения", которое каким-то образом может извлекать приложения, за которые я заплатил, в Google Play после того, как я вошел в систему с помощью своей учетной записи Google.
Я пытаюсь выяснить, как это делается, поскольку я хочу создать подобное приложение, но для бесплатных приложений, которые были загружены.
Тем не менее, я не могу найти, какая область OAuth API Scope использовалась для получения этой информации, даже после просмотра всего списка API.
![Google Sign in asking for access to androidmarket]()
РЕДАКТИРОВАТЬ: я назначаю новую награду за этот вопрос, как это было предложено в аналогичном вопросе, который я задал здесь, и потому что здесь и там я не вижу реального ответа о том, как это сделать, и что можно сделать с этим.
Я хотел бы уточнить вопросы на несколько частей:
-
Какой API можно использовать для получения информации о приобретенных приложениях? Где я могу прочитать об этом? Пожалуйста, покажите полный, рабочий пример того, как это сделать.
-
Это может сделать больше? Может быть, выполнить поиск? Может быть, показать бесплатные приложения, которые были установлены? Может быть, когда они были установлены и удалены? И категории этих приложений?
-
Существуют ли особые требования для использования этого API?
РЕДАКТИРОВАТЬ: я возлагаю на это максимальное вознаграждение, потому что независимо от того, сколько я прочитал и попробовал, мне все равно не удалось создать POC, который может запрашивать приложения из Play Store, которые пользователь когда-либо загружал (имя, пакет имя, дата установки и/или удаления, значок URL, цена...).
Если кто-то найдет работающий образец, покажите, как это было сделано, а также покажите, как вы узнали об этом (документация или что-нибудь, что привело вас к решению). Я нигде не могу его найти, и текущие решения здесь слишком расплывчаты, чтобы начать с них.
Ответы
Ответ 1
Последнее обновление:
Это ошибка, и Google обратится к ней в следующем обновлении.
Мы отложили эту проблему для рассмотрения в будущей версии. Спасибо за ваше время, чтобы сделать Android лучше
Этот ответ превратился в конгломерат идей и был отредактирован для включения информации из обсуждения в комментарии.
androidmarket
api, был бы настроенным api, написанным разработчиком. Он недоступен для общественности.
Чтобы ответить на ваши вопросы в комментариях. Разработчик использовал бы текущую apis, доступную через Android Developer и Google, чтобы создать проект, который управляет всеми этими.
Что касается доступа к Full Account Access
, я не уверен, как именно эти разработчики достигли этого.
Я бы рекомендовал использовать AccountManager, который является частью android.accounts, имеет доступ к учетным данным и методу getUserData. Менеджер учетных записей имеет доступ к паролям и способен создавать и удалять учетные записи. Это, возможно, используется с поставщиком контента
См. Udinic/SyncAdapter Authentication.
Чтобы ответить на ваш комментарий:
Этот блог должен помочь вам начать работу. Напишите свой собственный Android-аутентификатор.
Как эти приложения действительно работают, я не могу сказать вам. Они могут также иметь разные реализации (если они не являются совместными усилиями за кулисами, они, безусловно, будут разными).
Догадка. Сначала используйте GoogleSignInAccount с com.google.android.gms.auth.api.signin.
Там определено определение области, чтобы определить степень разрешений приложения.
Используя requestScopes(),
public static final String PROFILE
.../Это позволяет вашему веб-приложению получать доступ к приложениям Android для Android.
Например:
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail().
.requestScopes(new Scope("https://www.googleapis.com/auth/contacts.readonly"))
.build();
Если можно получить полный доступ, список всех приложений, используемых владельцем учетной записи, можно найти и сравнить с тем, что на устройстве.
Менеджер пакетов будет получать список всех приложений, установленных на устройстве.
PackageInfo предоставляет подробную информацию об этом приложении.
INSTALL_REASON_USER также отфильтровывает приложения, которые были активно установлены пользователем.
Возможно, вы захотите просмотреть com.google.firebase.appindexing и выполнить действия пользователя в журнале. Можно отслеживать различные действия.
Историю учетных записей пользователей можно найти на странице https://myactivity.google.com/myactivity.
Полезной ссылкой является OAuth 2.0 Playground.
Этот узел github repo -google-play, используя узел, является текущим и будет вызывать API Google Play. Как и архив, который использовался как "неофициальный" api, android-market-api, запрашивал рынок.
Приложение 1
Приложение заявляет, что использует следующие разрешения:
Версия 2.1.8 может иметь доступ:
$ Покупки в приложении
Другой
- получать данные из Интернета
- просмотр сетевых подключений
- полный доступ к сети
- использовать учетные записи на устройстве
- не позволять устройству спать
- прочитать конфигурацию службы Google
Примечательно, что приложение не устанавливает никаких разрешений при наличии базовой установки. Мне не удалось использовать какие-либо функции, так как у меня нет платных приложений. Таким образом, для первоначального поиска не было никаких разрешений, что указывало бы, что приложение не имеет доступа к моей учетной записи.
Я проверил разрешения - их не было. Поэтому нужно было только принять всплывающее окно, как показано в вашем вопросе.
![SVhst.png]()
Приложение 2
Другое приложение, на которое вы ссылаетесь, делает то же самое, более подробно о том, к чему обращаются.
Мои платные приложения
УВЕДОМЛЕНИЕ О БЕЗОПАСНОСТИ/КОНФИДЕНЦИАЛЬНОСТИ
При первом запуске этого приложения он будет запрашивать полное разрешение вашей учетной записи Google. Это, к сожалению, единственный способ получить доступ к необходимой информации. Никакая личная информация не сохраняется, никакая информация о ваших приложениях не предоставляется совместно с разработчиком этого приложения и не предоставляется третьим лицам. Все хранится только на вашем телефоне.
![Y4DIn.png]()
![dCXjc.png]()
![UKi2e.png]()
![1bLEK.png]()
Я подробно рассказывал об этих приложениях в этом блоге, который был для университетского проекта (без денежного выигрыша). Я склонен думать, что это эксплойт в API, а не статус по дизайну от Google, так как нет вызовов API для получения покупок приложений, отличных от собственного приложения разработчика. Я выдвигаю гипотезу о том, что он использует нулевой день, и в этом случае нет законного способа доступа к этой информации.
Ответ 2
В случае одного из этих приложений (My Paid Apps) после проверки сетевого трафика довольно очевидно, что он использует страницу "Учетная запись" для получения списка платных приложений. Теперь используемый механизм - это тот же механизм, что и Google Chrome, и Pokemon GO, предположительно, в определенный момент времени.
Вкратце, шаги для этого заключаются в следующем:
-
Вход: то, что упомянутая программа делает для первого шага, - это вход в систему пользователя и доступ к токену доступа пользователя. Для этого используется метод android.accounts.AccountManager.getAuthToken()
. (См. Больше: , android.os.Handler) rel=noreferrer>AccountManager) Однако, что касается области токена, oauth2:https://www.google.com/accounts/OAuthLogin
. Возможно, важно отметить, что на основе документации OAth2 от Google эта область недействительна; однако он кажется действительным для Google OAuth v1.
-
Преобразование вновь извлеченного токена доступа в ubertoken
: теперь, что на самом ubertoken
предполагается ubertoken
, неизвестно, и официальной документации по нему нет. Тем не менее, это было замечено в дикой природе, которое будет использоваться браузером Chrome для входа в систему. Это делается путем запроса страницы https://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1
.
-
Преобразование ubertoken
в сеанс веб-сайта: позже, используя вновь созданный ubertoken
можно получить сеанс веб-сайта, используя конечную точку https://accounts.google.com/MergeSession
API. После этого шага приложение, по существу, может загружать все личные страницы, которые вы можете открыть, используя свой браузер во время входа в систему; кроме некоторых специальных страниц, включая настройки оплаты.
-
Получение списка платных приложений: запрос и разбор страницы https://play.google.com/store/account
.
Ниже приведен трафик приложений, захваченный " Packet Capture ":
![Captured Traffic]()
Как видно на картинке, конечный результат идентичен тому, что я получаю, когда я обычно открываю страницу учетной записи магазина на своем ПК с помощью Chrome Desktop: ![Chrome view source]()
Примечание стороны:
Кажется, ни одна из этих конечных точек не документирована, поскольку они в основном используются собственными программами Google и должны считаться внутренними. Поэтому я настоятельно рекомендую не использовать их в какой-либо программе или коде, которые вы ожидаете запускать в течение длительного времени или в производственной среде. Кроме того, здесь есть и плохие новости, кажется, что на странице аккаунта Google Play перечислены только платные приложения или специальные бесплатные приложения (особенно OEM-приложения). Я попытаюсь найти какое-то время и углубиться в другое приложение.
Интересные статьи:
Покемонские жетоны
Использование Google Chrome OAuth2 Tokens
Ответ 3
вы можете получить имя пакета для всех установленных приложений на устройстве, а затем получить информацию о каждом установленном пакете, который вы найдете на устройстве, из игры Google, без необходимости входить в учетную запись пользователя. есть некоторые сторонние или неофициальные apis, чтобы получить информацию о приложениях Google Play как json, получив имя пакета приложения. например: https://42matters.com/, затем используйте полученную информацию для каждого пакета, чтобы найти бесплатные.