【问题标题】:facebook sdk c# post on an user's wallfacebook sdk c# post on an user's wall
【发布时间】:2012-03-16 05:04:06
【问题描述】:

我有一个桌面应用程序(一个小游戏),它必须能够在用户的墙上发表评论。就像“X 赢了 Y 和 Z 的比赛”。

我一直在阅读任何类型的文档和 Facebook API,但我无法弄清楚。我已经了解了这样做的方法:使用访问令牌然后使用 GraphAPI 获取用户的信息,然后能够将其发布在他的墙上。

但是,所有示例和文档并没有真正帮助我,它们只是其中的一部分。而且,Facebook 正在改变做这件事的方式……所以我很困惑。

所以我想知道如何真正做到这一点。我的意思是,最简单的方法是为我找到。对于少数人来说,这是一个非常小的应用程序,是第一个测试应用程序。

感谢您提供任何线索!

【问题讨论】:

  • 您是否尝试过facebooksdk.codeplex.com/…“发布后”的示例
  • 我没有,我这周试试,谢谢
  • 但没有说明如何获取令牌

标签: facebook-c#-sdk


【解决方案1】:

为桌面应用程序执行身份验证比基于 Web 的应用程序更复杂。由于这是“第一个测试应用程序”,我强烈建议使用 Facebook JavaScript SDK (http://developers.facebook.com/docs/reference/javascript/) 将其开发为 Web 应用程序。一旦你可以在那里完成所有工作,那么使用 Windows 桌面应用程序会容易得多,因为现在你已经完成了身份验证部分(因为你的桌面应用程序将使用 javascript SDK 来验证用户)。

但如果您确实想直接加入,请参阅:http://blog.prabir.me/post/Facebook-CSharp-SDK-Writing-your-First-Facebook-Application-v6.aspx

【讨论】:

  • 你的意思是在我的电脑上做一个真正的网站还是只有一个带有html页面的网站就足够了?
  • 当然可以在本地测试。只需习惯于身份验证的方式,因为稍后您将在 C# 桌面应用程序中使用它
  • 我试过这种方式,但我无法让它工作......在 Facebook 的 JavaScript 测试页面上,我的代码工作,但是当我在本地尝试它时它永远不会工作......我不不明白为什么。我需要更多的东西吗?我的代码很简单:打开窗口时下载 Facebook SDK C#。然后尝试在 facebook 上发布一些东西......但这一步永远不会工作......基本上......调用了 3 个函数:FB.init,一个下载 SDK 的函数,最后是 FB.ui
  • 它会下载 SDK 但之后不做任何事情
  • 确保在 SDK 加载后运行 FB.XXXX() 调用。这些应该在 window.fbAsyncInit 函数内。
【解决方案2】:

最后,

我通过不使用 facebook SDK 实现了真正的 360 度转弯。有人告诉我只使用 http 请求发布是多么容易!在另一篇文章的帮助下(http://stackoverflow.com/questions/6024912/asp-net-post-to-facebook-wall) 我想出了如何做到这一点。这是我的小简单代码。基本上,我使用 WPF 制作了一个“用户”可以连接到 facebook 的窗口,顶部还有一个文本框,用于向我展示我想要的东西......令牌或网络响应......最后,我有 2按钮:第一个登录到 facebook,第二个在 facebook 上发帖……Window1.xaml.cs 中有代码

using System;
using System.Text;
using System.Windows;
using System.Net;
using System.IO;

namespace HDI_WPF_WebBrowser_cs
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
        private void btnOnline_Click(object sender, RoutedEventArgs e)
        {
            //dont forget to change the appID
            webOutput.Navigate(new Uri("https://www.facebook.com/dialog/oauth?client_id=APPID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token"));
        }

        private void btnCustom_Click(object sender, RoutedEventArgs e)
        {
            string adresseWeb = webOutput.Source.ToString();

            string token = adresseWeb.Remove(0, adresseWeb.IndexOf("#access_token=") + 14);

            token = token.Remove(token.IndexOf("&expire"));

            txtInput.Text = token;
            //dont forget to change the userID
            var url = string.Format("https://graph.facebook.com/USERID/feed?access_token=" + token);

            var req = WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            string postData = "'access_token='" + token 
                            + "'&message=Testing testing";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            var stream = req.GetRequestStream();
            stream.Write(byteArray, 0, byteArray.Length);
            stream.Close();

            WebResponse response = req.GetResponse();
            txtInput.Text = ((HttpWebResponse)response).StatusDescription;
            stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);            
        }
    }
}

以及用于 WPF 的 Window1.xaml

<Window x:Class="HDI_WPF_WebBrowser_cs.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="500" Width="600">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="2*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Text="Input:" HorizontalAlignment="Right" />
        <TextBox x:Name="txtInput" Background="Bisque" Grid.Row="0" Grid.Column="1" />
        <WebBrowser x:Name="webOutput" Grid.Row="1" Grid.ColumnSpan="2" />
        <StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal">
            <Button x:Name="btnOnline" Content="Load Online" Click="btnOnline_Click" />
            <Button x:Name="btnCustom" Content="Load Custom" Click="btnCustom_Click" />
        </StackPanel>
    </Grid>
</Window>

您所要做的就是创建一个新的 WPF prodjet 并将这些行写入文件中。您还必须更改 appID 和 userID。我用我的进行测试,但编写代码以动态查找用户 ID 非常简单。

我希望它对你有所帮助,即使它不是使用 facebookSDK 的解决方案

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2014-03-26
    相关资源
    最近更新 更多