首页 文章

如何从谷歌播放中获取用户的付费应用列表?

提问于
浏览
98

我最近遇到了这个应用程序 - Purchase Apps,它以某种方式能够检索我使用我的谷歌帐户登录后在谷歌播放中支付的应用程序 .

我正试图找出它是如何完成的,因为我想构建一个类似的应用程序,但对于下载的免费应用程序 .

但是,我无法找到用于检索该信息的OAuth API Scope . 我浏览了整个API列表here .

Google Sign in asking for access to androidmarket

请帮忙 .


编辑:我'm putting a new bounty on this question, as suggested by a similar question I'已经问过here,因为在这里和那里我没有看到关于如何做到的真正答案,以及可以用它做什么 .

我想将问题细化为多个部分:

  • 什么是可用于获取已购买应用程序信息的API?我在哪里可以阅读它?请展示如何操作的完整实用示例 .

  • 可以做得更多吗?也许执行搜索?也许显示已安装的免费应用程序?也许是他们安装和卸载的时间?那些应用程序的类别?

  • 使用此API有什么特殊要求吗?


编辑:我正在为此付出最大的赏金,因为无论我阅读和尝试了多少,我仍然无法制作可以从用户下载的Play商店查询应用程序的POC(名称,包装)名称,安装和/或删除日期,图标URL,价格......) .

如果有人找到工作样本,请说明它是如何完成的,并展示你是如何找到它的(文档或任何导致你找到解决方案的东西) . 我无法在任何地方找到它,而这里目前的解决方案对我来说太模糊了 .

