我的问题是用户(在这种情况下是我自己)必须允许访问我的应用才能发布到我的墙上。
完整的 OAuth 过程在 http://developers.facebook.com/docs/authentication/ 中有很好的描述
但具体来说,我需要获取一个我必须访问的 URL,然后对身份验证问题说“是”。代码在这里:
@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@oauth.url_for_oauth_code(:permissions => "publish_actions")
网址将如下所示:
https://www.facebook.com/dialog/oauth?
client_id={app_id}&
redirect_uri={redirect-uri}&scope=publish_actions
请注意,URL 必须指定您想从用户那里请求哪些权限(在本例中,是发布到墙上的权限)。此权限请求在“范围”变量下指定。请注意,某些版本的 facebook api 允许通过“publish_stream”范围发布,而其他版本需要“publish_actions”范围。有关范围变量下可用权限的更多信息,请参见此处:https://developers.facebook.com/docs/facebook-login/permissions/v2.0
当您访问由上述语句生成的 URL 时,Facebook 会向您发送一条消息,询问该特定应用是否有权发布到您的墙上。你当然会说“是”。之后,您的 facebook 应用程序可以使用“应用程序访问令牌”发布到 facebook 墙上
之后,您可以轻松地使用您的应用访问令牌发布到墙上。适合我的代码是:
@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@app_access_token = @oauth.get_app_access_token
@graph = Koala::Facebook::API.new(@app_access_token)
foo = @graph.put_connections(facebook_user_id, "feed", :message => "Test message")