android - 我是否获得了验证用户的 Android 应用内订阅的正确步骤?

标签 android service google-api google-play subscription

我正在制作一个不需要用户帐户/登录并允许用户购买订阅的应用。我想使用 Google Play Developer API 来验证用户是否有购买/有效订阅。从所有文档中,我收集了以下步骤。

它们是否正确,你能回答其中的两个问题吗?

  1. 创建 Service Account在 Google API 控制台中。
  2. 保存给我的私钥(在哪里?肯定不在我的代码中/设备上,正如 this sample code 所建议的那样)
  3. 使用 Google APIs Client Library for Java使用私钥创建和签署 JWT(如何?the docs give me this,但这不是 Java 代码......我该怎么处理它?)
  4. 构造访问 token 请求,并获取对 API 的访问权限
  5. 应用程序现在可以发送 GET向 API 发出请求以查明是否 用户订阅了
  6. 访问 token 过期后,返回第 3 步。

另外,我有一个 Web 服务,虽然我对 Web 服务或 Web 服务编程一无所知...我只知道足够了解它可能需要在这里使用。

编辑:这些步骤不正确。请参阅下面的答案以了解正确的步骤。但是请注意,这仅适用于使用服务帐户(因为我不想要求用户必须明确允许 API 访问)

最佳答案

事实证明,我的步骤不正确。我花了几个星期才弄清楚这一点,而且似乎没有在其他任何地方记录下来。不客气:

  1. Google APIs Console 中创建 Web 应用程序 帐户.将任何网站作为“重定向 URI”;没关系,因为您不会真正使用它。创建帐户时,您将获得一个客户端 ID 和客户端密码。

  2. 在您计算机上的浏览器中,转到 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] 并在提示时允许访问。

  3. 查看地址栏。您最初输入的 URI 的末尾将是您的刷新 token 。它看起来像 1/.... 您将在下一步中需要此“代码”。刷新 token 永不过期。

  4. 转至 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 插入)

  5. 在您的代码中,使用 BasicNameValuePairs "grant_type","re​​fresh_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。

  6. 从返回的 JSONObject 中获取访问 token 。例如看 here .您将需要获取字符串“access_token”。访问 token 将在 1 小时后过期。

  7. 在您的代码中,向 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/

相关文章:

php - "unauthorized_client"使用 PHP 客户端通过 Google API 客户端刷新 token 时出错?

google-api - Google 我的商家 API 是否有新的范围来取代 plus.business.manage

android - StreetViewPanorama.getLocation 始终返回 null。

android - Xamarin 安卓 : Cannot resolve GoogleSignIn and GoogleSignInClient

java - 定义多色渐变

java - 在拨号器应用程序顶部检测来电并在后台打开服务

android - 为什么我无法收到 POWER CONNECTED 操作?

android - 升级到Android 8.1后startForeground失败

android - 如何在android服务中录制视频时实时检测视频帧中的人脸?

python - 用 Python 清空 Google Drive Trash