繁体   English   中英

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

[英]How do I post to Facebook user's friend's wall with publish_stream but NOT offline_access using an application access token

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

因此工作流程如下:

  1. 具有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' }); 
  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); 

返回:

{"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文档中的“和用户朋友的流”也是谎言,或者我做错了吗? 那里有大量的错误信息。

您应该在发出请求之前显式指定 access_token ,如果省略它,则使用当前用户的 access_token

在调用 client.Post之前添加它

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM