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

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

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

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

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

5
Conrad de Wet 27 Окт 2015 в 11:21

2 ответа

Лучший ответ

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

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

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

Установить пакет Google.Apis.Auth

Старая клиентская библиотека Nuget для контактов:

Установочный пакет Google.GData.Contacts

Код

 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();
    }
}

Учебное пособие можно найти здесь

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

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

Отсюда вы получаете идентификатор клиента и секрет клиента, используемые в приведенном выше коде.

8
DaImTo 27 Окт 2015 в 11:23

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

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

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

0
Nick 27 Окт 2015 в 08:48