【问题标题】:Hitting Google Play Android Developer API through Google Cloud sdk通过 Google Cloud sdk 访问 Google Play Android Developer API
【发布时间】:2021-06-29 13:19:01
【问题描述】:

我正在尝试使用 Google Play Developer Publishing API 设置应用更新的优先级。 根据文档,我需要致电androidpublisher.googleapis.com 服务。 我在我的 Linux 设备中安装了 Cloud SDK 以进行服务调用。此外,我已经执行了所有步骤并且能够使用 gcloud init 初始化 sdk。

但是当我尝试使用以下命令执行Edits

curl -X POST -H "授权:承载 [oauth2_client_id]" -H“内容类型:应用程序/json”https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.xyz.abc/edits -d'{"id": "20","expiryTimeSeconds": "180}'

我得到以下错误-

{ “错误”:{ “代码”:401, "message": "请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效 身份验证凭证。看 https://developers.google.com/identity/sign-in/web/devconsole-project.", “状态”:“未经身份验证”} }

我已经在请求中提供了 oauth 客户端 ID!如何解决这个问题?如果需要 OAuth 2 访问令牌,我将如何使用 gcloud?

更新

根据答案,我在授权内发送了令牌并收到错误-

{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "status": "PERMISSION_DENIED"
  }
}

为什么还是报错?

更新2

现在我可以使用以下 URL 获取具有所需范围的代码/令牌(不确定它是否是访问令牌)- https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={your redirect url}&client_id={您的客户 ID})

以下是我执行但无法使其工作的步骤的详细信息-

1.打开终端并使用命令移动到google cloud sdk bin文件夹- cd /home/bhuvnesh.varma/Downloads/google-cloud-sdk/bin

2.运行命令 - gcloud init 选择配置、帐户和项目后,我收到消息- 您的 Google Cloud SDK 已配置好,可以使用了!

3.我在浏览器上点击此 URL 替换客户端 ID 并重定向 url- https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={your redirect url}&client_id={您的客户 ID})

我收到了消息-

"请复制此代码,切换到您的应用程序并将其粘贴到那里: 4/AX4XfWgUvVTE0Vknkw0R35rUOsNZ7IVmmCebiV3yyyKxP4c7y0jjZxxcF0TQg"

4.然后我使用生成的令牌/代码在终端上执行编辑命令-

curl -X POST -H "授权:承载 4/AX4XfWgUvVTE0Vknkw0R35rUOsNZ7IVmmCebiV3yyyKxP4c7y0jjZxxcF0TQg" -H“内容类型:应用程序/json”https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.xyz.abc/edits -d'{"id": "20","expiryTimeSeconds": "180}'

我仍然收到以下错误- { “错误”: { “代码”:401, "message": "请求具有无效的身份验证凭据。需要 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。请参阅 https://developers.google.com/identity/sign-in/web/devconsole-project.", “状态”:“未经身份验证” } }

【问题讨论】:

    标签: android gcloud google-cloud-sdk google-play-developer-api in-app-update


    【解决方案1】:

    Bearer 值应该是 OAuth 访问令牌。

    我不熟悉这个 API。它是否代表特定(个人)用户进行操作?推论:它是否需要用户特定的信息?如果是这样,您应该能够使用您用于gcloud auth login 的帐户进行身份验证。您可以使用以下方法获取它的访问令牌:

    TOKEN=$(gcloud auth print-access-token)
    
    curl ... --header "Authorization: Bearer ${TOKEN}" ...
    

    如果不是(这不起作用),您应该创建一个服务帐户来验证调用。此过程涉及更多,因为您还需要为该帐户创建一个密钥并使用它与gcloud auth activate-service-account 进行身份验证。然后您可以恢复上面的gcloud auth print-access-token

    注意 使用 Google 的客户端 SDK 与其服务进行交互几乎总是最佳做法。使用这些,为您处理身份验证 - 主要是透明的。

    【讨论】:

    • 嗨.. 这不是用户特定的 api,而是开发人员 api,用于设置应用更新的优先级,该更新用于强制使用或使用旧版应用向用户显示的灵活升级对话框
    • 使用 gcloud 时,我已经通过我的开发者帐户登录。然后我必须调用 gcloud auth login 才能再次登录,这看起来很奇怪,但我收到了 UNAUTHENTICated 错误。但是我会尝试!
    • 根据thisIf you don't want to access an API programmatically, you can access some of the same functionality using the tools in Cloud SDK or using the Google Cloud Console。我正在使用 Cloud SDK。那么,为什么要使用 Google 的客户端 SDK?
    • 谢谢。我尝试了你申请令牌的方式,这次得到了这个错误-` "error": { "code": 403, "message": "Request has enough authentication scopes.", "状态”:“PERMISSION_DENIED”} }`
    • 你能用APIs Explorer成功调用方法吗? developers.google.com/android-publisher/api-ref/rest/v3/edits/…
    猜你喜欢
    • 2014-05-08
    • 2014-03-08
    • 1970-01-01
    • 2015-06-07
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多