启用通知/观看 Google Play 存储桶以编程方式下载报告

Posted

技术标签:

【中文标题】启用通知/观看 Google Play 存储桶以编程方式下载报告【英文标题】:Enable notifications / Watch a Google Play bucket to programatically download reports 【发布时间】:2015-05-05 12:14:15 【问题描述】:

使用gsutil 工具有很多关于how to programatically download Google Play reports 的新信息。 Google Play 使用存储桶来存储这些报告,就像 Google Cloud Storage 一样。我已经能够毫无问题地从 Google Play 存储桶下载报告。例如:

gsutil cp gs://pubsite_prod_rev_<my project id>/stats/installs/installs_<my app id>_201502_overview.csv .

另一方面,gsutil 为watch Google Cloud Storage buckets 提供了一项功能,因此您可以在每次存储桶中的对象发生更改时收到通知 (gsutil notification watchbucket)。我还可以在我自己的 Google Cloud 项目中创建的存储桶中启用通知。

问题是,我无法在我的 Google Play 存储桶中启用通知。甚至可能吗?调用时出现AccessDeniedException: 403 Forbidden 错误:

gsutil notification watchbucket -i playnotif -t sometoken https://notif.mydomain.com gs://pubsite_prod_rev_<my project id>
我已遵循here 的所有步骤,特别注意与identifying a domain to receive notifications 有关的步骤。 如上所述,我已经能够完成我需要的所有过程,但使用的是我自己在 Google Cloud 中的存储桶,而不是 Google Play 存储桶。 Google Play 项目已链接到 Google Cloud 项目。当我启用 Google Play API 访问(Google Play 开发者控制台 -> 配置(左侧菜单)-> API 访问)时,它会自动完成。 Google Play 项目所有者和我自己的 Google Cloud 项目所有者相同。 此所有者已成功注册并验证了用于接收通知的域(按照示例,我验证了两个以防万一:notif.mydomain.commydomain.com,在 Google Webmaster Tools 中使用 https) 这些域也已在Google Developers Console 中列入白名单(左侧栏 -> APIs & Auth -> Push)。 我已使用我创建的项目所有者帐户或服务帐户在我自己的 Google Cloud 存储桶中成功启用通知。我已经尝试在 Google Play 存储桶中同时使用(所有者和相应的服务帐户),但均未成功。

任何想法将不胜感激。谢谢!

编辑:

我已经按照here 的步骤进行操作,但使用了不同的程序(如下面的评论中所述)。按照 Nikita 的建议,我尝试使用相同的步骤执行这些步骤。

所以我将 gsutil(通过 gcloud)配置为使用所有者帐户:

gcloud config set account owner-of-play-store-project@gmail.com

在尝试授予对服务帐户的完全访问权限时,我遇到了以下错误:

$ gsutil acl ch -u my-play-store-service-account@developer.gserviceaccount.com:FC gs://pubsite_prod_rev_my-bucket-id
CommandException: Failed to set acl for gs://pubsite_prod_rev_my-bucket-id/. Please ensure you have OWNER-role access to this resource.

所以,我尝试列出此存储桶的默认 ACL,结果发现:

$ gsutil defacl get gs://pubsite_prod_rev_my-bucket-id
No default object ACL present for gs://pubsite_prod_rev_my-bucket-id. This could occur if the default object ACL is private, in which case objects created in this bucket will be readable only by their creators. It could also mean you do not have OWNER permission on gs://pubsite_prod_rev_my-bucket-id and therefore do not have permission to read the default object ACL.
[]

结论:

这真的让我觉得,即使使用项目所有者帐户,该帐户在 Play 商店存储桶中也没有 OWNER 角色。这意味着 ACL 无法修改,甚至无法列出,也无法启用通知,因为遗憾的是,我们并不真正拥有存储桶。

【问题讨论】:

你可以试试gsutil到use a Service Account然后跟着Client App Sample去排除域识别问题的可能性吗? @NikitaUchaev 我确实遵循了这些步骤,尽管每个步骤使用了不同的过程(例如,我使用 POSTMAN 而不是 curl,通过 Google Cloud Console 授予对服务帐户的完全访问权限而不是使用 gsutil ,确认的通知可以查看 apache 日志等)。在创建自己的存储桶时,我按照这些步骤成功了。如果我对 Play Store 存储桶(及其相应的服务帐户)执行相同的步骤,它将失败。尽管如此,尝试按照您的示例,我发现尝试使用 gsutil 设置 ACL 时出现有用的错误。已编辑帖子中的详细信息。谢谢! 是的,根据“gsutil defacl get”返回的消息,您似乎没有存储桶的所有者权限,因此您无法设置监视。 【参考方案1】:

目前,你不能。 Google Play 拥有这些存储桶,最终用户没有订阅 Object Change Notifications 所需的存储桶 FULL_CONTROL 访问权限。

【讨论】:

以上是关于启用通知/观看 Google Play 存储桶以编程方式下载报告的主要内容,如果未能解决你的问题,请参考以下文章

如何启用 Google Play 应用签名

如何使用“google.gcm”服务?

配置GCS存储桶以允许公共写入但不允许覆盖

我无法在 Google Play 商店控制台上上传手机和观看 apk

Google 登录不适用于 Play 游戏服务启用,但无需启用

Android 推送通知:Google Play 服务如何连接到 Google Server