我最近遇到了这个应用程序 - Purchase Apps,它以某种方式能够检索我使用我的谷歌帐户登录后在谷歌播放中支付的应用程序 .
我正试图找出它是如何完成的,因为我想构建一个类似的应用程序,但对于下载的免费应用程序 .
但是,我无法找到用于检索该信息的OAuth API Scope . 我浏览了整个API列表here .
请帮忙 .
编辑:我'm putting a new bounty on this question, as suggested by a similar question I'已经问过here,因为在这里和那里我没有看到关于如何做到的真正答案,以及可以用它做什么 .
我想将问题细化为多个部分:
-
什么是可用于获取已购买应用程序信息的API?我在哪里可以阅读它?请展示如何操作的完整实用示例 .
-
可以做得更多吗?也许执行搜索?也许显示已安装的免费应用程序?也许是他们安装和卸载的时间?那些应用程序的类别?
-
使用此API有什么特殊要求吗?
编辑:我正在为此付出最大的赏金,因为无论我阅读和尝试了多少,我仍然无法制作可以从用户下载的Play商店查询应用程序的POC(名称,包装)名称,安装和/或删除日期,图标URL,价格......) .
如果有人找到工作样本,请说明它是如何完成的,并展示你是如何找到它的(文档或任何导致你找到解决方案的东西) . 我无法在任何地方找到它,而这里目前的解决方案对我来说太模糊了 .
3 回答
最近更新:
这是一个错误,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 .
这些应用程序实际上是如何工作的,我无法告诉你 . 他们也可能有不同的实现(除非他们是幕后的协作努力,他们肯定会有所不同) .
一个猜测 . 首先使用GoogleSignInAccount与com.google.android.gms.auth.api.signin .
scope有一个定义,用于确定授予应用程序权限的范围 .
使用requestScopes(),
public static final String PROFILE
对于example:
如果可以获得完全访问权限,则可以找到帐户持有者使用的所有应用程序的列表,并将其与设备上的内容进行比较 .
Package Manager将检索设备上当前安装的所有应用的列表 .
PackageInfo提供有关该应用的详细信息 .
INSTALL_REASON_USER还会过滤掉用户主动安装的应用 .
您可能想查看com.google.firebase.appindexing和Log 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使用以下权限:
值得注意的是,当有基本的安装时,应用程序不会设置任何权限 . 我无法使用任何功能,因为我没有付费应用 . 所以对于初始搜索 - 没有需要的权限,这表明该应用无法访问我的帐户 .
我检查了权限 - 没有设置 . 因此,唯一需要的是接受弹出窗口,如问题中所示 .
App 2
您提到的另一个应用程序也可以提供相同的功能 .
My Paid Apps
我在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'没有合法的方式来访问这些信息 .
如果是其中一个应用程序(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' :
由于在图片中清晰可见,最终结果与我通常使用Chrome桌面在我的电脑上打开商店帐户页面时得到的结果相同:
Side note :
似乎这些终点都没有记录,因为它们主要由Google自己的程序使用,应该被视为内部的 . 因此,我强烈建议不要在任何您希望长时间运行或在 生产环境 环境中运行的程序或代码中使用它们 . 此外,这里也有坏消息,似乎Google Play的帐户页面仅列出付费应用程序或特殊免费应用程序(尤其是OEM应用程序) . 我会尝试找一些时间深入挖掘其他应用程序 .
Interesting articles :
Pokemon tokens
Exploiting Google Chrome's OAuth2 Tokens
您可以在设备上获取所有已安装应用程序的软件包名称,然后从google play获取您在设备中找到的每个已安装软件包的信息,而无需访问用户帐户 . 有一些第三方或非官方的apis通过获取应用程序包名称获取谷歌播放应用程序的详细信息作为json . 例如:https://42matters.com/然后使用收到的每个包的信息来查找免费的包 .