.Net - Google 播放 下载销售报告

.Net - Google Play Download Sales Reports

我有一个 .Net Core 应用程序试图从我的 Google Play 帐户下载最新的销售报告以查看和跟踪销售统计数据。这些报告存储在 Google Play 商店“拥有”/管理的 Google 云存储桶中。

我一直无法在 .Net 中找到许多其他示例或相关问题,并且一直遇到存储权限问题。

我在这里遵循相当有限的指南:https://support.google.com/googleplay/android-developer/answer/6135870#export 在“使用客户端库和服务帐户下载报告”下

第 1 步:创建服务帐户 我为新项目创建了一个新服务帐户,如下所示。如图所示,我还授予该服务帐户对所有存储对象的权限。

第 2 步: 在您的游戏机上添加服务帐户 我还邀请了这个新的服务帐户用户到我的游戏控制台,并授予它访问该应用程序的权限,以查看其信息和财务报告。

步骤 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 does not have storage.objects.list access to the Google Cloud Storage bucket. [403]\r\nErrors [\r\n\tMessage[supportapp-googleplay@ascendant-nova-300105.iam.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket.

我创建的服务帐户拥有 storage.objects.list 权限,并已受邀加入我的 Play 管理中心(如屏幕截图所示)。这是一个存储桶 hosted/owned 由 Google 播放而不是我。如何解决此权限问题以允许我的关联帐户通过 API 访问 Google Play 的销售报告?

我早上回来了,神奇的是现在一切正常了。 在创建 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 个小时?希望这个例子可以帮助将来的其他人。