Facebook 权限 iOS

Facebook Permissions iOS

所以我在摆弄 Facebook 的 iOS SDK,并设法让用户登录到我的应用程序。我在故事板上有一个 UIView 设置,它是 FBSDKLoginButton class,根据 this,它只是 UIButton 的子 class。然后我创建了一个 @IBOutlet weak var facebookLogInBtn: FBSDKLoginButton!。然后我去设置我的权限

override func viewDidLoad()
{
    super.viewDidLoad()

    facebookLogInBtn.delegate = self
    facebookLogInBtn.readPermissions = ["public_profile", "email", "user_friends"]
}

这工作得很好,完成了我想要的任务和我需要的任何额外权限,我只是将它们附加到 facebookLoginBtn.readPermissions 数组。但是在谷歌搜索之后,我发现了一堆使用 FBSDKGraphRequestFBSDKLoginManager 的网站。以这个 blog 为例。现在我的问题是:

  1. 我的方式被认为是可以接受的还是有问题的?它有效,但我只是想确定我是否遵循标准程序。
  2. 我的方法如何以某种方式与通过图表获取数据联系起来 API?因为我明确没有声明任何 FBSDKRequestFBSDKLoginManager 对象。我只是添加了我的按钮,然后实现了它的 delegates 瞧!我正在访问。无需解析任何 JSON 数据或任何东西。
  3. 我还注意到,这些网站中的大多数实际上从未将它们的 UIView 变成 FBSDKLoginButton 的 class。这可能是他们必须处理所有事情的原因吗'manually'?

如有任何帮助,我们将不胜感激。 干杯!

我的做法是正确的,但我无法用它检索任何用户数据。使用 FBSDKLoginManager 对象,Facebook 会为我处理所有事情,它只会 return 用户的最终响应(同意与否),但没有我通过 readPermissions 数组请求的任何实际数据。对于任何数据检索;甚至可能写道,我必须为它创建一个 FBSDKGraphRequest 对象。总之,我最终让 Facebook 使用 FBSDKLoginManager 处理登录和注销,成功后,我使用 FBSDKGraphRequest 检索用户数据,如下所示

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
{
    if error != nil
    {
       print("Facebook Log In Failed")
       print(error.localizedDescription)
    }

    let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "\(FacebookPermission.NAME), \(FacebookPermission.FIRST_NAME), \(FacebookPermission.LAST_NAME), \(FacebookPermission.EMAIL)"])

    graphRequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result:AnyObject!, error: NSError!) in

        if error == nil
        {
            print("Data retrieval was successful")
        }
        else
        {
            print("Facebook Graph Request Error")
            print(error)
        }
    }
}