如何 post 到用户的 facebook feed
How to post to user's facebook feed
我需要post到用户的 facebook feed。
基于其他几个 SO 问题,我提出了以下 posting 请求:
let request = GraphRequest(graphPath: "me/feed", parameters: ["message" : "Hello world"], accessToken: accessToken, httpMethod: .POST, apiVersion: GraphAPIVersion.defaultVersion)
request.start({ (response, requestResult) in
switch requestResult {
case .failed(let error):
print("error in graph request:", error)
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue {
print(responseDictionary)
}
}
})
由于
这失败了
error = {
code = 200;
"fbtrace_id" = GMp2cebddNb;
message = "(#200) Requires either publish_actions permission, or manage_pages and publish_pages as an admin with sufficient administrative permission";
type = OAuthException;
};
根据消息,问题似乎很容易解决 - 我只需要获得 publish_actions
或 manage_pages
和 publish_pages
权限即可。基于这个 ,这看起来很简单,我最终用这个包装了 posting 的代码:
let loginManager = LoginManager()
loginManager.logIn([PublishPermission.custom("publish_actions")], viewController: self) { (result) in
print(">> \(AccessToken.current?.grantedPermissions)")
switch result {
case .cancelled:
print(">>>> Cancelled")
case .failed(let error):
print(">>>> Error: \(error)" )
case .success(grantedPermissions: _, declinedPermissions: _, token: let accessToken):
print(">>>> Logged in!")
let request = GraphRequest(graphPath: "me/feed", parameters: ["message" : post], accessToken: accessToken, httpMethod: .POST, apiVersion: GraphAPIVersion.defaultVersion)
request.start({ (response, requestResult) in
switch requestResult {
case .failed(let error):
print("error in graph request:", error)
break
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue {
print(responseDictionary)
}
}
})
}
}
现在 "funny" 部分是,然后 facebook SDK 显示一个页面告诉我我之前使用 Facebook 登录到我的应用程序并询问我是否要继续。当我按继续时,SafariViewController
关闭并执行 .cancelled
分支。这里发生了什么?我没有取消,也没有被要求授予在我的 Feed 上发布任何内容的权限。
P.S.: 我尝试先注销 (loginManager.logOut()
and/or AccessToken.current = nil
),在这种情况下 .success
分支执行但再次使用同样的错误 "(#200) Requires either publish_actions permission, or manage_pages and publish_pages as an admin with sufficient administrative permission"
.
在这种情况下 AccessToken.current.grantedPermissions
包含:
Set([FacebookCore.Permission(name: "user_friends"),
FacebookCore.Permission(name: "publish_pages"),
FacebookCore.Permission(name: "user_location"),
FacebookCore.Permission(name: "email"),
FacebookCore.Permission(name: "user_likes"),
FacebookCore.Permission(name: "pages_show_list"),
FacebookCore.Permission(name: "manage_pages"),
FacebookCore.Permission(name: "user_photos"),
FacebookCore.Permission(name: "public_profile"),
FacebookCore.Permission(name: "user_posts"),
FacebookCore.Permission(name: "user_birthday")])
所以没有 publish_actions
许可!为什么登录成功但未授予我请求的权限?而且,我明明有"manage_pages"
和"publish_pages"
,为什么还不够呢?
https://developers.facebook.com/docs/graph-api/changelog/breaking-changes#4-24-2018
The publish_actions permission has been removed.
由于他们没有提及任何替代方案,因此无法再post 到用户供稿。
我需要post到用户的 facebook feed。
基于其他几个 SO 问题,我提出了以下 posting 请求:
let request = GraphRequest(graphPath: "me/feed", parameters: ["message" : "Hello world"], accessToken: accessToken, httpMethod: .POST, apiVersion: GraphAPIVersion.defaultVersion)
request.start({ (response, requestResult) in
switch requestResult {
case .failed(let error):
print("error in graph request:", error)
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue {
print(responseDictionary)
}
}
})
由于
这失败了error = {
code = 200;
"fbtrace_id" = GMp2cebddNb;
message = "(#200) Requires either publish_actions permission, or manage_pages and publish_pages as an admin with sufficient administrative permission";
type = OAuthException;
};
根据消息,问题似乎很容易解决 - 我只需要获得 publish_actions
或 manage_pages
和 publish_pages
权限即可。基于这个
let loginManager = LoginManager()
loginManager.logIn([PublishPermission.custom("publish_actions")], viewController: self) { (result) in
print(">> \(AccessToken.current?.grantedPermissions)")
switch result {
case .cancelled:
print(">>>> Cancelled")
case .failed(let error):
print(">>>> Error: \(error)" )
case .success(grantedPermissions: _, declinedPermissions: _, token: let accessToken):
print(">>>> Logged in!")
let request = GraphRequest(graphPath: "me/feed", parameters: ["message" : post], accessToken: accessToken, httpMethod: .POST, apiVersion: GraphAPIVersion.defaultVersion)
request.start({ (response, requestResult) in
switch requestResult {
case .failed(let error):
print("error in graph request:", error)
break
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue {
print(responseDictionary)
}
}
})
}
}
现在 "funny" 部分是,然后 facebook SDK 显示一个页面告诉我我之前使用 Facebook 登录到我的应用程序并询问我是否要继续。当我按继续时,SafariViewController
关闭并执行 .cancelled
分支。这里发生了什么?我没有取消,也没有被要求授予在我的 Feed 上发布任何内容的权限。
P.S.: 我尝试先注销 (loginManager.logOut()
and/or AccessToken.current = nil
),在这种情况下 .success
分支执行但再次使用同样的错误 "(#200) Requires either publish_actions permission, or manage_pages and publish_pages as an admin with sufficient administrative permission"
.
在这种情况下 AccessToken.current.grantedPermissions
包含:
Set([FacebookCore.Permission(name: "user_friends"),
FacebookCore.Permission(name: "publish_pages"),
FacebookCore.Permission(name: "user_location"),
FacebookCore.Permission(name: "email"),
FacebookCore.Permission(name: "user_likes"),
FacebookCore.Permission(name: "pages_show_list"),
FacebookCore.Permission(name: "manage_pages"),
FacebookCore.Permission(name: "user_photos"),
FacebookCore.Permission(name: "public_profile"),
FacebookCore.Permission(name: "user_posts"),
FacebookCore.Permission(name: "user_birthday")])
所以没有 publish_actions
许可!为什么登录成功但未授予我请求的权限?而且,我明明有"manage_pages"
和"publish_pages"
,为什么还不够呢?
https://developers.facebook.com/docs/graph-api/changelog/breaking-changes#4-24-2018
The publish_actions permission has been removed.
由于他们没有提及任何替代方案,因此无法再post 到用户供稿。