我刚刚更新了我的Parse和Facebook SDK(分别为1.7.1和4.0) - 我可能会加入这两种工作都是一种绝对的痛苦!
但是,当我尝试使用Facebook登录时,我现在收到209错误。
以下是我的代码示例:
- (void)loginWithFacebook:(HMSuccessBlock)completion{
NSArray *permissionsArray = @[@"user_about_me",@"user_location",@"user_friends",@"user_relationships"];
// Login PFUser using Facebook
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
if (!user) {
NSLog(@"Uh oh. The user cancelled the Facebook login.");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"Dismiss", nil];
[alert show];
completion(NO, error);
} else if (user.isNew) {
NSLog(@"User signed up and logged in through Facebook!");
if (completion) {
completion(YES, nil);
}
} else {
NSLog(@"User logged in through Facebook!");
completion(YES, nil);
}
}];
}
以下是[错误]:会话令牌无效(代码:209,版本:1.7.1)
我最初的想法是问题与app代理中的代码有关 - 在旧版本的facebooksdk上我会应用以下代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
但是我似乎无法在更新版本中找到任何可以复制此内容的内容,因此我的代码是
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
非常感谢任何帮助。
答案 0 :(得分:34)
从模拟器或手机中删除应用,然后重建并重新运行应用。有时旧令牌会被缓存。我刚刚为我的应用解决了这个问题。
答案 1 :(得分:18)
查看此页面:https://parse.com/tutorials/session-migration-tutorial
您的应用最有可能使用旧版会话令牌。您可以在设置应用ID和客户端密钥后立即将此添加到您的应用委托中,以迁移到可撤销会话令牌。
[PFUser enableRevocableSessionInBackground];
Parse的网站上有一节处理此错误,可能对您有所帮助:https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS
答案 2 :(得分:7)
发布的一些答案是临时修复 - 但是如果用户退出并尝试重新登录,问题可能会再次发生 - 我认为这是因为我也允许匿名用户 - 这是我清除它的唯一方法是在登录之前调用[pfuser logout]
答案 3 :(得分:2)
我认为还需要采取更多措施:
您必须在[FBSDKAppEvents activateApp]
中添加applicationDidBecomeActive
。
你应该写
return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
中方法didFinishLaunchingWithOptions
中的AppDelegate
。
尝试上述步骤应该适合您。
答案 4 :(得分:0)
对于可撤消的会话,如果将其相应的Session对象从“解析云”中删除,则您当前的会话令牌可能无效。如果您实现的会话管理器UI 让用户注销其他设备,或者您通过云代码,REST API或数据浏览器手动删除会话,则可能会发生这种情况。会话也可能由于自动过期而被删除(如果在应用程序设置中配置)。当设备的会话令牌不再与Parse Cloud上的会话对象相对应时,来自该设备的所有API请求都将失败,并显示“错误209:无效的会话令牌”。