Hello. I have implemented Facebook SDK login, i followed the instructions carefully. The app shows safari view controller, asks for user to login, after successful login, asks for app permissions, and once the user clicks on OK, it crashes on line 26 or 27 with message
[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[2]’
Here’s the complete code of the delegate method in AppDelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
backendless = Backendless.sharedInstance()
//for twitter
let tresultuser = backendless?.userService.handleOpen(url as URL!)
if tresultuser != nil {
self.gotoMain()
return true
}
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String
let fbresult = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
let gresult = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: nil)
if fbresult {
let token = FBSDKAccessToken.current()
let fieldsMapping = [
"name" : "name",
"email": "email"
]
backendless?.userService.login( withFacebookSDK: token, fieldsMapping: fieldsMapping,
response: { (user) -> Void in
print("user: \(user)")
self.gotoMain()
},
error: { (fault) -> Void in
print("Server reported an error: \(fault)")
})
}
return gresult || fbresult
}
Hi Zeba,
I see you get a user object back on line 26. Have you verified in debugger what that object contains?
Mark
Hi Mark, the app crashes before printing that line.
What version of the SDK do you use?
Is the app on the 3.x or the 4.0 backend?
And the version of the SDK?
It must be latest. I’ve just written pod ‘Backendless’ in podfile
Just so we have the same environment when reproducing the error, could you run “pod list” from a command line and let us know the version?
Also, is it the latest version of the Facebook SDK?
Finally, is the user object created in the Users table? Does it have both “email” and name" properties?
Okay Mark, here it is
my podfile just has these
pod ‘Backendless’
pod ‘FBSDKCoreKit’
pod ‘FBSDKLoginKit’
pod ‘FBSDKShareKit’
but pod list shows these
Backendless 4.0b3
Backendless-Light 3.0.44
Backendless-bis 3.0.44
Backendless-ios-SDK 3.0.44
Backendless-osx-SDK 3.0.43
Facebook-PromiseKit 0.1.0
Facebook-iOS-SDK 4.1.0
Facebook-iOS-SDK-RACExtensions 0.0.1.1
FacebookCore 0.2.0
FacebookImagePicker 2.0.11
FacebookLogin 0.2.0
FacebookManager 0.0.1
FacebookPicture 0.0.1
FacebookPopover 0.1.1
FacebookShare 0.2.0
It looks like the app uses the 4.0 library, but works with the 3.x backend. Could you check if the initApp call takes two (4.0) or three (3.x) arguments?
ohhh. It takes 3 arguments: app id, secret, and version number
how do i specify 3.x library in podfile? i could update that and see if it works
Try this:
pod ‘Backendless’, ‘~> 3.0’
Using Backendless (3.0.44)
I see there is a build 3.0.46, which has not been published to Cocoapods (it will hide the 4.0 build). Could you grab the library from the link below and see if the problem goes away?
Someone from the team corrected me saying that both 3.045 and 3.0.46 should be in Cocoapods. Could you try running “pod update” from the root directory of the project (the one where podspec file is at) and see if it updates it to the latest one?
Hi Mark! I just updated to backendless 3.0.46 via cocoapods.
Its throwing the same error
Thanks for verifying. Is the user created in the Users table? Are there values for name and email?
Yes Mark - the user was registered earlier as beckendless user. The app allows social login only for users registered as accounts previously.
And it was working fine when i was using easy facebook login. i had to switch to using SDK because easy login was launching out to safari app which apple doesnt accept - i needed SVC and i was told to use fbSDK for it.