【问题标题】:Facebook C# SDK trouble getting me/accountsFacebook C# SDK 无法获取我/帐户
【发布时间】:2012-04-25 02:18:05
【问题描述】:

我正在尝试编写一个 Windows 服务,该服务将在运行时将结果发布到我的 Facebook 页面。

我刚刚下载了 Facebook C# SDK v6.0.10.0 并在 .Net 4.0 中编写了 windows 应用程序

我创建了一个 facebook 应用程序帐户并获得了所需的 AppID 和密码。

最终目标是将这个 Windows 服务作为页面而不是应用程序用户发布在我的 facebook 页面墙上。

我在为我的 Facebook 应用程序获取帐户时不断收到错误消息。

string strAppID = "my app api id";
string strSecret = "my app secret code";
Facebook.FacebookClient fbClient = new Facebook.FacebookClient();
fbClient.AppId = strAppID;
fbClient.AppSecret = strSecret;
dynamic ac = fbClient.Get("oauth/access_token", new
{
    client_id = strAppID,
    client_secret = strSecret,
    grant_type = "client_credentials"
});

string strAccessToken = String.Empty;
strAccessToken = ac.access_token;
if (!String.IsNullOrEmpty(strAccessToken))
{

    fbClient = new Facebook.FacebookClient(strAccessToken);
    fbClient.AccessToken = strAccessToken;
    fbClient.AppId = strAppID;
    fbClient.AppSecret = strSecret;

    //Here is where it is bombing
    dynamic fbAccounts = fbClient.Get("/me/accounts");

    fbClient = new Facebook.FacebookClient(strAccessToken);
    fbClient.AccessToken = strAccessToken;
    fbClient.AppId = strAppID;
    fbClient.AppSecret = strSecret;

    dynamic me = fbClient.Get("**Name of the facebook page I am trying to post to**");

    string strPageID = String.Empty;
    strPageID = me.id;

    string strPageAccessToken = String.Empty;

    //Loop over the accounts looking for the ID that matches your destination ID (Fan Page ID)
    foreach (dynamic account in fbAccounts.data)
    {
        if (account.id == strPageID)
        {
            //When you find it, grab the associated access token and put it in the Dictionary to pass in the FB Post, then break out.
            strPageAccessToken = account.access_token;
            break;
        }
    }


    try
    {
        fbClient.AccessToken = strPageAccessToken;
        var args = new Dictionary<string, object>();
        args["message"] = "Testing 123";
        fbClient.Post("/" + strPageID + "/feed", args);

    }
    catch (Facebook.FacebookOAuthException ex)
    {
        // oauth exception occurred
    }
    catch (Facebook.FacebookApiLimitException ex)
    {
        // api limit exception occurred.
    }
    catch (Facebook.FacebookApiException ex)
    {
        // other general facebook api exception
    }
    catch (Exception ex)
    {
        // non-facebook exception such as no internet connection.
    }
}

我得到的错误在线:

dynamic fbAccounts = fbClient.Get("/me/accounts");

(OAuthException - #2500) 必须使用活动访问令牌来查询有关当前用户的信息。

【问题讨论】:

    标签: c# facebook sdk facebook-c#-sdk


    【解决方案1】:

    请看这里:(OAuthException - #2500) An active access token must be used to query information about the current user

    您正在获取应用程序的访问令牌,而不是用户。 因此,“我”没有意义。你应该在那里提供身份证 - 您的用户 ID,或您的应用 ID,或您的应用拥有的任何其他 ID 权限。

    【讨论】:

    • 那么我会使用 facebook 页面的 ID 并为此获取帐户吗?这是我如何获得允许我作为页面发布到 facebook 页面的访问令牌的方式吗?
    • 如何作为页面发布 - 请参阅此处stackoverflow.com/questions/10147375/…
    • 如何获取 USER 令牌(您需要向用户显示登录弹出窗口):stackoverflow.com/questions/10108361/… 另一个选项可以是从 Graph API Explorer 获取用户令牌并对其进行硬编码 - 如果您只想测试/玩这个应用程序。
    • 这将用于 Windows 服务,该服务会将结果发布到我的 Facebook 页面,因此用户登录确实无法正常工作。我发现的所有示例都使用旧版本,似乎不适用于最新版本的 SDK
    • 我试图效仿这个例子:stackoverflow.com/questions/5231827/…
    【解决方案2】:
    dynamic ac = fbClient.Get("oauth/access_token", new
    {
        client_id = strAppID,
        client_secret = strSecret,
        grant_type = "client_credentials"
    });
    

    以上代码可能不适用于 6.0 版本。

    OAuth 2.0 - 访问令牌的交换代码

    FacebookClient 仅支持解析 json 响应。由于此 原因“oauth/access_token”令牌在使用时不起作用 FacebookClient.Get(“oauth/access_token”)。相反,您将需要使用 FacebookOAuthClient 中的一个方法。

    您可以在此处找到更多详细信息:http://blog.prabir.me/post/Facebook-CSharp-SDK-Making-Requests.aspx

    希望这会有所帮助。

    【讨论】:

    • 最新版 SDK 中不存在 FacebookOAuthClient
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多