0

我在我的应用程序中使用 Facebook .Net SDK( http://facebooksdk.net/ )。我需要在用户的墙上或他的页面上发布一张图片。

我有这段代码可以尝试这样做:

var postUrl = "<fbid>/feed";
var fbParameters = new Dictionary<string,object>();
fbParameters["message"] = postRequest.FacebookPostContent;
if (postRequest.MediaData != null && postRequest.MediaData.Length > 0)
{
     var stream = new MemoryStream(postRequest.MediaData);
     if (postRequest.ContentType.Equals("image/jpeg"))
     {
       postUrl = postUrl.Replace("/feed", "/photos");
       fbParameters["picture"] = new FacebookMediaStream { ContentType = postRequest.ContentType, FileName = DateTime.UtcNow.ToString("ddmmyyyyhhmmss") + "-photo.jpeg" }.SetValue(stream);
      }
}
if (!string.IsNullOrWhiteSpace(postRequest.FacebookPageId))
{
      fbUserID = postRequest.FacebookPageId;
}
postUrl = postUrl.Replace("<fbid>", fbUserID);
var result = await facebookClient.PostTaskAsync(postUrl, fbParameters);

看看我的 postUrl 变量。如果它是一个页面,我会使用 Facebook 中的用户 ID 或 PageID 更新,因此帖子应该正确发布在正确的对象中。如果要上传一些图像,请将其添加到字典中。

因此,考虑到这一点,我有以下问题:

  1. 当 fbUserID 是用户 ID 时,发布完美,带有图像和描述,但是,当 ID 是 PageID 时,只发布描述文本并且图像被忽略(用户具有 manage_page 权限,所以我不认为它是权限问题)。我做错了什么,图像没有被发布到页面的墙上?
  2. 如果我想发布视频而不是图片,我应该在此代码中进行哪些更改?

已经在 SO 中看到了其他技术的许多问题,但从来没有一个决定性的解决方案。

非常感谢您的帮助,我真的很感激。

问候,古腾堡

4

2 回答 2

0

知道了!

Facebook 在页面内创建了一个不同的部分,称为“测试页面上的其他人最近发布的帖子”,允许发布图像的人将在那里,就像一个附件图标。为了直接发布到页面的提要/墙,我需要做的就是不要使用用户 access_token(即使用户授予了 manage_pages 权限),只需使用相应页面的 /me/accounts 对象中的 access_token 即可。

关于视频帖子,我只是将 ContentType 设置为“ video/mpeg ”,并且在服务器而不是在字典上设置图片参数,我使用视频字节 [] 设置了视频字段。

谢谢!

问候,

于 2013-10-19T23:50:48.713 回答
0

作为替代方案,您可以尝试此处答案之一中显示的“共享内容”按钮:

在 Windows Phone 8.1 上使用 Graph REST API 在 Facebook 上上传视频

我发现这比处理授权和手动发布要容易。

于 2015-05-07T17:59:05.637 回答