【问题标题】:Share With Facebook Not Working Anymore on iOS 11在 iOS 11 上与 Facebook 共享不再工作
【发布时间】:2017-09-25 01:45:14
【问题描述】:

我使用适用于 iOS 的 Facebook SDK,它在 iOS 10 上运行良好,但是当我将手机升级到 iOS 11 时,Facebook 共享不再工作。请帮忙,提前谢谢。

【问题讨论】:

    标签: ios swift facebook swift3 facebook-share


    【解决方案1】:

    不幸的是,随着 iOS 11 的更新,社交网络服务(Facebook、Twitter、Vimeo 和 Flickr)已被删除,这些服务曾经具有单点登录以实现全系统集成。

    改为将此 sn-p 用于 iOS 10 及之前的版本

    let viewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
    viewController.add(imageView.image!)
    viewController.add(URL(string: "http://www.example.com/"))
    viewController.setInitialText("Text to post!")
    
    self.present(viewController!, animated: true, completion: nil)
    

    您可以使用FBSDKGraphRequest在 Facebook 上发帖。

    首先从 Facebook 开发者控制台创建您的应用。之后,设置您的 Xcode 项目(按照此处的说明操作:https://developers.facebook.com/docs/ios/getting-started/)。

    发帖前需要登录用户:

        let login: FBSDKLoginManager = FBSDKLoginManager()
            login.logIn(withPublishPermissions: ["publish_actions"], from: self) { (result, error) in
    
                if (error != nil) {
                    print("publish_actions: \(error!)")
                } else if (result?.isCancelled)! {
                    print("publish_actions: Canceled")
                } else if (result?.grantedPermissions.contains("publish_actions"))! {
                    print("publish_actions: permissions granted: \(String(describing: result?.token.tokenString))")
    
                    UserDefaults.standard.set(result?.token.tokenString, forKey: "facebook_token")
    
                }
    
            }
    

    记录后保存令牌并使用它通过 FBSDKGraphRequest 发布消息:

    FBSDKGraphRequest.init(graphPath: "me/feed",
                               parameters: ["message": "text to post on Facebook"],
                               tokenString: "token",
                               version: "v2.10",
                               httpMethod: "POST").start(completionHandler: { (connection, result, error) -> Void in
                                if let error = error {
                                    print("Error: \(error)")
                                } else {
                                    print("Posted successfully!")
                                }
                               })
    

    希望对您有所帮助。

    【讨论】:

    • 感谢帮助我找到了解决此问题的快速方法,我更新了我的 pod 文件并解决了问题,但感谢帮助人员。
    • @JosephMikkoManoza,感谢您记录此问题并为我节省了一些时间。将我的 Facebook pod 升级到最新版本为我解决了这个问题。我添加了一个答案来帮助别人。
    • 我不确定您为什么要将令牌字符串存储在 UserDefaults 中。您始终可以使用 FBSDKAccessToken.current() 获取当前令牌,包括权限等。
    【解决方案2】:

    iOS 11 的 Facebook Share(在我的例子中是 Objective-c 中的 FBSDKShareDialog)的这个问题已通过升级到最新的 Facebook API 框架得到解决。通过 pods,目前如下:

    播客文件

      pod 'FBSDKCoreKit', '~> 4.27.0'
      pod 'FBSDKLoginKit', '~> 4.27.0'
      pod 'FBSDKShareKit', '~> 4.27.0'
    

    在命令提示符下,使用“pod search”将显示 pod 的最新版本。比如pod搜索FBSDKShareKit

    【讨论】:

    • 为我工作!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多