Недавно я наткнулся на это приложение Purchase Apps , которое каким-то образом может получать приложения, за которые я заплатил в Google Play, после того, как я вошел в систему, используя свою учетную запись Google.
Я пытаюсь выяснить, как это делается, поскольку я хочу создать аналогичное приложение, но для бесплатных приложений, которые были загружены.
Однако я не могу найти, какая область действия OAuth API использовалась для получения этой информации, даже после просмотра всего списка API .
РЕДАКТИРОВАТЬ: Я назначаю новую награду за этот вопрос, как это было предложено аналогичным вопросом, который я задавал здесь , и потому что здесь и там я не вижу реального ответа о том, как это сделать, и что можно сделать. с этим.
Я хотел бы разделить вопросы на несколько частей:
Какой API можно использовать для получения информации о приобретенных приложениях? Где я могу прочитать об этом? Покажите, пожалуйста, полный рабочий пример того, как это сделать.
Может ли он больше? Может быть, произвести поиск? Может показать бесплатные приложения, которые были установлены? Может время они установили и удалили? А категории этих приложений?
Есть ли какие-то особые требования для использования этого API?
РЕДАКТИРОВАТЬ: Я назначаю максимальное вознаграждение за это, потому что независимо от того, сколько я читал и пробовал, мне все равно не удалось создать POC, который может запрашивать приложения из Play Store, которые пользователь когда-либо загружал (имя, пакет имя, дата установки и / или удаления, URL-адрес значка, цена ...), включая как платные, так и бесплатные приложения.
Если кто-нибудь найдет рабочий образец, покажите, как это делается, а также покажите, что вы узнали о нем (документация или все, что привело вас к решению). Я нигде не могу его найти, и текущие решения здесь слишком расплывчаты, чтобы я мог начинать с них.
Purchase Apps
apk файл методом декомпиляции. Он никогда не использовал API для получения списка купленных приложений. Его подход такой же, как мы знаем, который анализирует html-контент веб-страницы магазина воспроизведения. Вот фрагмент этого кода: hastebin.com/uceyavurij.jsPurchased Apps
может быть получена из веб-содержимого игрового магазина. К сожалению, у меня нет возможности купить приложение в Google Play. Если вы поделитесь со мной учетной записью, в которой есть купленное приложение, я могу разработать для вас образец кода.Ответы:
Вопрос решен. Эксплойт закрыт.
Последнее обновление:
Это ошибка, и Google исправит ее в следующем обновлении.
Этот ответ превратился в конгломерат идей и был отредактирован, чтобы включить информацию из обсуждения в комментарии.
androidmarket
Апи, был бы настроен апи написанный разработчиком. Это недоступно для публики.Чтобы ответить на ваши вопросы в комментариях. Разработчик использовал бы текущий API, доступный через Android Developer и Google, чтобы создать проект, который управляет всем этим.
Что касается доступа
Full Account Access
, я не совсем уверен, как эти разработчики этого добились.Я бы рекомендовал использовать AccountManager , который является частью android.accounts, имеет доступ к учетным данным и методу getUserData . Менеджер учетных записей имеет доступ к паролям и может создавать и удалять учетные записи. Это, возможно, используется с Content Provider
См. Проверка подлинности Udinic / SyncAdapter .
Чтобы ответить на ваш комментарий:
Этот блог должен помочь вам начать работу. Напишите свой собственный Android Authenticator .
Я не могу вам сказать, как на самом деле работают эти приложения. У них также могут быть разные реализации (если они не являются совместными усилиями за кулисами, они наверняка будут разными).
Одно предположение. Сначала используйте GoogleSignInAccount с com.google.android.gms.auth.api.signin .
Существует определение области , чтобы определить объем разрешений, предоставляемых приложению.
Используя requestScopes () ,
публичный статический окончательный строковый ПРОФИЛЬ
Для примера :
Если можно получить полный доступ, можно найти список всех приложений, используемых владельцем учетной записи, и сравнить их с тем, что находится на устройстве.
Диспетчер пакетов получит список всех приложений, установленных в данный момент на устройстве.
PackageInfo предоставляет подробную информацию о приложении.
INSTALL_REASON_USER также отфильтрует приложения, которые были активно установлены пользователем.
Вы можете посмотреть com.google.firebase.appindexing и Log User Actions . Можно отслеживать различные действия .
Историю учетной записи пользователя можно найти по адресу https://myactivity.google.com/myactivity .
Полезная ссылка - площадка OAuth 2.0 .
Этот репозиторий github node-google-play , использующий node, является текущим и будет вызывать API Google Play. Как и архив, который использовался как «неофициальный» api, android-market-api , для запроса рынка.
Приложение 1
Приложение требует использовать следующие разрешения:
Примечательно, что приложение не устанавливает никаких разрешений при базовой установке. Мне не удалось воспользоваться ни одной из функций, так как у меня нет платных приложений. Итак, для первоначального поиска не требовалось разрешений, что означало бы, что у приложения нет доступа к моей учетной записи.
Я проверил разрешения - их не было. Поэтому единственное, что требовалось, - это принять всплывающее окно, как показано в вашем вопросе.
Приложение 2
Другое приложение, на которое вы ссылаетесь, которое делает то же самое, более открыто говорит о том, к чему осуществляется доступ.
Мои платные приложения
Я подробно рассказал об этих приложениях в этом сообщении в блоге , который был посвящен университетскому проекту (без денежной выгоды). Я склонен думать, что это эксплойт в API, а не статус по дизайну Google, поскольку нет вызовов API для получения покупок приложений, кроме собственного приложения разработчика. Я предполагаю, что это эксплойт нулевого дня, и в этом случае нет законного способа получить доступ к этой информации.
источник
В случае одного из этих приложений («Мои платные приложения») после проверки сетевого трафика становится очевидным, что оно действительно использует страницу учетной записи магазина для получения списка платных приложений. Теперь он использует тот же механизм, что и Google Chrome в настоящее время, и Pokemon GO, предположительно использовавшийся в определенный момент времени.
Вкратце, шаги для этого следующие:
Вход : на первом этапе упомянутая программа выполняет вход пользователя в систему и получает доступ к токену доступа пользователя. Для этого он использует
android.accounts.AccountManager.getAuthToken()
метод. (См. Подробнее: AccountManager ) Однако, что касается области действия токена,oauth2:https://www.google.com/accounts/OAuthLogin
это необходимо. Важно отметить, что на основе основании документации OAth2 от Google эта область не действительна; тем не менее, это похоже на допустимую область для Google OAuth v1.Преобразование недавно полученного токена доступа в
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 » :
Как хорошо видно на картинке, конечный результат идентичен тому, что я получаю, когда обычно открываю страницу учетной записи магазина на своем ПК с помощью Chrome Desktop:
Боковое примечание :
Кажется, что ни одна из этих конечных точек не задокументирована, поскольку они в основном используются собственными программами Google и должны считаться внутренними. Поэтому я настоятельно рекомендую не использовать их в любой программе или коде, которые вы ожидаете работать в течение длительного времени или в производственной среде. Кроме того, для вас тоже есть плохие новости: похоже, что на странице учетной записи Google Play перечислены только платные или специальные бесплатные приложения (особенно OEM-приложения). Я постараюсь найти время и углубиться в другое приложение.
Интересные статьи :
Жетоны покемонов
Использование токенов OAuth2 в Google Chrome
источник
Если у вас есть root-доступ, вы можете получить доступ
/data/data/com.android.vending/databases/library.db
Эта база данных содержит всю информацию о том, какое приложение вы загрузили, какие приложения вы приобрели, и даже в каком приложении вы работали
IAP
.Проверьте таблицу владельцев, в ней есть вся информация.
источник
Работа с неофициальными API Google - невероятно сложная территория. Будет возможно заставить это работать, но это все, что я скажу. Действуйте на свой страх и риск.
Первое, что вам нужно сделать, это получить токен аутентификации Google Play . Это можно сделать несколькими способами, но вот как это делается в приобретенных приложениях:
Здесь следует отметить несколько моментов:
AccountManager
.Получив токен аутентификации, вы можете получить доступ к любой конечной точке Google Play Store . Главный из них, используемый Purchased Apps -
https://android.clients.google.com/fdfe/purchaseHistory
. Еще один, который может вас заинтересовать, - этоhttps://android.clients.google.com/fdfe/details?doc=(package name)
(из кода APKfetch ). Вот страница с некоторыми подробностями и анализом. Если вы сделаете запрос к этим API, вам нужно будет указать несколько заголовков:Authorization
-"GoogleLogin auth=(your auth token)"
User-Agent
-"Android-Finsky/6.4.12.C-all%20%5B0%5D%202744941 (api=3,versionCode=80641200,sdk=" + VERSION.SDK_INT + ",isWideScreen=0)";
X-DFE-Device-Id
- идентификатор Google Services Framework вашего устройства, полученный от AdvertisingIdClient .X-DFE-Client-Id
-"am-android-google"
Accept-Language
- Код языка устройства, например"en"
.Теперь вам нужно разобрать ответ . Здесь все становится сложнее. Эти API-интерфейсы возвращают сообщение, закодированное как Protobuf , так что по сути это просто двоичные данные, если у вас нет схемы (которая, конечно, есть только у Google). Теоретически один из способов сделать это - декомпилировать приложение Google Play Store и повторно использовать созданные ими модели protobuf с помощью такого инструмента, как JADX. .
К сожалению, я пробовал это, но на самом деле это не работает. Классы моделей Protobuf слишком сложны для стандартного декомпилятора. Вы можете использовать инструмент под названием PBTK . В идеале вы захотите запустить это в Google Play Store 6.1.12 APK, так как это последняя версия до того, как они начали использовать ProGuard. Обратите внимание, что в сценарии этой программы есть две ошибки, которые необходимо исправить перед ее запуском: изменение
'extracto'
на'extractor'
в gui.py и удаление утверждения утверждения в строке 500 файла jar_extract.py .Теперь это должно вывести все классы ответов в виде файлов .proto. Создайте папку с именем src / main
proto
и перетащите в нее весь сгенерированный каталог com. Вы можете удалить все, чего нетcom/google/android/finsky/protos
. Следуйте инструкциям в Интернете, чтобы настроить Gradle с помощью плагина Protobuf Lite.Если вы хотите проанализировать ответ, вы можете использовать класс ResponseWrapper, поскольку все они, по-видимому, содержатся в нем.
Это все, что я могу вам сказать. Есть хороший шанс, что я в чем-то ошибся; JADX - ваш лучший друг здесь, потому что лучший способ выяснить, что делает приложение, - это посмотреть его код. Надеюсь, это поможет и счастливого развития!
источник
AccountManager
, вы уверены, что он еще доступен? Я думаю, что в настоящее время Google предоставляет только возможность использованияAccountPicker
(например, здесь: stackoverflow.com/a/26888259/878126 ). Но как мне выполнить остальное? Вы это проверяли? Это сработало для вас? Поделитесь, пожалуйста, кодом. Вот почему я назначил награду, чтобы увидеть, как это работает ...вы можете получить имя пакета всех установленных приложений на устройстве, а затем получить информацию о каждом установленном пакете, который вы найдете на устройстве, из Google Play без необходимости входить в учетную запись пользователя. есть некоторые сторонние или неофициальные API для получения сведений о приложениях Google Play в виде json, получив имя пакета приложения. например: https://42matters.com/, затем используйте полученную информацию для каждого пакета, чтобы найти бесплатные.
источник
У меня есть два ресурса, на которые вы можете обратить внимание, но сначала, одним словом, нет. API от GOOGLE не позволяет вам делать то, что вы хотите, поскольку эти показатели не хранятся в телефоне, они находятся на серверах магазина Google Play, а у Google нет ОФИЦИАЛЬНОГО API для магазина воспроизведения. Однако вы можете почерпнуть некоторую информацию на этих двух сайтах:
https://www.quora.com/Is-there-an-API-for-the-Google-Play-Store введите здесь описание ссылки
/android/162146/how-to-see-all-the-apps-i-have-downloaded-from-google-play-store
и этого достаточно, чтобы увидеть, как этого добиться.
Во-первых, список приложений, загруженных учетной записью, доступен только для этой учетной записи. и это можно сделать через игровой магазин. Поскольку ваше приложение будет установлено на телефоне этого пользователя, это не имеет значения ... вы находитесь.
во-вторых, вам понадобится сторонний API, созданный для GOOGLE PLAY STORE, некоторые есть, проверьте первую ссылку.
используя выбранный вами api, вы отправите запрос на получение в магазин воспроизведения, а взамен в большинстве случаев должны получить объект json для десериализации.
десериализуйте объект, и у вас будет свой список. какой список вы получите, будет зависеть от используемой конечной точки, но это следует объяснить в самом API.
удачи!
источник