Я не смог использовать API контактов Google для получения контактной информации из учетной записи службы (без использования сеанса пользователя в реальном времени). Независимо от того, что я пытаюсь, я либо получаю исключение (например: Message = "Ошибка: \" invalid_request \ ", Описание: \" Недействительный адрес эл. Почты подписи. \ ", Uri: \" \ ""), или нет ошибка, но возвращено 0 контактов.API-интерфейс Google Contacts не удается получить контактную информацию через учетную запись службы
Я дважды проверил настройки в консоли администратора Google Apps и страницах управления доступом к API (включая получение этих параметров из технической поддержки Google App), но независимо от того, я не могу получить контакты для загрузки. Я также попробовал все примеры, которые я смог найти в разделе «Переполнение стека», но ни один из них, похоже, не исправил проблему.
Эти попытки были выполнены на C#/ASP.net, но я достаточно хорошо разбираюсь в других языках, чтобы я мог адаптировать любой пример, который может иметь кто-то, что работает.
Я надеюсь, что кто-то успешно использовал API контактов Google из учетной записи службы и будет готов поделиться тем, что они сделали для этого.
спасибо !!!
Вот пример попытки я сделал, что всегда приводит к исключения «invalid_request \»: «Invalid олицетворения ргп адрес электронной почты \».
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 = "[email protected]";
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;
}
Благодарим вас за идею. Я думаю, однако, что у меня, вероятно, уже была соответствующая область (https://www.google.com/m8/feeds), установленная в моей учетной записи службы. Вот скриншот о том, как я его настроил. Это что-то не так? –
Ну, я не мог поставить снимок экрана, но вот значения, которые у меня есть на странице «Доступ к безопасности -> Управление доступом к API». В столбце «Уполномоченные API-клиенты» у меня есть следующее: «STRINGGENERATEDFROMGOOGLEAPPSINTERFACE.apps.googleusercontent.com» (то же значение, которое я ввел в strClientID в предоставленном фрагменте кода); в One или More API Scopes у меня есть: https://www.google.com/m8/feeds. " Это что-то не так? –