我在我的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会话(当我注释掉代码时,会话没有关闭)并给我错误。有没有人有过这个错误的经验?
答案 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
}
}];
}
希望这有帮助!