2012-03-20 3 views
4

Я пытаюсь написать собственное приложение для доступа к календарю Google пользователей. Я пытаюсь использовать пример, что Google предоставил, чтобы получить проверку подлинности, но он никогда не кажется, срабатывает функция аутентификацииПроцесс аутентификации Google

private void Window_Initialized(object sender, EventArgs e) 
{ 
    var provider = new NativeApplicationClient(
      GoogleAuthenticationServer.Description); 
    provider.ClientIdentifier = "<My Client Id here>"; 
    provider.ClientSecret = "<My Client Secret here"; 

    var auth = new OAuth2Authenticator<NativeApplicationClient>(
     provider, (p) => GetAuthorization(provider)); 

    CalendarService service = new CalendarService(); 
    CalendarsResource.GetRequest cr = service.Calendars.Get("{primary}"); 

    if (cr.CalendarId != null) 
    { 
     Console.WriteLine("Fetching calendar"); 
     //Google.Apis.Calendar.v3.Data.Calendar c = 
      service.Calendars.Get("{primary}").Fetch(); 
    } 
    else 
    { 
     Console.WriteLine("Service not found"); 
    } 
} 

Вот код, который я использую для проверки подлинности. Я никогда не вижу публикации в консоли.

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg) 
{ 
    Console.WriteLine("Authorization Requested"); 

    IAuthorizationState state = new AuthorizationState(
     new[] { CalendarService.Scopes.Calendar.GetStringValue() }); 
    state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); 
    Uri authUri = arg.RequestUserAuthorization(state); 

    Process.Start(authUri.ToString()); 
    // Request authorization from the user and get the code 
    string authCode = Console.ReadLine(); 

    // Retrieve the access token by using the authorization code: 
    return arg.ProcessUserAuthorization(authCode, state); 
} 

Есть ли лучшие учебные пособия или я что-то не так?

+0

Удалось ли вам решить эту проблему, потому что я столкнулся с такой же проблемой. – Varun

ответ

0

Ознакомьтесь с новым docs. Вам нужно заменить

var auth = new OAuth2Authenticator<NativeApplicationClient>(
    provider, (p) => GetAuthorization(provider)); 

с

AuthenticatorFactory.GetInstance().RegisterAuthenticator(
    () => new OAuth2Authenticator(provider, GetAuthentication)); 

Как говорится в комментариях, когда вы звоните var service = new CalendarService(), ранее зарегистрированный аутентификатор автоматически будет вызываться.

+0

Какие ссылки нужно добавить, чтобы использовать это? Когда я добавляю этот кусок кода в visual studio, он говорит, что он не может найти фабрику, и для этого нет никакого решения. – joshwl2003

+0

Как и в примере, 'using System; используя System.Diagnostics; используя DotNetOpenAuth.OAuth2; использование Google.Apis.Authentication; используя Google.Apis.Authentication.OAuth2; используя Google.Apis.Authentication.OAuth2.DotNetOpenAuth; используя Google.Apis.Calendar.v3; используя Google.Apis.Calendar.v3.Data; используя Google.Apis.Util; ' Вы можете загрузить DLL по адресу http://code.google.com/p/google-api-dotnet-client/wiki/APIs#Calendar_API – bossylobster

+0

не работая при этом же проблема – Varun

2

Пример кода сломан. Чтобы служба использовала ваш аутентификатор, вам необходимо подключить ее. В примере нет связи между службой и аутентификатором. Создание службы, как это:

var service = new CalendarService(new BaseClientService.Initializer() 
{ 
    Authenticator = auth 
}; 

Посмотрите на https://code.google.com/p/google-api-dotnet-client/ для лучшей документации/рабочего кода.

0

Я думаю, что вышеуказанные способы связаны со старой версией DLL календаря Google. Кто-нибудь знает о документации новой версии календаря Google, то есть V 1.8.1.82. Google никогда не предоставляет хорошую документацию для .NET developer.s

Смежные вопросы