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:
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.
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)"
- 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
Post a Comment