Google People API: null при перечислении подключений

При использовании 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": ""
}

Кто-нибудь знает, что мне не хватает?


person Greg    schedule 19.10.2019    source источник
comment
Здесь та же проблема. Я вижу имя, но адрес электронной почты пуст.   -  person Nathan B    schedule 29.05.2021


Ответы (1)


API PeopleService требует учетных данных пользователя, а не учетных данных службы.

В локально установленном приложении (например, консольном приложении) используйте GoogleWebAuthorizationBroker.AuthorizeAsync(...), чтобы получить одно из них.

Запрос должен установить req.PersonFields, как описано здесь: https://developers.google.com/people/api/rest/v1/people.connections/list#query-parameters Например req.PersonFields = "emailAddresses";

Нет необходимости устанавливать req.Fields или req.RequestMaskIncludeField.

person Chris    schedule 21.10.2019
comment
Можно ли использовать учетные данные пользователя для пакетного приложения? Насколько я понял, мне нужно было использовать служебные данные, чтобы не запрашивать пользователю форму входа. - person Greg; 27.10.2019
comment
Вы должны иметь возможность один раз в интерактивном режиме запросить учетные данные пользователя, убедившись, что вы запрашиваете автономный доступ. Это будет включать в ответ токен обновления, который позволяет вам запрашивать дополнительные учетные данные пользователя по мере необходимости. Обратите внимание, что пользователь может отменить этот токен обновления, а токен обновления может быть отменен по причинам, не зависящим от вас, поэтому вы должны быть готовы к его сбою. Затем вам нужно будет снова запросить его у пользователя в интерактивном режиме. - person Chris; 29.10.2019