解析 Facebook logInInBackgroundWithReadPermissions (Swift)

Posted

技术标签:

【中文标题】解析 Facebook logInInBackgroundWithReadPermissions (Swift)【英文标题】:Parse Facebook logInInBackgroundWithReadPermissions (Swift) 【发布时间】:2015-04-12 05:00:22 【问题描述】:

我已成功设置 Parse (1.7.1) SDK 和 Facebook(v4) SDK,设置桥接头文件和 AppDelegate.swift。现在在我的 ViewController 中,我正在尝试创建一个 Facebook 登录,并且我正在尝试使用'Parse ios Documentation - Facebook SignUp & Login' 中给出的代码。

  PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, 
     (user: PFUser!, error: NSError!) -> Void in
       if let user = user 
        if user.isNew 
           println("User signed up and logged in through Facebook!")
         else 
           println("User logged in through Facebook!")
        
        else 
         println("Uh oh. The user cancelled the Facebook login.")
        
    ) 

但是,当我将它粘贴到我的 ViewController.swift > ViewDidLoad 中时,我收到了这个错误:

- Extra argument in call      // for  at the first line

谁能帮我解决这个问题?

编辑:给出的脚本在语法方面对我有用,但是,现在我不断收到“呃,不。用户取消了 Facebook 登录。”甚至在它请求许可之前;虽然 facebook 页面仍在加载.. 我正在尝试的用户已经被这个特定的应用程序接受。 看一看: http://imgur.com/5yDs1s1

【问题讨论】:

【参考方案1】:

当我升级到 swift 1.2 时,我遇到了同样的问题。似乎与新编译器的某种更严格的语法检查有关。此更改对我有用:

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) 
        (user: PFUser?, error: NSError?) -> Void in
        if let user = user 
            if user.isNew 
                println("User signed up and logged in through Facebook!")
             else 
                println("User logged in through Facebook!")
            
         else 
            println("Uh oh. The user cancelled the Facebook login.")
        
    

【讨论】:

我正要开始认为这个问题与我有关.. 可能 Parse 文档和 Swift 1.2 存在问题 为了清楚起见,您将 PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, (user: PFUser!, error: NSError!) -> Void in 替换为 PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) (user: PFUser? , 错误: NSError?) -> Void in 这对我来说用 swift 1.2 工作得很好 语法现在工作正常;但是我得到“哦,哦。用户取消了 Facebook 登录。”在控制台中甚至在 Facebook 登录页面打开之前(在我被定向到 Safari 中的 Facebook 页面之前)。为了清楚起见,我的代码放在 ViewDidLoad t 为我工作。可以延迟通话吗?我有一个链接到一个按钮的呼叫。我注意到您正在自动登录(应该没问题)。我认为最新版本还有其他一些登录错误。例如,我也遇到这种情况:developers.facebook.com/bugs/1139436116081834 太棒了!我想知道您在“自动登录”场景中遇到的情况是否与我在之前评论中发布的错误有关?【参考方案2】:

我通过在 ViewDidLoad 中添加此代码找到了解决方法:

   if PFUser.currentUser() != nil 

        self.performSegueWithIdentifier("loginSegue", sender: self)

    

一起放置在按钮中:

   @IBAction func Facebook(sender: AnyObject) 

    var permissions = ["public_profile"]

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions)  (user: PFUser?, error: NSError?) -> Void in
        if let user = user 
            if user.isNew 
                println("User signed up and logged in through Facebook!")

                self.facebookButton.alpha = 0



                self.performSegueWithIdentifier("signUp", sender: self)

             else 

               println("User logged in through Facebook!")

                self.facebookButton.alpha = 0

                 let currentUser = PFUser.currentUser()

                self.performSegueWithIdentifier("loginSegue", sender: self)

            

         else 

            println("Uh oh. The user cancelled the Facebook login.")

            println("User cancelled")

        


    

也在 App Delegate 中:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    Parse.setApplicationId("###",
        clientKey: "###")

    PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)

    PFUser.enableRevocableSessionInBackground()


    return true

      func application(application: UIApplication,
    openURL url: NSURL,
    sourceApplication: String?,
    annotation: AnyObject?) -> Bool 
        return FBSDKApplicationDelegate.sharedInstance().application(application,
            openURL: url,
            sourceApplication: sourceApplication,
            annotation: annotation)

桥接头:

  #import <FBSDKCoreKit/FBSDKCoreKit.h>
  #import <ParseFacebookUtilsV4/PFFacebookUtils.h>
  #import <Parse/Parse.h>
  #import <Bolts/Bolts.h>
  #import <FBSDKLoginKit/FBSDKLoginKit.h>

我不知道它有多真实,但它解决了我的问题

【讨论】:

【参考方案3】:

我遇到了同样的问题,但是代码在更改为后对我有用:

PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions)  (user: PFUser?, error: NSError?) -> Void in

【讨论】:

语法现在工作正常;但是我得到“哦,哦。用户取消了 Facebook 登录。”在控制台中甚至在 Facebook 登录页面打开之前(在我被定向到 Safari 中的 Facebook 页面之前)。为了清楚起见,我的代码放在 ViewDidLoad.. 这和我的回答有什么不同吗? 没有。我说语法是有效的,所以应用程序没有崩溃。问题是我得到了第三个条件,即“呃不”部分。显然,here too。你的那个工作正常并且你让用户登录吗? 你发现了吗?我大部分时间都在关注这个问题。 Senty 回复的第一个答案为我提供了解决方案:这需要在 IBAction 的范围内才能工作(它在 viewDidLoad 中不起作用)。

以上是关于解析 Facebook logInInBackgroundWithReadPermissions (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 解析 facebook

解析facebook登录问题?

更改 PFUser 用户名,解析与 Facebook 集成

解析 JSON Facebook 对话 XCODE

PHP - 解析 Facebook 帖子 JSON

解析集成 Facebook 登录