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

Facebook与C#桌面应用程序的集成,c#,.net,wpf,facebook,C#,.net,Wpf,Facebook,我只想直接向大家介绍一下我想做什么,我做了什么,以及我遇到的障碍。这就是 我的目标 从桌面应用程序发布到facebook个人资料或墙上。 桌面应用程序将由拥有自己facebook帐户的个人用户使用。 其目的是为每个用户创建自己的facebook应用程序,并获取应用程序id和应用程序机密。 然后在桌面应用程序中使用应用程序id和应用程序机密(保存在数据库或配置中的某个位置) 允许桌面应用程序的用户发布到其个人资料,而无需输入其电子邮件地址和密码即可首先登录 总之,每个facebook帐户有一个fa

我只想直接向大家介绍一下我想做什么,我做了什么,以及我遇到的障碍。这就是

我的目标
从桌面应用程序发布到facebook个人资料或墙上。
桌面应用程序将由拥有自己facebook帐户的个人用户使用。
其目的是为每个用户创建自己的facebook应用程序,并获取应用程序id和应用程序机密。
然后在桌面应用程序中使用应用程序id和应用程序机密(保存在数据库或配置中的某个位置) 允许桌面应用程序的用户发布到其个人资料,而无需输入其电子邮件地址和密码即可首先登录

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

这里主要强调的是,用户不必通过窗口或浏览器手动登录

我已经创建了我的facebook应用程序,并将其设置为live状态。。我还在设置中添加了所有可能的权限和扩展权限(在facebook中),以确保我没有遗漏任何内容。 所以我有我的AppID和appsecret。。我也有我的客户端令牌,它说要用它来代替“auth方法”的appsecret。我用这个来获取我的访问令牌。我尝试了应用程序机密,但它没有返回访问令牌

我的尝试:

C#FACEBOOK SDK 因此,我从c#sdk开始,现在仍在尝试使用它
我可以检索我的访问令牌,但无法发布

无论我做什么,他总是在错误下面。。。这些只是我尝试过的许多代码示例中的两个。
(OAutheException-#2500)必须使用活动访问令牌来查询有关当前用户的信息

dynamic r=fb.Post(“me/feed”,new{message=“我的秒墙帖子使用Facebook C#SDK”)

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

dynamic r=fb.Post(“kevin.maguire.965/feed”,new{message=“我使用Facebook C#SDK的第二篇墙帖”)

我从下面的链接中阅读了以下摘录,其中说明我的访问令牌是一个应用令牌,我需要一个用户或页面的访问令牌? 错误2500表示您没有访问令牌或应用程序访问令牌,但正在尝试访问/me/-“me”是“当前用户或页面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;
所以我现在不知道如何及时发布到我的个人资料中

我能够实现以上使用推特,我可以使用的秘密,令牌,id等。。。它们提供,我可以从桌面应用程序成功地发布到我的twitter帐户,而无需登录我的twitter帐户

另一位用户也发现,在推特上发帖很容易,没有任何实际问题。()

他似乎也取得了成功,但我没有使用相同的代码-该代码是在2012年6月使用的,因此可能会有突破性的更改发布 然后。
我得到消息:(OAutheException-#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更改为伪值

所以基本上大家…上面的链接和上面的代码只是我在过去几天尝试约会的一小部分。。。我基本上已经没有选择了,我错过了一些可以轻易转移我注意力的东西。。也许不是:)我不知道

如果有人甚至有一个简单的windows窗体,或者使用c#sdk的wpf窗口应用程序示例,或者使用restsharp,或者仅仅使用带有“POST”方法的WebRequest对象,那么我将永远是伟大的

再次重申,它是一个桌面应用程序,而不是ASP.net

非常感谢各位的关注和时间


从我所看到的情况来看,您提供的访问令牌不正确。由于您尚未提供有关获取访问令牌的代码,我建议您看看这篇文章,它解释了如何构建Facebook应用程序,包括通过WebBrowser控件获取访问令牌


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

Hi Jurgen-非常感谢您抽出时间首先发布答案。我刚刚在您的代码中尝试了示例应用程序,它工作得非常好。我想知道,有没有办法绕过手动登录?以另一种方式获取用户访问令牌?这样我就可以建立一个自定义窗口,用户可以在其中输入文本并直接发布到facebook,而无需先手动登录?这在twitter上是可能的,但我只是不知道在facebook上是否可能。。。谢谢:)不幸的是,获得访问令牌需要用户至少通过facebook对话框登录一次。但是,如果您阅读了一些关于访问令牌的内容,您将了解到,一旦您获得一个正常的访问令牌(2小时到期),您就可以请求一个60天到期的扩展访问令牌。在令牌过期之前,您需要重新获取它。只要不满足任何到期条件,获取/重新获取访问令牌不需要用户执行任何操作。更多信息:我建议请求更新托克
    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;