链接Parse和Facebook会导致Facebook会话结束

时间:2014-08-06 21:20:53

标签: ios facebook parse-platform

我在我的iOS应用程序中使用Parse作为后端,我正在尝试使用FBLoginView来允许用户使用Facebook登录。

我也试图将用户的Facebook帐户链接到他们的Parse帐户。当我尝试使用

将用户链接到他们的FB时
if (![PFFacebookUtils isLinkedWithUser:user]) {
    [PFFacebookUtils linkUser:user permissions:nil block:^(BOOL succeeded, NSError *error) {
        if (succeeded) {
            NSLog(@"Woohoo, user logged in with Facebook!");
        }
    }];
}

我收到错误,告诉我Facebook会话无效。我已经确定上面的代码似乎正在关闭Facebook会话(当我注释掉代码时,会话没有关闭)并给我错误。有没有人有过这个错误的经验?

2 个答案:

答案 0 :(得分:0)

您的其他应用是否使用Parse作为后端?

存储在PFFacebookUtils中的用户状态与从FBLoginView返回的用户不同。

如果您的代码如下所示:

#pragma mark FBLoginViewDelegate {
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                        user:(id<FBGraphUser>)user {

    // link current user
    NSLog(@"User: %@", user);

    if (![PFFacebookUtils isLinkedWithUser:user]) {
        [PFFacebookUtils linkUser:user permissions:nil block:^(BOOL succeeded, NSError *error) {
            if (succeeded) {
                NSLog(@"Woohoo, user logged in with Facebook!");
            }
        }];
    }
}

然后,您当前正在将Facebook用户对象与PFUser链接,这些用户对象不兼容。我建议使用FBLoginView返回的数据,并以传统方式创建解析用户:

#pragma mark FBLoginViewDelegate {
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user {

    // link current user
    NSLog(@"User: %@", user);

    NSString *username = user[@"email"];
    NSString *password = user[@"id"];

    [PFUser logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) {
        NSLog(@"User: %@", user);
        if (error.code == 101) {
            // sign up
            PFUser *user = [PFUser user];
            user.username = username;
            user.password = password;
            [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
                NSLog(@"Error: %@", error);
            }];
        }
    }];
}

现在[PFUser currentUser]将返回一个基于您的Facebook登录名创建的解析用户对象。如果删除/重新安装该应用程序,则下次用户进入该应用程序时,FBLoginView将返回将用于登录以作为现有用户进行解析的用户标识。

编辑:我遇到的类似问题是使用FBLogin,PFFacebookUtils以及任何其他最近的Facebook应用登录,如果我的手机已将Facebook集成到iOS设置中。它似乎与Facebook的Apple集成以及新的Facebook SDK有关。这很烦人但我必须告诉我的用户从设置中删除他们的Facebook信息,然后他们可以使用PFFacebookUtils或上面的过程登录。我希望这很快得到解决。

答案 1 :(得分:-1)

对于问题的第一部分,我找到了一种方法,只需使用Facebook和Parse即可将用户登录到我的应用程序。实际上,一旦用户使用此功能,您可以检查应用程序的数据浏览器并检查auth数据字段以及我在应用程序中请求的所有fb数据的配置文件。

这是我使用fb登录的代码,但以前的用户与fb帐户相关联

 - (IBAction)loginButtonTouchHandler:(id)sender  {
// The permissions requested from the user
NSArray *permissionsArray = @[ @"user_about_me", @"user_relationships", @"user_birthday", @"user_location"];

// Login PFUser using Facebook
[PFFacebookUtils logInWithPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
    //[_activityIndicator stopAnimating]; // Hide loading indicator

    if (!user) {
        if (!error) {
            NSLog(@"Uh oh. The user cancelled the Facebook login.");
        } else {
            NSLog(@"Uh oh. An error occurred: %@", error);
        }
    } else if (user.isNew) {
        NSLog(@"User with facebook signed up and logged in!");
        //Go to your next view

    } else {
        NSLog(@"User with facebook logged in!");
        //Go to your next view
    }
}];

}

希望这有帮助!