【问题标题】:Google People API: null when listing connectionsGoogle People API:列出连接时为空
【发布时间】:2019-10-19 11:09:06
【问题描述】:

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

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": ""
}

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

【问题讨论】:

  • 这里有同样的问题。我看到了名字,但电子邮件地址是空的。

标签: .net google-api google-api-dotnet-client google-people-api


【解决方案1】:

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

【讨论】:

  • 用户凭证可以用于批处理应用程序吗?据我了解,我需要使用服务凭据来避免向用户提示登录表单。
  • 您应该能够以交互方式请求用户凭据一次,确保您请求“离线访问”。这将在响应中包含一个“刷新令牌”,它允许您根据需要请求更多的用户凭据。请注意,用户可以取消此刷新令牌,并且刷新令牌可能因您无法控制的原因而被取消,因此您必须做好失败的准备。然后,您需要再次以交互方式向用户请求。
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多