Facebook与C#桌面应用程序集成

时间:2013-05-08 14:58:13

标签: c# .net wpf facebook

我只是直接潜入并给你一些关于我试图做什么,我尝试过什么以及我的方式障碍的背景。所以这里.. ..

我的目标
从桌面应用程序发布到Facebook个人资料或墙壁 桌面应用程序将由拥有自己的Facebook帐户的个人用户使用 目的是为每个用户创建自己的Facebook应用程序,并获取应用程序ID和应用程序密码 然后在桌面应用程序中使用app id和app secret(在数据库或配置中保存) 允许桌面应用程序的用户发布到他们的个人资料,而无需输入他们的电子邮件地址和密码来登录

总而言之,每个Facebook帐户有1个facebook应用程序 应用程序设置将保存在每个用户桌面应用程序中 通过他们自己的Facebook应用程序发布到他们自己的Facebook,而无需登录

这里的主要重点是用户无需通过窗口或浏览器手动登录。

我创建了我的脸书应用程序,并将其设置为现场状态..我还添加了所有可能的权限和设置(在Facebook内)的扩展权限,只是为了确保我没有遗漏任何东西。 所以我确实有我的AppID和App秘密..我也有我的客户端令牌,它说用来代替'auth方法'的app秘密。我用它来获取我的访问令牌。我尝试了应用秘密而且它没有返回访问令牌

我的尝试:

C#FACEBOOK SDK 所以,我开始并且仍在尝试使用c#sdk
我可以检索我的访问令牌但无法发布。

无论我尝试什么,我总是低于错误......这些只是我尝试的众多代码示例中的两个。
(OAuthException - #2500)必须使用活动访问令牌来查询有关当前用户的信息。

dynamic r = fb.Post("me/feed", new { message = "My seconds wall post using Facebook C# SDK" });

(OAuthException - #190)客户端令牌不能用于此API

dynamic r = fb.Post("kevin.maguire.965/feed", new { message = "My second wall post using Facebook C# SDK" });

我从下面的链接中读到以下摘录,其中说明我的访问令牌是一个应用令牌,我需要一个用户或页面的访问令牌? Need Help on OAuthException Code 2500 错误2500表示您没有访问令牌或应用程序访问令牌但是正在尝试访问/ me / - '我'是“当前用户或页面ID”的占位符,因此如果没有用户的访问令牌,则无效页

所以,我试图使用以下答案(Facebook C# SDK Get Current User

来恢复用户ID
var fb = new FacebookClient("access_token");
dynamic result = fb.Get("me", new [] { fields = "id" });
var userId = result.id;

我获得了访问令牌,我假设它是应用令牌,而不是用户令牌

dynamic result = fb.Get("oauth/access_token", new
        {
            client_id = this.ApplicationId,
            client_secret = this.AppSecret,
            grant_type = "client_credentials"
        });

fb.AccessToken = result.access_token;

所以我现在不知道如何发布到我的个人资料

我可以使用twitter实现上述功能,我可以使用秘密,令牌,ID等...他们提供的功能,我可以成功从桌面应用程序发布到我的Twitter帐户,而无需登录我的Twitter帐户。

另一位用户也发现在没有任何实际问题的情况下发布到Twitter非常容易。 (facebook c# sdk getting started

他似乎也取得了成功,我没有使用相同的代码 - 这段代码是在2012年6月使用的,因此可能会发布自从 然后,
我收到了消息:(OAuthException - #2500)当我使用sdk时,必须使用活动访问令牌来查询有关当前用户的信息。 当我尝试使用Web请求获取访问令牌,然后将该令牌传递给sdk对象以创建facebookclient时,我收到此消息 (OAuthException - #190)无效的OAuth访问令牌签名。

    WebRequest request = WebRequest.Create("https://graph.facebook.com/oauth/access_token?      grant_type=client_credentials&client_id=999999999999999&client_secret=edefefr8e09r8e08r080r8er0e");

        request.Method = "POST";

        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";

        // Get the request stream.
        Stream dataStream = request.GetRequestStream();

        // Close the Stream object.
        dataStream.Close();

        // Get the response.
        WebResponse response = request.GetResponse();
        dataStream = response.GetResponseStream();

        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);

        // Read the content.
        string accesstoken = reader.ReadToEnd();
        MessageBox.Show("accesstoken") 

        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

        var fb = new FacebookClient(accesstoken);
        dynamic parameters = new ExpandoObject();
        parameters.message = "test";
        dynamic result = fb.Post("me/feed", parameters);
        var id = result.id;

显然,在上面的代码中,我将id和secret更改为虚拟值。

所以基本上人们......上面的链接和上面的代码只是我在过去几天尝试过的一小部分......我基本上用完了选项而且我在这里错过了一些可能的东西轻易避免我的注意......或许不是:)我不知道。

如果任何人甚至有一个简单的窗体,或使用c#sdk或使用restsharp的wpf窗口应用程序示例,或者只使用带有'POST'方法的WebRequest对象,那么我将永远非常好。

再次迭代它是桌面应用程序而不是ASP.net。

非常感谢大家的关注和时间。

enter image description here

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

据我所知,您提供的访问令牌不正确。由于您尚未提供有关获取访问令牌的代码,我建议您查看此link,其中介绍了如何构建Facebook应用程序,包括通过WebBrowser控件获取访问令牌。 / p>

编辑:您正在提供应用访问令牌,但正在尝试以用户身份发布。对于此操作,您需要一个用户访问令牌,您可以按照上面链接中的步骤获取该令牌。