API контактов Google не удается получить контактную информацию через учетную запись службы
Мне не удалось использовать API контактов Google для получения контактной информации из учетной записи службы (не используя сеанс реального времени пользователя). Независимо от того, что я пытаюсь, я получаю исключение (например: Сообщение = "Ошибка:\"invalid_request\", Описание: \" Недопустимый олицетворение prn адрес электронной почты.\", Uri:\"\""), или нет ошибка, но 0 контактов возвращено.
Я дважды проверил настройки в консоли администратора Служб Google и на страницах управления клиентским доступом API (включая проверку этих настроек в службе технической поддержки Google App), но в любом случае не могу загрузить контакты для загрузки. Я также попробовал все примеры, которые я мог найти в "Переполнении стека", но ни один из них, похоже, не исправил проблему.
Эти попытки были на C# / ASP.net, но я достаточно разбираюсь в других языках, чтобы я мог адаптировать любой пример, который кто-то может иметь, который работает.
Я надеюсь, что кто-то успешно использовал API контактов Google из учетной записи службы и хотел бы поделиться кодом, который они сделали для этого.
Спасибо!!!
Вот пример моей попытки, которая всегда приводит к исключению "invalid_request\": "Недопустимый олицетворение prn-адреса электронной почты. \"
private void TestLoadContacts()
{
try
{
string strClientID = "STRINGGENERATEDFROMGOOGLEAPPSINTERFACE.apps.googleusercontent.com";
var credential = GenerateCred(new[] { "https://www.google.com/m8/feeds" }, strClientID);
// Get the token for this scope and user
if (credential.RequestAccessTokenAsync(new CancellationToken()).Result)
{
// use the token to initalize the request
var rs = new RequestSettings("Google Sync")
{
OAuth2Parameters = new OAuth2Parameters()
{
AccessToken = credential.Token.AccessToken
}
};
var request = new ContactsRequest(rs);
Feed<Contact> f = request.GetContacts();
foreach (var c in f.Entries)
{
//process each contact
}
}
}
catch (Exception ex)
{
string strError = ex.Message;
}
}
private static ServiceAccountCredential GenerateCred(IEnumerable<string> scopes, string delegationUser)
{
string strServiceAccountEmail = "account-1@MyGoogleAccount-1139.iam.gserviceaccount.com";
X509Certificate2 certificate = new X509Certificate2(@"C:\MyP12s\MyGoogleAccount-9da1a08f4eef.p12",
"notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(strServiceAccountEmail)
{
Scopes = scopes,
User = delegationUser
}.FromCertificate(certificate));
return credential;
}
1 ответ
Извлечение контактов должно быть легко выполнено (как указано в документации по API контактов Google)
Вопрос больше в использовании самих учетных записей? Если это так, вам нужно включить делегирование на весь домен учетной записи службы (дополнительную информацию можно найти здесь; ссылка также указана выше). В основном вам нужно добавить определенные области, которые вы будете использовать, в авторизованную учетную запись службы.
Надеюсь это поможет!