Мне нужно опубликовать в фиде пользователя на Facebook.
На основании нескольких других вопросов SO я получил следующий запрос на публикацию:
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)
}
}
})
}
}
Теперь «забавная» часть состоит в том, что SDK facebook показывает страницу, сообщающую мне, что я ранее вошел в свое приложение через Facebook, и спрашивает, хочу ли я продолжить. Когда я нажимаю «Продолжить», SafariViewController
закрывается и ветвь .cancelled
выполняется. Что здесь происходит? Я не отменил и не попросил предоставить разрешения на публикацию чего-либо в моем фиде.
P.S .: Сначала я попытался выйти из системы (loginManager.logOut()
и / или 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"
, так почему этого недостаточно?