如何从Google Play获取用户下载的应用列表(付费/免费)?

abh*_*ank 118 android google-play google-oauth google-signin

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

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

但是,即使经过整个API列表,我也无法找到用于检索该信息的OAuth API Scope .

谷歌登录要求访问androidmarket


编辑:我正在对这个问题提出新的赏金,正如我在这里提出的一个类似的问题所提出的那样,因为在这里和那里我没有看到关于如何做到的真正答案,以及可以做些什么用它.

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

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

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

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


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

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

Yve*_*omb 43

最近更新:

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

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


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

androidmarketAPI,将是一个自定义的API,开发者编写.它不向公众开放.

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

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

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

请参阅Udinic/SyncAdapter身份验证.

要回复你的评论:

这个博客应该可以帮助您入门. 编写自己的Android身份验证器.


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

一个猜测.首先在 com.google.android.gms.auth.api.signin中使用GoogleSignInAccount.

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

使用 requestScopes()时,

public static final String PROFILE

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

对于例如:

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

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

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

您可能需要查看com.google.firebase.appindexing日志用户操作.可以跟踪不同的动作.

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

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


这个使用节点的github repo node-google-play是最新的,将调用Google Play API.正如用作"非官方"api,android-market-api的档案一样,用于查询市场.


应用1

应用声称使用以下权限:

版本2.1.8可以访问:
$应用内购买

其他

  • 从互联网接收数据
  • 查看网络连接
  • 完全网络访问
  • 在设备上使用帐户
  • 防止设备睡觉
  • 阅读Google服务配置

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

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


应用2

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

我的付费应用

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


我在这篇博文中详细介绍了这些应用程序,这篇文章是针对大学顶点项目(没有金钱收益).我倾向于认为这是API中的漏洞,而不是谷歌设计的状态,因为没有API调用来获取除开发者自己的应用之外的应用程序的购买.我假设它是零日漏洞,在这种情况下,没有合法的方式来访问这些信息.


Sor*_*ati 10

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

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

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

  2. 将新检索的访问令牌转换为ubertoken:现在,实际ubertoken应该做什么,是未知的,并且没有关于它的官方文档.但是,Chrome浏览器使用它来登录用户.这是通过请求https://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1页面来完成的.

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

  4. 检索付费应用程序列表: 请求和解析https://play.google.com/store/account页面.

以下是" 数据包捕获 " 捕获的应用程序流量:

捕获的流量

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

旁注:

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

有趣的文章:

口袋妖怪代币

利用谷歌Chrome的OAuth2代币