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



我使用Google Contacts API从服务帐户检索联系人信息失败(未使用实时用户会话)。无论我尝试什么,我都会收到异常(例如:消息="错误:\"invalid_request\",描述:\"无效模拟prn电子邮件地址。\",Uri:\"\"),或者没有错误,但返回了0个联系人。

我已经在Google应用程序管理控制台和管理API客户端访问页面中双击了设置(包括从Google应用程序技术支持处获得这些设置的验证),但无论如何,我都无法加载联系人。我也尝试了在"堆栈溢出"中可以找到的所有例子,但似乎没有一个能纠正这个问题。

这些尝试是在C#/ASP.net中进行的,但我对其他语言足够熟悉,我应该能够适应任何可能有用的例子。

我希望有人已经成功地从一个服务帐户使用谷歌联系人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:MyP12sMyGoogleAccount-9da1a08f4eef.p12",
            "notasecret", X509KeyStorageFlags.Exportable);
        var credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(strServiceAccountEmail)
            {
                Scopes = scopes,
                User = delegationUser
            }.FromCertificate(certificate));
        return credential;
    }

检索联系人应该很容易(如Google contacts API文档中所述)

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

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新