如何使用publish_stream发布到Facebook用户的朋友的墙上,而不是使用应用程序访问令牌发布offline_access

时间:2011-12-28 01:04:08

标签: c# facebook facebook-graph-api oauth access-token

publish_stream的文档读取:“使您的应用能够将内容,评论和喜欢发布到用户的流和用户朋友的流中。通过此权限,您可以随时将内容发布到用户的Feed中,而无需需要offline_access。“

因此,工作流程是:

  1. FB.login(),其发布范围如下:

    FB.login(function (response) {
        if (response.authResponse) {
            FB.api('/me/permissions', function (permissions) {
                if (permissions.data[0].publish_stream == 1) {
                    //user has now granted publish_stream to this application
                }
            });
        }
    }, { scope: 'publish_stream' });
    
  2. 使用C#Facebook SDK使用应用程序的访问令牌发布给该用户的朋友的墙。

    var client = new FacebookClient(FacebookAppId, FacebookAppSecret);
    
    // Build the wall post
    dynamic parameters = new ExpandoObject();
    parameters.message = facebookDeliveryQueueItem.MessageBody; // user message
    
    // Post to the wall
    client.Post(facebookRecipientId + "/feed", parameters);
    
  3. 返回:

    {"error":{"message":"(#200) The user hasn't authorized the application to perform this action","type":"OAuthException"}}
    

    然而!如果我尝试使用此代码发布到我自己的墙上,它可以正常工作。

    如果用户将publish_stream授予我的应用程序,我可以使用APPLICATION访问令牌(您可以通过向https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=APP_ID_HERE&client_secret=APP_SECRET_HERE发出GET来获取此消息)以在该用户的墙上发布 - 但不是该用户的朋友的壁。

    Facebook文档的“和用户朋友的流”是谎言或我做错了吗?那里有大量的错误信息。

1 个答案:

答案 0 :(得分:1)

<击> 在发出请求之前,您应该明确指定access_token,如果省略它,则使用当前用户的access_token

在致电client.Post

之前添加此内容
parameters.access_token = FacebookAppId+"|"+FacebookAppSecret;

<击>

文档是正确的(在本例中)。一旦用户使用应用publish_stream需要询问access_token!)授予您offline_access权限,您就可以在用户及其朋友的墙上发帖业主喜好。一些用户设置隐私设置以拒绝特定用户/应用程序甚至其他任何人发布内容。

确保您可以使用http://facebook.com 使用Graph API Explorer工具(提供应用access_token确保您可以在该特定朋友(您遇到问题)上发帖)。