2015-10-27 4 views
2

Поскольку Google прекратила поддержку своего старого Auth, и теперь мы должны использовать oAuth 2, наше простое настольное приложение больше не может читать контакты из моей учетной записи google.Приложение C# - ознакомьтесь с контактами Google

Прекрасно - я понимаю это, однако этот новый oAuth 2 необычайно сложен ... и я не говорю о перспективах разработчиков. Из того, что я читаю в Интернете. Теперь нам нужно заставить наших клиентов перепрыгнуть через множество обручей, чтобы наше простое приложение могло читать контакты, хранящиеся в их почтовых ящиках/контактах Google.

Мой iPhone, похоже, способен синхронизировать контакты только с типичной электронной почтой и паролем, которые я ввел около года назад. Как они заставляют его работать? и все же с моим простым настольным приложением, клиент должен рыться на сайтах разработчиков Google и с настройками API и т. д. Я разработчик, и я смущен !! - Можете ли вы представить, что мой клиент собирается пройти ... это не может быть так сложно.

Есть ли кто-нибудь, кто может дать мне простой 1,2,3, чтобы получить настольное приложение C#, чтобы уйти и получить контакты (только для чтения) из конкретной учетной записи Gmail ... с наименьшее количество (для владельца учетной записи Gmail).

Я делаю всю тяжелую работу в приложении - я просто не хочу, чтобы клиент должен был тратить час на авторизацию и создание API и щелчок на сайте разработчика (он НЕ является разработчиком).

+0

Вы понимаете, что они должны аутентифицировать ваше приложение? – DaImTo

+0

https://github.com/google/google-gdata/blob/b716bbcf9d35148f42d5b7bbf16fa6b4c34c688d/clients/cs/samples/oauth2_sample/oauth2demo.cs – DaImTo

+0

Я полностью понимаю, что должен быть какой-то «тик» или «включить» или что-то, что клиент должен сделать - я полностью понимаю это. Но из того, что я вижу сейчас ... есть способ много «остановить» действия, мои клиенты просто сдались и не потрудились. Они обвиняли нас в том, что они усложнили ситуацию. –

ответ

4

Основная проблема, с которой вы сталкиваетесь, заключается в том, что контакты - это старый API Gdata. Oauth2 можно использовать с библиотекой Gdata, но не с pretty. Лично мне нравится немного взламывать вещи. Я использую текущую клиентскую библиотеку .net со старой клиентской библиотекой Gdata.

Клиентская библиотека NuGet Новое для аутентификации:

не 100% уверен, что это только один вам нужно, дайте мне знать, если он не работает, мы можем найти его. Вам в основном нужны Google.apis.auth.oauth2 и google apis.util.store.

Install-Package Google.Apis.Auth

NuGet старый клиент библиотеки для контактов:

Install-Package Google.GData.Контакты

Код

using Google.Apis.Auth.OAuth2; 
using Google.Apis.Util.Store; 
using Google.Contacts; 
using Google.GData.Client; 
using System; 
using System.Threading; 

public static void auth() 
{ 

    string clientId = "xxxxxx.apps.googleusercontent.com"; 
    string clientSecret = "xxxxx"; 


    string[] scopes = new string[] { "https://www.googleapis.com/auth/contacts.readonly" };  // view your basic profile info. 
    try 
    { 
     // Use the current Google .net client library to get the Oauth2 stuff. 
     UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret } 
                        , scopes 
                        , "test" 
                        , CancellationToken.None 
                        , new FileDataStore("test")).Result; 

     // Translate the Oauth permissions to something the old client libray can read 
     OAuth2Parameters parameters = new OAuth2Parameters(); 
     parameters.AccessToken = credential.Token.AccessToken; 
     parameters.RefreshToken = credential.Token.RefreshToken; 
     RunContactsSample(parameters); 
     Console.ReadLine(); 
    } 
    catch (Exception ex) 
    { 

     Console.ReadLine(); 

    } 
    Console.ReadLine(); 


} 

/// <summary> 
/// Send authorized queries to a Request-based library 
/// </summary> 
/// <param name="service"></param> 
private static void RunContactsSample(OAuth2Parameters parameters) 
{ 
    try 
    { 
     RequestSettings settings = new RequestSettings("Google contacts tutorial", parameters); 
     ContactsRequest cr = new ContactsRequest(settings); 
     Feed<Contact> f = cr.GetContacts(); 
     foreach (Contact c in f.Entries) 
     { 
      Console.WriteLine(c.Name.FullName); 
     } 
    } 
    catch (Exception a) 
    { 
     Console.WriteLine("A Google Apps error occurred."); 
     Console.WriteLine(); 
    } 
} 

Учебник можно найти here

консоли разработчика Google

Все приложения Доступ к Google APIs должны быть зарегистрированы на Google developers console. Это приложение, к которому обращается Google, зарегистрированным пользователям, использующим код, не нужно делать этот шаг. Его вы как разработчик, который должен его зарегистрировать.

С этого момента вы получаете идентификатор клиента и клиентский секрет, используемые в приведенном выше коде.

+0

Да, это все очень хорошо и все, и я видел кучу кода вроде этого ... но clientId и секрет - это что? кое-что, что я должен был пойти в секцию разработчиков, чтобы идти и генерировать. Я собираюсь повторить это ... мой клиент НЕ является разработчиком! или я полностью недопонимаю это? –

+0

Вы, как разработчик, должны создавать клиентский идентификатор и секрет клиента. Это не то, что нужно делать вашим пользователям. Это приложение специфично. На этом шаге нет никакого способа, чтобы все приложения, обращающиеся к google apis, должны были быть зарегистрированы на консоли разработчиков Google. Это может помочь http://www.daimto.com/registering-a-project-with-google/ – DaImTo

+0

Итак, я делаю проект в Google API и получаю clientid и т. Д. Мы делаем это как разработчики. Отлично. Теперь мой клиент приходит, где он уточняет свои данные, как мы получаем HIS-контакты против контактов других лиц? –

0

Я сделал это, но все это немного размыто, как вы говорите, много возиться.

Я думаю, что вы можете зарегистрировать и настроить проект в консоли разработчика Google и создать учетную запись службы. Затем клиенту необходимо будет войти в HERE в качестве администратора приложения Google и заполнить поле clientID именем вашей учетной записи службы, созданной консолью разработчика, и областью API, к которой вам нужен доступ.

В конце концов, я просто вошел в систему как клиент на свою панель администратора и установил для них. Нет простого способа об этом, если клиент не привлечет реселлера приложений Google для оказания помощи. Мне удалось понять это как разработчика с большим количеством поисковых запросов.

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