publish_stream 的文档如下:“使您的应用能够将内容、评论和点赞发布到用户的流和用户的 friend 的流中。有了这个权限,您可以随时将内容发布到用户的供稿中,而无需需要 offline_access。”
所以工作流程是这样的:
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' });
使用 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/