我在Parse SDK中使用Twitter和Facebook登录。对于每次应用程序启动,我可以登录每个服务一次,但是当我使用 [PFUser 注销] 注销时,我无法再次登录。[PFFacebookUtils logInWithPermissions] 块永远不会因用户或错误而被调用。
我的(脸书)登录代码是:
- (IBAction)facebookLogin:(id)sender {
NSArray *permissionsArray = @[ @"user_about_me" ];
// Login PFUser using Facebook
[PFFacebookUtils logInWithPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
if (!user) {
NSString *errorMessage = nil;
if (!error) {
NSLog(@"Uh oh. The user cancelled the Facebook login.");
errorMessage = @"Uh oh. The user cancelled the Facebook login.";
} else {
NSLog(@"Uh oh. An error occurred: %@", error);
errorMessage = [error localizedDescription];
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
message:errorMessage
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"Dismiss", nil];
[alert show];
} else {
if (user.isNew) {
NSLog(@"User with facebook signed up and logged in!");
} else {
NSLog(@"User with facebook logged in!");
}
}
}];
}
我的注销代码是:
- (IBAction)loginButton:(id)sender {
if([PFUser currentUser]) {
[PFUser logOut];
NSLog(@"User is %@", [PFUser currentUser]);
NSLog(@"Facebook session is %@", [PFFacebookUtils session]);
NSLog(@"Facebook session is %@", FBSession.activeSession.observationInfo);
} else {
[self performSegueWithIdentifier:@"loginScreenSegue" sender:self];
}
}
所有日志(空)。
我假设由于行为与Twitter相同,因此它可能与我的AppDelegate中的OAuth相关方法有关:
- (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
handleOpenURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
但是做了很多研究,似乎没有遗漏任何东西......
我在应用程序代表中也有这些:
- (void)applicationWillResignActive:(UIApplication *)application {
[[PFFacebookUtils session] close];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[PFFacebookUtils session] close];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]];
}
任何帮助将不胜感激!
在注销方法中,您应该清除Facebook会话令牌,如下所示:
[[FBSession activeSession]closeAndClearTokenInformation];
这将清除活动Facebook会话的令牌。
好的,我终于解决了这个问题。问题是在我在Twitter上的应用程序设置中,权限设置为"只读",而不是"读写"。
更改此设置解决了Facebook和Twitter的问题。