我正在制作一个不需要用户帐户/登录并允许用户购买订阅的应用。我想使用 Google Play Developer API 来验证用户是否有购买/有效订阅。从所有文档中,我收集了以下步骤。
它们是否正确,你能回答其中的两个问题吗?
- 创建 Service Account在 Google API 控制台中。
- 保存给我的私钥(在哪里?肯定不在我的代码中/设备上,正如 this sample code 所建议的那样)
- 使用 Google APIs Client Library for Java使用私钥创建和签署 JWT(如何?the docs give me this,但这不是 Java 代码......我该怎么处理它?)
- 构造访问 token 请求,并获取对 API 的访问权限
- 应用程序现在可以发送 GET向 API 发出请求以查明是否 用户订阅了
- 访问 token 过期后,返回第 3 步。
另外,我有一个 Web 服务,虽然我对 Web 服务或 Web 服务编程一无所知...我只知道足够了解它可能需要在这里使用。
编辑:这些步骤不正确。请参阅下面的答案以了解正确的步骤。但是请注意,这仅适用于使用服务帐户(因为我不想要求用户必须明确允许 API 访问)
最佳答案
事实证明,我的步骤不正确。我花了几个星期才弄清楚这一点,而且似乎没有在其他任何地方记录下来。不客气:
在 Google APIs Console 中创建 Web 应用程序 帐户.将任何网站作为“重定向 URI”;没关系,因为您不会真正使用它。创建帐户时,您将获得一个客户端 ID 和客户端密码。
在您计算机上的浏览器中,转到
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type =offline&redirect_uri=[YOUR REDIRECT URI]&client_id=[YOUR CLIENT ID]
并在提示时允许访问。查看地址栏。您最初输入的 URI 的末尾将是您的刷新 token 。它看起来像
1/....
您将在下一步中需要此“代码”。刷新 token 永不过期。转至
https://accounts.google.com/o/oauth2/token?client_id=[YOUR CLIENT ID]&client_secret=[YOUR客户 secret ]&code=[上一步的代码]&grant_type=authorization_code&redirect_uri=[您的重定向 URI]
。您可以将结果值保存在程序中;除非明确撤销,否则它永远不会过期。 (@BrianWhite 插入的这一步——见评论) 确保您使用的是 POST。(由 Gintas 插入)在您的代码中,使用 BasicNameValuePairs
"grant_type","refresh_token"向
,https://accounts.google.com/o/oauth2/token
发送 HttpPost 请求"client_id",[YOUR CLIENT ID]
,"client_secret",[YOUR CLIENT SECRET]
,"refresh_token",[YOUR REFRESH TOKEN ]
。例如看 here .您将需要在单独的线程中执行此操作,可能使用 AsyncTask。这将返回一个 JSONObject。从返回的 JSONObject 中获取访问 token 。例如看 here .您将需要获取字符串“access_token”。访问 token 将在 1 小时后过期。
在您的代码中,向
https://www.googleapis.com/androidpublisher/v1/applications/[YOUR APP'S PACKAGE NAME]/subscriptions/[THE ID OF YOUR PUBLISHED SUBSCRIPTION] 发送 HttpGet 请求从您的 Android 开发者控制台]/purchases/[用户在购买订阅时收到的购买 token ]?accesstoken="[第 4 步的访问 token ]"
。例如看 here .
关于android - 我是否获得了验证用户的 Android 应用内订阅的正确步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427479/