c# - 如何使用应用程序访问 token 使用 publish_stream 而不是 offline_access 发布到 Facebook 用户的 friend 的墙上

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

publish_stream 的文档如下:“使您的应用能够将内容、评论和点赞发布到用户的流和用户的 friend 的流中。有了这个权限,您可以随时将内容发布到用户的供稿中,而无需需要 offline_access。”

所以工作流程是这样的:

  1. FB.login() 的 publish_stream 范围如下:

    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 使用应用程序的访问 token 发布到该用户 friend 的墙上。

    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 访问 token (您通过向 https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=APP_ID_HERE&client_secret=APP_SECRET_HERE 发出 GET 获得它)在该用户的墙上发帖——但不能在该用户的 friend 的墙上发帖。

那么 Facebook 文档中的“和用户 friend 的流”部分是谎言还是我做错了?那里有大量的错误信息。

最佳答案

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

在调用 client.Post 之前添加这个

parameters.access_token = FacebookAppId+"|"+FacebookAppSecret;

<罢工>

文档是正确的(在本例中)。一旦用户授予您,您就可以在用户和他的 friend 墙上发帖 publish_stream使用应用程序的权限 access_token (无需 需要询问 offline_access !)尊重墙所有者的偏好。一些用户将隐私设置设置为拒绝特定用户/应用程序甚至其他任何人发布内容。

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

关于c# - 如何使用应用程序访问 token 使用 publish_stream 而不是 offline_access 发布到 Facebook 用户的 friend 的墙上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650838/

相关文章:

c# - 异步调用异步委托(delegate)?

Facebook Oauth 对话框预览与实际登录不同

json - Swift Facebook 获取好友图表请求错误

android - Facebook在android中的 fragment 登录

c# - 错误 : "Spatial types and functions are not available for this provider"

c# - 在 propertygrid 中使用 datetimepicker 选择时间

c# - 从CheckedListBox获取CheckBox的标签文本

ios - 通过 xcodebuild 命令更改目标属性

Facebook Graph API - 创建测试页面时发出 cover_photo

facebook - Facebook 的 'data-ft' JSON 结构中的键代表什么?