ios - Parse Facebook Login/Signup Not Working (Swift) -


i've been frustratingly trying implement parse's facebook login function app using swift on month , can't seem figure out. linked app both facebook , parse separately, can't make parse user using facebook's login. believe appdelegate setup correctly, show loginviewcontroller , knows they're doing can please me out:

import uikit import parse import fbsdkcorekit import fbsdkloginkit   protocol loginviewcontrollerdelegate { func onregister(loginviewcontroller : loginviewcontroller) func onfacebooklogin(loginviewcontroller : loginviewcontroller) func onlogin(loginviewcontroller : loginviewcontroller) }   class loginviewcontroller: uiviewcontroller, fbsdkloginbuttondelegate {  //mark: - outlets  @iboutlet weak var lblstatus: uilabel!  //var delegate : loginviewcontrollerdelegate?  // set permissions required facebook user account let permissions = [ "user_about_me", "user_relationships", "user_location", "user_birthday", "public_profile", "user_friends", "user_email", "user_gender"]  //mark: - initial load  override func viewdidload() {     super.viewdidload()      self.lblstatus.alpha = 0      //facebook     if (fbsdkaccesstoken.currentaccesstoken() != nil)     {         // user logged in, work such go next view controller.     }     else     {         let loginview : fbsdkloginbutton = fbsdkloginbutton() //            self.view.addsubview(loginview) //            loginview.center = self.view.center //            loginview.readpermissions = ["public_profile", "email", "user_friends"]         loginview.delegate = self     }      // ---------------------------- check if user logged in ---------------------     if pfuser.currentuser() != nil {         println("parse: user logged in")         performseguewithidentifier("loggedin", sender: self)     }  }  //mark: - facebook login button  func loginbutton(loginbutton: fbsdkloginbutton!, didcompletewithresult result: fbsdkloginmanagerloginresult!, error: nserror!) {      if ((error) != nil) {         println(error) // process error     } else if result.iscancelled { // handle cancellations     } else {         // if ask multiple permissions @ once,         // should check if specific permissions missing         if result.grantedpermissions.contains("email")         {             // work         }     }     returnuserdata() }  @ibaction func facebooklogindidpress(sender: anyobject) {      self.lblstatus.alpha = 0     pffacebookutils.logininbackgroundwithreadpermissions(self.permissions, block: {         (user: pfuser?, error: nserror?) -> void in         if (user == nil) {             if (error == nil) {                 println("user cancelled fb login")                 self.lblstatus.alpha = 1             }else{                 println("fb login error: \(error)")                 self.lblstatus.alpha = 1             }         } else if user!.isnew {             println("user signed , logged in facebook! \(user)")             self.requestfacebook()             self.returnuserdata()             self.performseguewithidentifier("loggedin", sender: self)         } else {             println("user logged in via facebook \(user)")             self.performseguewithidentifier("loggedin", sender: self)         }     })  }  func requestfacebook() {      let graphrequest : fbsdkgraphrequest = fbsdkgraphrequest(graphpath: "me", parameters: nil)     graphrequest.startwithcompletionhandler({ (connection, result, error) -> void in          if ((error) != nil)         {             // process error             println("error: \(error)")         }         else if error == nil         {              var userdata: nsdictionary = nsdictionary(objectsandkeys: result)              var facebookid: anyobject? = userdata["id"]             var name: anyobject? = userdata["first_name"]             var gender: anyobject? = userdata["gender"]             var birthday: anyobject? = userdata["birthday"]              var pictureurl = "https://graph.facebook.com/\(facebookid)/picture?type=large&return_ssl_resources=1"              var urlrequest = nsurl(string: pictureurl)             var urlrequestneeded = nsurlrequest(url: urlrequest!)               nsurlconnection.sendasynchronousrequest(urlrequestneeded, queue: nsoperationqueue.mainqueue(), completionhandler: {(response: nsurlresponse!,data: nsdata!, error: nserror!) -> void in                 if error == nil {                     var picture = pffile(data: data)                     pfuser.currentuser()!.setobject(picture, forkey: "profilepicture")                     pfuser.currentuser()!.saveinbackground()                 }                 else {                     println("error: \(error.localizeddescription)")                 }             })         }     }) }  func loginbuttondidlogout(loginbutton: fbsdkloginbutton!) {     println("user logged out") }  func returnuserdata() {     let graphrequest : fbsdkgraphrequest = fbsdkgraphrequest(graphpath: "me", parameters: nil)     graphrequest.startwithcompletionhandler({ (connection, result, error) -> void in         if ((error) != nil)         {             // process error             println("error: \(error)")         }         else         {             if let username : nsstring = result.valueforkey("name") as? nsstring {                 println("user name is: \(username)")              } else {println("no username fetched")}              if let useremail : nsstring = result.valueforkey("email") as? nsstring {                 println("user email is: \(useremail)")             } else  {println("no email address fetched")}              if let usergender : nsstring = result.valueforkey("gender") as? nsstring {                 println("user gender is: \(usergender)")             } else {println("no gender fetched") }         }     }) } } 

some important notes make:

  1. i using newest version of parse (1.7.4) , fbsdk (4.1), other methods i've found online not work anymore because functions or members have been removed since then.

  2. the "func loginbutton" used fbsdkloginbutton, while "@ibaction func facebooklogindidpres" regular uibutton tried using logging in. based on i've learned recently, believe uibutton method 1 should go with, 1 leads thread 1: signal sigabrt error stating:

terminating app due uncaught exception 'nsinvalidargumentexception', reason: '+[pffacebookutils logininbackgroundwithreadpermissions:block:]: unrecognized selector sent class 0x10ed3ed80' *** first throw call stack:

...

libc++abi.dylib: terminating uncaught exception of type nsexception (lldb) ""

so placed exception breakpoint , ended @ end of "logininbackgroundwithreadpermissions" function in ibaction console stating:

"[pffacebookutils logininbackgroundwithreadpermissions:block:]: unrecognized selector sent class 0x10dbe2db0 (lldb)"

  1. the last detail feel worth mentioning console states "parse: user logged in" in when run app, there no user created when check parse. getting printed section under "check if user logged in" section of loginviewcontroller's viewdidload function.

i forever grateful can me figure out problem that's been puzzling me far long. thank in advance!

i deleted old pffacebookutils framework, kept pffacebookutilsv4 framework, , solved problem me! helps else problem :)


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -