首页 文章

如何使用publish_stream发布到Facebook用户's friend'墙,但使用应用程序访问令牌不发布offline_access

提问于
浏览
4

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

因此工作流程如下:

具有publish_stream范围的

  • 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' });
  • 使用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);

返回:

{"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来获取此消息)以在该用户's wall -- but NOT to that user'的朋友的墙上发布 .

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

1 回答

  • 1

    您应该在发出请求之前显式指定access_token,如果省略它,则使用当前用户的access_token .
    在调用client.Post parameters.access_token = FacebookAppId“|”之前添加此项 . FacebookAppSecret;

    文档是正确的(在这种情况下) . 一旦用户授予您使用应用程序 access_tokenwithout 需要询问 offline_access !)的权限,您可以在用户和他的朋友墙上发布关于墙主人偏好的信息 . 某些用户设置隐私设置以拒绝特定用户/应用程序甚至其他任何人发布内容 .

    确保您可以使用Graph API Explorer工具(确保提供应用程序 access_token )使用http://facebook.com and 在该特定朋友(您有问题)的墙上发帖 .

相关问题