首页 > 解决方案 > Google People API:列出连接时为空

问题描述

使用Google.Apis.PeopleService.v1时, people.connections.list 方法似乎有效(不抛出异常),但返回的对象始终将其所有字段设置为 null。以下是相关代码:

var scopes = new[] { PeopleServiceService.Scope.ContactsReadonly, PeopleServiceService.ScopeConstants.Contacts };
var credential = GoogleCredential.FromFile("./my-secrets.json")
                                 .CreateScoped(scopes);
var service = new PeopleServiceService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
});

var req = service.People.Connections.List("people/me");
req.PageSize = 2000;
req.RequestMaskIncludeField = "person.names";
req.Fields = "connections,totalItems,nextSyncToken";

var res = await req.ExecuteAsync();
Console.WriteLine(res.Connections.Count); // <-- NullReferenceException

my-secrets.json 是从 console.developers.google.com 下载的秘密文件。它看起来像这样:

{
  "type": "service_account",
  "project_id": "",
  "private_key_id": "",
  "private_key": "",
  "client_email": "",
  "client_id": "",
  "auth_uri": "",
  "token_uri": "",
  "auth_provider_x509_cert_url": "",
  "client_x509_cert_url": ""
}

有人知道我错过了什么吗?

标签: .netgoogle-apigoogle-api-dotnet-clientgoogle-people-api

解决方案


PeopleService API 需要用户凭据,而不是服务凭据。

在本地安装的应用程序(例如控制台应用程序)中,用于GoogleWebAuthorizationBroker.AuthorizeAsync(...)获取其中之一。

请求必须req.PersonFields按照此处所述进行设置:https ://developers.google.com/people/api/rest/v1/people.connections/list#query-parameters 例如req.PersonFields = "emailAddresses";

不需要设置req.Fieldsreq.RequestMaskIncludeField


推荐阅读