Как опубликовать в фиде пользователя на фейсбуке - PullRequest
0 голосов
/ 04 мая 2018

Мне нужно опубликовать в фиде пользователя на 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", так почему этого недостаточно?

1 Ответ

0 голосов
/ 04 мая 2018

https://developers.facebook.com/docs/graph-api/changelog/breaking-changes#4-24-2018

Разрешение publish_actions было удалено.

Поскольку они не упоминают никакой альтернативы, больше нет возможности публиковать в фиде пользователей.

...