C#应用程序 - 阅读Google通讯录

时间:2015-10-27 08:21:07

标签: c# google-oauth gdata google-contacts

由于Google停止了对旧版Auth的支持,现在我们必须使用oAuth 2,我们的简单桌面应用程序无法再从我的Google帐户中读取联系人。

很好 - 我理解这一点,但是这个新的oAuth 2非常复杂......我不是从开发者的角度谈论。从我在线阅读。我们现在必须让我们的客户跳过大量的箍,以便我们的简单应用程序读取存储在他们的Google邮件/联系人中的联系人。

我的iPhone似乎只能使用我一年前输入的典型电子邮件和密码来正常同步联系人。他们如何让它发挥作用?然而,通过我简单的桌面应用程序,客户端必须在谷歌开发者网站上搜索并使用API​​设置等。我是开发人员,我很困惑! - 你能想象我的客户会经历什么......它不能复杂。

有没有人可以给我简单的1,2,3来让C#桌面应用程序关闭并从特定的Gmail帐户获取联系人(只读)... 最少< / strong>摆弄的数量(对于Gmail帐户的所有者)。

我在应用程序中做了所有艰苦的工作 - 我只是不希望客户花一小时授权和创建API并在开发者网站中点击(他/她不是开发人员)。

2 个答案:

答案 0 :(得分:5)

您遇到的主要问题是联系人是旧的Gdata API。可以将Oauth2与Gdata库一起使用,但不是pretty。就个人而言,我喜欢破解一些东西。我将Current .net客户端库与旧的Gdata客户端库一起使用。

Nuget用于身份验证的新客户端库:

不是100%确定这是你需要的唯一一个让我知道如果它不起作用我们可以找到它。您基本上需要Google.apis.auth.oauth2google 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();
    }
}

可以找到教程here

Google开发者控制台

访问Google API的所有应用都必须在Google developers console上注册。访问Google的应用程序是运行代码的注册用户,不需要执行此步骤。您作为开发人员必须注册它。

通过此,您将获得上述代码中使用的客户端ID和客户端密钥。

答案 1 :(得分:0)

我已经做到了这一点,但是就像你说的那样,有点模糊不清。

我认为您可以在Google开发者控制台中注册并设置项目并生成服务帐户。然后,客户端需要以Google应用管理员身份登录HERE,并使用开发人员控制台生成的服务帐户名称和您需要访问的API范围填写clientID字段。

最后,我只是以客户端的身份登录到他们的管理面板并为他们设置了它。没有简单的方法没有客户也与谷歌应用程序转售商协助。我设法把它想象成一个有很多谷歌搜索的开发者。