2010-10-23 1 views
2

Я тоже создаю простое приложение, которое должно получить доступ к календарю, который находится в моей учетной записи Google Apps. Но у меня проблемы с аутентификацией. Я пробовал следующий код, но он не работает:Доступ к календарю GData из аккаунта Google Apps?

Service service = new Service("<appname>"); 
service.setUserCredentials("<email>", "<password>"); 

CalendarEntry entry = (CalendarEntry)service.Get("<eventUrl>"); 

Как вы это примените к Google Apps? Есть ли другой тип аутентификации, который я должен использовать для приложений Google?


Update:

Разблокирование капчу решить мою проблему с получением корма. Теперь я попал в следующую стену: обновляю событие.

entry.Title.Text = "Foo"; 
entry.Update(); 

Дает мне исключение GDataRequestException: «Невозможно обновить запись только для чтения».

Im используя частный календарь XML-адрес, который я получил под kalendarsettings: https://www.google.com/calendar/feeds/ _% 40group.calendar.google.com/линии частного/основной

+0

Для обновления, попробуйте изменить/основной канал в/полный, а затем снова попытаться сделать обновление - в этом коде работал на меня. – bkaid

ответ

2

Я бы рекомендовал использовать Fiddler, чтобы увидеть, что HTTP ответ вы получаете назад от Google. Когда я запустил ваш код в своей учетной записи Google Apps, я возвращал ответ «Ошибка = CaptchaRequired». Это потребовало, чтобы я пошел на https://www.google.com/a/yourgoogleappdomain.com/UnlockCaptcha (очевидно, заменив ваш домен). После этого я смог правильно подключиться. Возможно, вы получаете другой код ошибки, поэтому проверьте это и разместите здесь. У вас может быть неверный пароль или неверный URL-адрес, или эта функция отключена вашим администратором приложений Google. Вот мой пример кода:

var calendarService = new CalendarService("company-app-version"); 
calendarService.setUserCredentials("<email>", "<password>"); 
var eventQuery = new EventQuery("http://www.google.com/calendar/feeds/user%40domain.com/private/full"); 
var eventFeed = calendarService.Query(eventQuery); 
foreach (var atomEntry in eventFeed.Entries) 
{ 
    Console.WriteLine(atomEntry.Title.Text); 
} 

Убедитесь, чтобы заменить адрес электронной почты, пароль и адрес электронной почты внутри URL (URL закодировать знак @ тоже).

+1

ОК спасибо, это работает, но знаете ли вы, как обновлять записи? Не могу заставить его работать. –

+0

Я. Я не могу заставить его работать и для обновления. –

0
using Google.GData.Client; 
    public bool ValidateGoogleAccount(string login, string password) 
    { 
     try 
     { 
      Service bloggerService = new Service("blogger", "App-Name"); 
      bloggerService.Credentials = new GDataCredentials(login, password); 
      string token = bloggerService.QueryAuthenticationToken(); 

      if (token != null) 
       return true; 
      else 
       return false; 
     } 
     catch (Google.GData.Client.InvalidCredentialsException) 
     { 
      return false; 
     } 
    }