Eri*_*ric 43 facebook ios parse-platform
我正在尝试使用Parse在我的iOS应用程序中实现Facebook登录.
let permissionsArray = ["public_profile", "email"]
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissionsArray)
{ (user: PFUser?, error: NSError?) in
if let user = user {
//we logged in!
}
else {
//login error!
}
}
Run Code Online (Sandbox Code Playgroud)
这在模拟器中很有效,但在设备上却不行.在设备上,我收到此错误:
Error Domain = com.facebook.sdk.login Code = 308"无法完成操作.(com.facebook.sdk.login错误308.)
错误代码308用于FBSDKLoginBadChallengeString"登录响应缺少有效的质询字符串".
在我在Facebook上授权我的应用程序之后,这会被调用:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)
网址是:
fb1640722449492705://authorize/#state=%7B%22challenge%22%3A%225OKWv3wN%2BEH%2BeQu48Xv6ty%2BRuek%3D%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A1%2C%220_auth_logger_id%22%3A%22564CD915-2CFC-4989-9AF6-CEA389908D51%22%7D&granted_scopes=user_birthday%2Cpublic_profile&denied_scopes=&signed_request=c8SBBDeaNpF-R_XTYx4LRA0BWm5p9IwXDr8M4nL3YXI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUURhTXJibGw4Q3dITkd5M0xnQmNkVTNuYWRkeEVoTU5mMmx3eFpZU2IwZl9SU284YXhZdXZaRS02RnA2bU5Cdy1CWkVoRmt2Zk1xX1AxSHltUG00aWhkWE9hYmlvWFBiMnpCYkVnR1RRX3lzZVFIZXdHU19OcmpkNUF6WGtob1dfVE4wTmRrSGk5MzY0V2hFWUJDV0dfcE16RXpQVExHWE13X1dzb0QzZGtITm5fM0tHNjFxUjJyM3RDWVlNQTE4WENpS1dXTHUyM2dIRVhmTXc3ZTQ0M2xDQUtGRl9KSXcyVk1sS01FOTQ4dHQ2U1Fqb0tlVkp4RmJNSEFsWDZFYWxlUnQ2aGRrTGZlU2xuVTV5VjZ1bFhldHkxeEV5RmRDZVFHb2RXQ0dULVVCd3QyM0haY0dxNk8zbnE1cDRNWjNFZ012U2JhSGZyMmF6Wm8xUXk2X2xSQVNWcFlMVDZUdU5wZnMwVkJqNEdSaFEiLCJpc3N1ZWRfYXQiOjE0MzM0MTg2MDksInVzZXJfaWQiOiIxNDM3MzM0ODk5OTIwNDA5In0&access_token=CAAXUOnbG6uEBANtAd9DzWBSu4LLOEcPsu86Ny0Ir
是的,我遵循了Parse的Facebook登录指南中的所有内容(确保所有捆绑ID都匹配,实现了所有必需的AppDelegate方法等).
这个错误究竟是什么意思,你如何解决它?
lou*_*uth 15
我退出时只看到此错误,然后重新登录.
我的登录和注销代码位于不同的文件中,因为登录和注销的相关UI完全不同,我已经实例化了两个单独的FBSDKLoginManager实例.合并到只有一个实例解决了我的问题.
Obj*_*Sal 15
我在使用FBSDKLoginKit 4.7.1和FBSDKCoreKit 4.8时,也遵循了totvos的解决方法,并为我工作.
解决方法...构建应用程序并将其复制到手机,然后从设备(而不是调试器)启动应用程序.然后,将调试器附加到正在运行的进程.这似乎解决了任何时间问题打破了这一点,并且各种钥匙串操作似乎在调试时正常工作.
参考:https://forums.developer.apple.com/thread/4743#85335
更新:
这种解决方法并不是一直有效,所以我最终使用@ coco的答案:https://stackoverflow.com/a/31480026/877225
Lol*_*z89 15
显然,唯一对我有用的解决方案是为目标添加Keychain Sharing Entitlement.
您可以在Project_name-> target_name-> Capabilities-> Keychain Sharing中找到它
coc*_*oco 14
我升级到以下时发现了这个问题:
FBSDKCoreKit 4.4.0
FBSDKLoginKit 4.4.0
FBSDKShareKit 4.4.0.
Run Code Online (Sandbox Code Playgroud)
当我降级到:
FBSDKCoreKit 4.2.0
FBSDKLoginKit 4.1.0
FBSDKShareKit 4.1.0
Run Code Online (Sandbox Code Playgroud)
我没有机会发现升级在什么时候导致这种情况 - 例如,我可以坚持使用4.3.0这三个?
Eri*_*ric 11
固定它.此问题是由使用Parse 和 with 登录引起的FBSDKLoginButton.
这就是我在做的事情:
//in my UI setup code:
let fbLoginButton = FBSDKLoginButton()
fbLoginButton.addTarget(self, action: "fbButtonTouched:", forControlEvents: UIControlEvents.TouchUpInside)
....
func fbButtonTouched() {
let permissionsArray = ["public_profile", "email"]
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissionsArray)
{ (user: PFUser?, error: NSError?) in
if let user = user {
//we logged in!
}
else {
//login error!
}
}
}
Run Code Online (Sandbox Code Playgroud)
我发现(硬盘的方式),其敲击一个FBSDKLoginButton试图登录的用户!没有必要也记录用户使用PFFacebookUtils.logInInBackgroundWithReadPermissions.所以我摆脱了fbButtonTouched(),我可以愉快地登录.
所以发生的事情是我在同一时间尝试两次登录,模拟器很满意,但不是设备.
如果你想知道原因,那是因为它收到的登录验证挑战与它所期望的不一致,因为它在第二次登录时从第一次登录中收到了一次尝试,因此等待第二次登录尝试的身份验证质询.
该文档FBSDKLoginButton目前没有提及任何关于点击它启动登录流程的事实,并且因为它是它的子类UIButton,你认为你应该addTarget自己实现登录流程.同时进行两次登录会导致误导FBSDKLoginBadChallengeString.灾难食谱......
编辑:文档已相应更新:
FBSDKLoginButton与工作[FBSDKAccessToken currentAccessToken],以确定要显示什么,并自动挖掘时开始认证(即你不需要手动订阅行动目标).
(我的重点)
尝试直接从您的设备运行您的应用程序,而无需从您的Xcode启动它.然后登录到Facebook没有受到308的困扰.之后,您可以恢复从Xcode启动到您的设备没有相同的问题.
这似乎是FB SDK和iOS之间的问题,与Parse无关.如果有人能在这个问题上给我们启发,我会很感激.
我的Xcode版本是7.1,FB SDK是4.8.x.
我正在使用
pod 'FBSDKCoreKit', '~> 4.8.0'
pod 'FBSDKLoginKit', '~> 4.8.0'
pod 'FBSDKShareKit', '~> 4.8.0'
Run Code Online (Sandbox Code Playgroud)
... code 308当我在同一会话期间注销并登录时出现问题.在调用之前使用[[FBSDKLoginManager alloc] logOut]或[facebookLoginManager logOut](使用持久性管理器)logInWithReadPermissions:不起作用,但添加
[FBSDKAccessToken setCurrentAccessToken:nil];
[FBSDKProfile setCurrentProfile:nil];
Run Code Online (Sandbox Code Playgroud)
在logInWithReadPermissions:通话工作正常之前.(在iOS 9.2中测试过.)
| 归档时间: |
|
| 查看次数: |
25813 次 |
| 最近记录: |