Google通讯录API无法通过服务帐户检索联系信息

时间:2015-12-12 19:02:45

标签: google-app-engine google-contacts google-shared-contacts

我使用Google Contacts API从服务帐户(不使用实时用户会话)检索联系人信息时未成功。无论我尝试什么,我都会得到一个例外(例如:Message ="错误:\" invalid_request \",描述:\"模仿电子邮件地址无效。\& #34;,Uri:\" \""),或者没有错误,但返回了0个联系人。

我仔细检查了Google Apps管理控制台和管理API客户端访问页面中的设置(包括从Google App技术支持部门获取这些设置的验证),但无论如何,我都无法加载联系人。我也尝试了所有可以在" Stack Overflow上找到的例子,"但似乎没有一个能够纠正这个问题。

这些尝试一直在C#/ ASP.net,但我对其他语言的熟悉程度,我应该能够适应任何人可能有效的例子。

我希望有人能够成功地使用服务帐户中的Google通讯录API,并且愿意分享他们为实现这一目标所做的代码。

谢谢!!!

以下是我尝试的一个示例,它总是导致异常" invalid_request \":"无效的模拟prn电子邮件地址。\"

    private void TestLoadContacts()
    {
        try
        {
            string strClientID = "STRINGGENERATEDFROMGOOGLEAPPSINTERFACE.apps.googleusercontent.com";
            var credential = GenerateCred(new[] { "https://www.google.com/m8/feeds" }, strClientID);

            // Get the token for this scope and user
            if (credential.RequestAccessTokenAsync(new CancellationToken()).Result)
            {
                // use the token to initalize the request
                var rs = new RequestSettings("Google Sync")
                {
                    OAuth2Parameters = new OAuth2Parameters()
                    {
                        AccessToken = credential.Token.AccessToken
                    }
                };

                var request = new ContactsRequest(rs);
                Feed<Contact> f = request.GetContacts();
                foreach (var c in f.Entries)
                {
                    //process each contact
                }
            }
        }
        catch (Exception ex)
        {
            string strError = ex.Message;
        }
    }

    private static ServiceAccountCredential GenerateCred(IEnumerable<string> scopes, string delegationUser)
    {
        string strServiceAccountEmail = "account-1@MyGoogleAccount-1139.iam.gserviceaccount.com";
        X509Certificate2 certificate = new X509Certificate2(@"C:\MyP12s\MyGoogleAccount-9da1a08f4eef.p12",
            "notasecret", X509KeyStorageFlags.Exportable);

        var credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(strServiceAccountEmail)
            {
                Scopes = scopes,
                User = delegationUser
            }.FromCertificate(certificate));
        return credential;
    }

1 个答案:

答案 0 :(得分:0)

应轻松完成检索联系人(如Google Contacts API documentation所述)

使用服务帐户本身的问题是否更多?如果是这样,您将需要启用域范围的服务帐户委派(可以找到更多信息here;这也与上面的参考链接)。基本上,您需要将您将使用的特定范围添加到授权服务帐户。

希望这有帮助!