Facebook使用App Access Token发布照片

时间:2013-11-21 17:07:16

标签: c# facebook facebook-graph-api facebook-c#-sdk

情景:

  • 用户已完成OAuth流程并已向我们的应用发布了publish_actions,publish_stream,user_friends和user_photos权限。
  • 虽然我们拥有登录用户的用户令牌,但我们检索并保留了用户的Facebook ID
  • 另外,虽然我们有用户令牌,但我们已经创建了一个相册,以便稍后将照片发布到并保留Facebook相册ID
  • 注意:由于遗留原因,我们尚未保留用户令牌
  • 稍后,我们尝试使用以下代码将照片发布到之前创建的相册中:

    FacebookClient client = null;
    Dictionary<string, object> parameters = null;
    string path;
    FacebookMediaObject media = null;
    
    client = new FacebookClient();
    client.AppId = "{our app id}";
    client.AppSecret = "{our app secret}";
    
    media = new FacebookMediaObject();
    media.ContentType = "image/jpg";
    media.FileName = "AnyAllContactTypesProblem.jpg";
    media.SetValue(File.ReadAllBytes(Server.MapPath(".") + "\\" + media.FileName));
    
    parameters = new Dictionary<string,object>();
    parameters.Add("name",
                  "Test Image 1");
    parameters.Add("source",
                   media);
    
    path = "/" + "{album id}" + "/photos";
    
    dynamic result = client.Post(path,
                                 parameters);
    

POST操作会导致以下异常:

   (OAuthException - #102) A user access token is required to request this resource.

Facebook文档表明,从app id和app secret派生的“app token”可以用作代表某人发布照片的访问令牌,只要已向应用程序提供了publish_stream权限即可在我们的情况下。

我们是否遗漏了上述代码中所需的内容,或者Facebook是否更改了发布照片所需的权限?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我不知道从哪里读到这个 ​​-

  

从app id和app secret派生的“app token”可以用作代表某人发布照片的访问令牌,只要在我们的案例中为app提供了publish_stream权限。

但这为真。获得publish权限后,您可以在墙上发布故事/供稿,并使用应用访问令牌获取基本信息。不允许发布照片!这是文档所说的内容 -

  

应用程序访问令牌也可用于代表已向您的应用程序授予开放图形发布权限的人员将内容发布到Facebook。
Reference

你可以做的一件事 -

将扩展令牌保存到您的服务器(在该用户必须再次登录以获取新令牌之后的60天内到期),以获取扩展令牌 -

GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token}