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

标签 c# .net wpf facebook

我只是要直接潜入并给你一些关于我尝试做的事情、我尝试过的事情以及我前进道路上的障碍的背景知识。所以在这里..

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

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

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

我已经创建了我的 facebook 应用程序并将其设置为实时状态..我还在设置中添加了所有可能的权限和扩展权限(在 facebook 内),以确保我没有遗漏任何东西。
所以我确实有我的 AppID 和应用程序 secret 。我也有我的客户端 token ,它说用来代替“身份验证方法”的应用程序 secret 。我用它来获取我的访问 token 。我尝试了应用程序 secret ,但它没有返回访问 token

我的尝试:

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

无论我尝试什么,我都会让他始终低于错误......这些只是我尝试过的许多代码示例中的两个。
(OAuthException - #2500) 必须使用事件访问 token 来查询有关当前用户的信息。
dynamic r = fb.Post("me/feed", new { message = "My seconds wall post using Facebook C# SDK" });
(OAuthException - #190) 客户端 token 不能用于此 API
dynamic r = fb.Post("kevin.maguire.965/feed", new { message = "My second wall post using Facebook C# SDK" });
我从以下链接中阅读了以下摘录,其中指出我的访问 token 是一个应用程序 token ,我需要用户或页面的访问 token ?
Need Help on OAuthException Code 2500
错误 2500 表示您没有访问 token 或应用程序访问 token ,但正在尝试访问/me/- “me”是“当前用户或页面 ID”的占位符,因此如果没有用户的访问 token ,则无效页

因此,我尝试使用以下答案( 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;

我得到了我认为是应用程序 token 而不是用户 token 的访问 token
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 实现上述目标,我可以在其中使用 secret 、 token 、ID 等......他们提供,我可以成功地从桌面应用程序发布到我的 Twitter 帐户,而无需登录我的 Twitter 帐户。

另一位用户也发现在 twitter 上发帖很容易,没有任何实际问题。 ( facebook c# sdk getting started )

他似乎也取得了成功,但我没有使用相同的代码 - 这段代码是在 2012 年 6 月使用的,因此自那以后可能会发布重大更改
然后。
我收到消息:(OAuthException - #2500) 必须使用事件访问 token 来查询有关当前用户的信息...当我使用 sdk 时。
当我尝试使用 Web 请求获取访问 token ,然后将该 token 传递给 sdk 对象以创建 facebookclient 时,我收到了此消息
(OAuthException - #190)无效的 OAuth 访问 token 签名。
    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 或使用 restsharp 的 wpf 窗口应用程序示例,或者只是使用带有“POST”方法的 WebRequest 对象,那么我将永远伟大。

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

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

enter image description here

enter image description here

enter image description here

enter image description here

最佳答案

据我所知,您提供了不正确的访问 token 。由于您尚未提供有关获取访问 token 的代码,我建议您查看此 link它解释了如何构建 Facebook 应用程序,包括通过 WebBrowser 控件获取访问 token 。

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

关于c# - Facebook 与 C# 桌面应用程序的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443948/

相关文章:

c# - 封装到底是什么?

c# - wpf mvvm 等待方法在使用 await 任务延迟进行模拟时阻止 UI

c# - 使用 .NET 创建 Symbian 应用程序

c# - c#中如何为方法添加参数注释

c# - WPF中基于RowStyle的CellStyle

c# - 无法通过代码访问 WinRT 中使用属性点表示法的 .resw 字符串资源?

c# - 即使我在 C# 中单击另一个控件,也使表单始终获得焦点

c# - 处理 .NET DataGridViewCheckBox Changed 事件

c# - 在 DockPanel 中拆分项目

c# - 配置 WPF 客户端以运行 64 位