3 回答

  • 8

    最近更新:

    这是一个错误,Google将在下次更新时解决它 .

    我们已将此问题推迟到将来的版本中考虑 . 感谢您抽出宝贵时间


    这个答案已经变成了一个集合的想法,并经过编辑,以包括评论中讨论的信息 .

    androidmarket api,是由开发人员编写的自定义api . 它不向公众开放 .

    在评论中解决您的疑虑 . 开发人员可以利用Android Developer和Google提供的当前apis创建一个管理所有这些的项目 .

    至于访问 Full Account Access ,我不确定这些开发人员是如何实现这一目标的 .

    我建议使用AccountManager,它是android.accounts的一部分,可以访问凭证和方法getUserData . 客户经理可以访问密码,并且能够创建和删除帐户 . 这可能与Content Provider一起使用

    Udinic/SyncAdapter Authentication .

    要回复你的评论:

    这个博客应该可以帮助您入门 . Write your own Android Authenticator .


    这些应用程序实际上是如何工作的,我无法告诉你 . 他们也可能有不同的实现(除非他们是幕后的协作努力,他们肯定会有所不同) .

    一个猜测 . 首先使用GoogleSignInAccountcom.google.android.gms.auth.api.signin .

    scope有一个定义,用于确定授予应用程序权限的范围 .

    使用requestScopes()

    public static final String PROFILE

    ... /它可以让您的网络应用程序访问无线Android应用程序安装 .

    对于example

    GoogleSignInOptions gso =
            new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail().
                .requestScopes(new Scope("https://www.googleapis.com/auth/contacts.readonly"))
                .build();
    

    如果可以获得完全访问权限,则可以找到帐户持有者使用的所有应用程序的列表,并将其与设备上的内容进行比较 .

    Package Manager将检索设备上当前安装的所有应用的列表 .
    PackageInfo提供有关该应用的详细信息 .
    INSTALL_REASON_USER还会过滤掉用户主动安装的应用 .

    您可能想查看com.google.firebase.appindexingLog User Actions . 可以跟踪不同的actions .

    用户帐户历史记录位于https://myactivity.google.com/myactivity .

    一个有用的链接是OAuth 2.0 Playground .


    这个github repo node-google-play,使用节点,是最新的,将调用Google Play API . 与用作查询市场的"unofficial" api,android-market-api的存档一样 .


    App 1

    app claims使用以下权限:

    版本2.1.8可以访问:$应用程序内购买其他从Internet查看网络连接接收数据完全网络访问使用设备上的帐户阻止设备休眠阅读Google服务配置

    值得注意的是,当有基本的安装时,应用程序不会设置任何权限 . 我无法使用任何功能,因为我没有付费应用 . 所以对于初始搜索 - 没有需要的权限,这表明该应用无法访问我的帐户 .

    我检查了权限 - 没有设置 . 因此,唯一需要的是接受弹出窗口,如问题中所示 .


    App 2

    您提到的另一个应用程序也可以提供相同的功能 .

    My Paid Apps

    安全/隐私声明首次运行此应用程序时,它会要求您的Google帐户获得完全许可 . 遗憾的是,这是访问所需信息的唯一方法 . 不会存储任何个人信息,也不会与此应用的开发者共享有关您的应用的信息,也不会与任何第三方共享 . 一切都只保存在手机上 .


    我在this blog post中详细介绍了这些应用程序,这是一个大学顶点项目(没有金钱收益) . 我'm inclined to think this is an exploit in the API and not status by design by Google, as there are no API calls to fetch purchases of apps other than the developer'自己的应用程序 . 我假设's a zero day exploit, in which case there'没有合法的方式来访问这些信息 .

  • 37

    如果是其中一个应用程序(My Paid Apps),在检查网络流量后,很明显它确实使用Store的帐户页面来检索付费应用程序列表 . 现在,它使用的机制与谷歌浏览器当前使用的机制相同,而口袋妖怪GO应该在某个时间点使用 .

    简而言之,这样做的步骤如下:

    • Login :上述程序第一步所做的是将用户登录并访问用户的访问令牌 . 为此,它使用 android.accounts.AccountManager.getAuthToken() 方法 . (查看更多:AccountManager)但是,对于令牌范围,请求 oauth2:https://www.google.com/accounts/OAuthLogin . 值得注意的是,基于Google的OAth2 documentation,此范围无效;但是,它似乎是Google OAuth v1的有效范围 .

    • Converting the newly retrieved access token to a ubertoken :现在,实际上 ubertoken 应该做什么,是未知的,并且没有关于它的官方文档 . 但是,Chrome浏览器使用它来登录用户 . 这是通过请求 https://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1 页面完成的 .

    • Converting ubertoken to website session :稍后,使用新创建的 ubertoken 可以使用 https://accounts.google.com/MergeSession API endpoints 获取网站会话 . 完成此步骤后,应用程序基本上可以加载您登录时可以使用浏览器打开的所有个人页面;除了一些特殊页面,包括付款设置 .

    • Retrieving the list of paid applications: 请求并解析 https://play.google.com/store/account 页面 .

    Following is the application's traffic as captured by 'Packet Capture'

    Captured Traffic

    由于在图片中清晰可见,最终结果与我通常使用Chrome桌面在我的电脑上打开商店帐户页面时得到的结果相同:
    Chrome view source

    Side note

    似乎这些终点都没有记录,因为它们主要由Google自己的程序使用,应该被视为内部的 . 因此,我强烈建议不要在任何您希望长时间运行或在 生产环境 环境中运行的程序或代码中使用它们 . 此外,这里也有坏消息,似乎Google Play的帐户页面仅列出付费应用程序或特殊免费应用程序(尤其是OEM应用程序) . 我会尝试找一些时间深入挖掘其他应用程序 .

    Interesting articles

    Pokemon tokens

    Exploiting Google Chrome's OAuth2 Tokens

  • -1

    您可以在设备上获取所有已安装应用程序的软件包名称,然后从google play获取您在设备中找到的每个已安装软件包的信息,而无需访问用户帐户 . 有一些第三方或非官方的apis通过获取应用程序包名称获取谷歌播放应用程序的详细信息作为json . 例如:https://42matters.com/然后使用收到的每个包的信息来查找免费的包 .

相关问题