【问题标题】:How to post to user's facebook feed如何发布到用户的 Facebook 提要
【发布时间】:2018-10-14 19:15:20
【问题描述】:

我需要发布到用户的 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_actionsmanage_pagespublish_pages 权限。基于这个SO question,这似乎很容易,我最终用这个包装了发布代码:

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)
                }
            }
        })
    }
}

现在“有趣”的部分是,然后 facebook SDK 显示一个页面,告诉我我之前使用 Facebook 登录到我的应用程序并询问我是否要继续。当我按下 Continue 时,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",怎么还不够呢?

【问题讨论】:

    标签: ios swift facebook facebook-ios-sdk fbsdk


    【解决方案1】:

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

    publish_actions 权限已被删除。

    由于他们没有提到任何替代方案,因此无法再发布到用户供稿。

    【讨论】:

    • 不是一个好消息,但至少这似乎让我解释了发生了什么
    • 此外,Facebook 删除了发布到用户个人资料中的功能,他们建议使用共享按钮...
    • 嗯,这正是 publish_actions 的目的,在用户个人资料上发布;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多