我正在制作一个不需要用户帐户/登录的应用程序,并允许用户购买订阅。我想使用 Google Play 开发者 API 来验证用户是否已购买/有效订阅。从所有文档中,我收集了以下步骤。
它们是否正确?您能回答其中的两个问题吗?
- 创建一个服务帐号 https://developers.google.com/accounts/docs/OAuth2#serviceaccount在 Google API 控制台中。
- 保存给我的私钥(在哪里?肯定不是在我的代码/设备上)这个示例代码 https://code.google.com/p/google-api-java-client/wiki/OAuth2#Service_Accounts建议)
- Use 适用于 Java 的 Google API 客户端库 https://developers.google.com/accounts/docs/OAuth2ServiceAccount使用私钥创建并签署 JWT(如何?文档给了我这个 https://developers.google.com/accounts/docs/OAuth2ServiceAccount#jwtcontents,但这不是 Java 代码...我该怎么用它?)
- 构造访问令牌请求,并获取对 API 的访问权限
- 应用程序现在可以发送GET https://developers.google.com/android-publisher/v1/purchases/get向 API 请求以查明是否
用户有订阅
- 当访问令牌过期时,返回步骤 3。
另外,我有一个网络服务,尽管我对网络服务或网络服务编程一无所知……我只知道它可能有必要在这里使用。
编辑:这些步骤不正确。请参阅下面我的回答以了解正确的步骤。但是,请注意,这仅适用于使用服务帐户(因为我不想要求用户必须明确允许 API 访问)
事实证明,我的步骤不正确。我花了几周的时间才弄清楚这一点,而且似乎在其他地方没有记录到这一点。不客气:
创建一个Web应用程序帐户在Google API 控制台 https://code.google.com/apis/console/。将任何网站作为“重定向 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 末尾将是您的刷新令牌。看起来像1/....
您在下一步中将需要此“代码”。刷新令牌永远不会过期。
将此“代码”转换为“刷新令牌”,方法是:https://accounts.google.com/o/oauth2/token?client_id=[YOUR CLIENT ID]&client_secret=[YOUR CLIENT SECRET]&code=[CODE FROM PREVIOUS STEP]&grant_type=authorization_code&redirect_uri=[YOUR REDIRECT URI]
。您可以将结果值保存在您的程序中;除非明确撤销,否则它永远不会过期。 (此步骤由 @BrianWhite 插入 - 请参阅评论)
确保您使用的是 POST。(由 Gintas 插入)
在您的代码中,将 HttpPost 请求发送到https://accounts.google.com/o/oauth2/token
与 BasicNameValuePair"grant_type","refresh_token"
, "client_id",[YOUR CLIENT ID]
, "client_secret",[YOUR CLIENT SECRET]
, "refresh_token",[YOUR REFRESH TOKEN]
。举个例子看看here http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient。您需要在单独的线程中执行此操作,可能使用 AsyncTask。这将返回一个 JSONObject。
从返回的 JSONObject 获取访问令牌。举个例子看看here https://stackoverflow.com/questions/9605913/how-to-parse-json-in-android。您将需要获取字符串“access_token”。访问令牌将在 1 小时后过期。
在您的代码中,将 HttpGet 请求发送到https://www.googleapis.com/androidpublisher/v1/applications/[YOUR APP'S PACKAGE NAME]/subscriptions/[THE ID OF YOUR PUBLISHED SUBSCRIPTION FROM YOUR ANDROID DEVELOPER CONSOLE]/purchases/[THE PURCHASE TOKEN THE USER RECEIVES UPON PURCHASING THE SUBSCRIPTION]?accesstoken="[THE ACCESS TOKEN FROM STEP 4]"
。举个例子看看here https://stackoverflow.com/questions/10455831/http-get-request-in-android-2-3-3.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)