使用Parse iOS的Facebook和Twitter登录只能使用一次



我在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的问题。

最新更新