【问题标题】:.Net - Google Play Download Sales Reports.Net - Google Play 下载销售报告
【发布时间】: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 的销售报告?

【问题讨论】:

    标签: google-api google-api-dotnet-client google-play-developer-api


    【解决方案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 个小时来同步权限?希望这个例子可以在未来帮助其他人。

    【讨论】:

    • 嗨,布莱恩。您的回答和问题为我的项目提供了宝贵的信息,现在我期待在几个小时内我将能够下载报告!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多