.Net - Google Play 下载销售报告
Posted
技术标签:
【中文标题】.Net - Google Play 下载销售报告【英文标题】:.Net - Google Play Download Sales Reports 【发布时间】:2021-04-05 19:48:57 【问题描述】:我有一个 .Net Core 应用程序试图从我的 Google Play 帐户下载最新的销售报告,以查看和跟踪销售统计数据。这些报告存储在由 Google Play 商店“拥有”/管理的 Google Cloud Storage 存储桶中。
我在 .Net 中找不到许多其他示例或相关问题,并且遇到了存储权限问题。
我在这里遵循相当有限的指南:https://support.google.com/googleplay/android-developer/answer/6135870#export 在“使用客户端库和服务帐户下载报告”下
第 1 步: 创建服务帐号 我为一个新项目创建了一个新的服务帐户,如下所示。如图所示,我还为所有存储对象授予了该服务帐户权限。
第 2 步:在您的 Play 控制台上添加服务帐号 我还邀请了这个新的服务帐户用户到我的游戏控制台,并授予它使用应用程序查看其信息和财务报告的权限。
第 3 步:使用 API 调用获取报告 我已经为服务用户创建并下载了一个 .JSON 密钥。
// Scope as specified in https://support.google.com/googleplay/android-developer/answer/6135870#export
string[] scopes = new string[] "https://www.googleapis.com/auth/devstorage.read_only" ;
// Import JSON credential
var credential = GoogleCredential.FromFile(Path.Combine(Environment.CurrentDirectory, "keys/googleplay.json")).CreateScoped(scopes);
// Bucket ID of Google Play Store - Found from reports page "Copy URL"
string bucketId = "pubsite_prod_5XXXXXXXXX2";
var storage = StorageClient.Create(credential);
var bucketObjects = storage.ListObjects(bucketId);
foreach (var bucketObject in bucketObjects)
Console.WriteLine(bucketObject.Name);
这会导致权限错误:
Google.Apis.Requests.RequestError\r\nsupportapp-googleplay@ascendant-nova-300105.iam.gserviceaccount.com 没有对 Google Cloud Storage 存储分区的 storage.objects.list 访问权限。 [403]\r\n错误 [\r\n\tMessage[supportapp-googleplay@ascendant-nova-300105.iam.gserviceaccount.com 没有 storage.objects.list 访问 Google Cloud Storage 存储桶的权限。
我创建的服务帐号拥有storage.objects.list
权限,并且也被邀请加入我的 Play 管理中心(如屏幕截图所示)。这是由 Google Play 而非我托管/拥有的存储桶。如何解决此权限问题以允许我的关联帐户通过 API 访问 Google Play 的销售报告?
【问题讨论】:
【参考方案1】:我早上回来,神奇的事情现在开始了。
在创建 Google 凭据时,我也改为使用 fromStream
而不是 fromFile
。
改变:
string[] scopes = new string[] "https://www.googleapis.com/auth/devstorage.read_only" ;
var credential = GoogleCredential.FromFile(Path.Combine(Environment.CurrentDirectory, "keys/googleplay.json")).CreateScoped(scopes);
收件人:
GoogleCredential credential;
using (var stream = new FileStream(Path.Combine(Environment.CurrentDirectory, "keys/googleplay.json"), FileMode.Open, FileAccess.Read))
credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
但是,这两个凭据创建系统都可以正常工作...也许 Google 花了 12 个小时来同步权限?希望这个例子可以在未来帮助其他人。
【讨论】:
嗨,布莱恩。您的回答和问题为我的项目提供了宝贵的信息,现在我期待在几个小时内我将能够下载报告!以上是关于.Net - Google Play 下载销售报告的主要内容,如果未能解决你的问题,请参考以下文章