2013-05-08 120 views
7

即时通讯只是直接进入,并给你一些关于即时消息试图做什么,试过什么,以及我的方式障碍的背景知识。所以在这里不用..Facebook与C#桌面应用程序的集成

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

因此,总之,1 facebook应用程序每个facebook帐户。
该应用程序的设置将通过自己的Facebook应用程序,而无需在

记录主要强调这里是用户不必登录通过窗口或手动保存在每个用户的桌面应用程序 后到自己的Facebook浏览器。

我已经创建了我的Facebook应用程序,并将其设置为生存状态..我还在设置(在Facebook内)中添加了所有可能的权限和扩展权限,以确保我没有丢失任何内容。 所以我有我的AppID和应用程序的秘密..我也有我的客户端令牌,它说,用来代替'auth方法'的应用程序秘密。我用它来获取我的访问令牌。我尝试了应用程序的秘密和它不返回访问令牌

我尝试:

C#FACEBOOK SDK 于是,我开始和现在还在使用C#SDK
我可以检索我的访问令牌但不能发布。

无论我尝试什么,我总能得到他下面的错误...这些只是我尝试过的许多代码示例中的2个。
(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”,因此无需访问令牌将无效的占位符用户或页面

所以,我试图让用户ID后面使用下面的答案(Facebook C# SDK Get Current User

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的地方,我可以使用秘密,令牌,身份证等......他们提供,我可以成功地从桌面应用程序发布到我的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和秘密改为虚拟值。

所以基本上乡亲......上面的链接和上面的代码只是什么,我试图日期的最后几天......我基本上跑出来的选项捏住了的,我在这里可能失去了一些东西轻易地避免我的注意..或者也许不是:)我不知道。

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

只是再次重复,这是一个桌面应用程序,而不是ASP.net。

非常感谢您的关注和时间。

enter image description here

enter image description here

enter image description here

enter image description here

回答

3

从我可以看到你提供了不正确的访问令牌。由于您没有提供关于获取访问令牌的代码,我建议您看看这个link,它解释了如何构建Facebook应用程序,包括通过WebBrowser控件获取访问令牌。

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

+0

您好Jurgen - 非常感谢您花时间先发布答案。我只是在代码中尝试了示例应用程序,它完美运行。我想知道,有没有办法绕过手动登录?并以另一种方式获得用户访问令牌?这样我就可以构建一个自定义窗口,用户可以在其中输入文本并直接发布到Facebook,而无需首先进行手动登录?这是可能的twitter,但我只是不知道,如果它是可能的Facebook ...谢谢:) – Kev 2013-05-08 15:46:54

+0

不幸的是,获取访问令牌需要用户通过Facebook对话框至少登录一次。但是,如果您阅读了一些有关访问令牌的信息,则会了解到一旦您获得正常的访问令牌(2小时到期),就可以请求具有60天过期的扩展访问令牌。在令牌过期之前,您需要重新获取它。获取/重新获取访问令牌不需要用户采取任何行动,只要不满足其中一个到期条件即可。更多信息:https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/ – 2013-05-08 17:03:46

+0

我建议每次用户登录时要求更新令牌为了得到更新的令牌,你需要遵循相同的过程,就像你申请扩展令牌一样。这是我如何做到的:'string longtoken = HttpUtility.ParseQueryString(HttpUtil.GetHtmlPage(“https://graph.facebook.com/oauth/access_token?client_id=”+ APP_ID +“&client_secret =”+ APP_SECRET +“&grant_type = fb_exchange_token&fb_exchange_token =“+ SHORT_TOKEN))[”access_token“];(用你自己的常量代替)。如果用户未登录超过两个月,则必须确保他被要求再次登录Facebook。 – 2013-05-08 17:08:43