Ios 检查Facebook帐户是否链接到PFUser
在解析文档中,它说您可以检查用户是否链接到Facebook帐户,但有没有办法反过来检查?例如,假设用户单击一个按钮登录Facebook,因为Ios 检查Facebook帐户是否链接到PFUser,ios,facebook,parse-platform,Ios,Facebook,Parse Platform,在解析文档中,它说您可以检查用户是否链接到Facebook帐户,但有没有办法反过来检查?例如,假设用户单击一个按钮登录Facebook,因为[PFUser currentUser]为零(因为用户尚未登录),Parse将为该用户创建一个新帐户,因为您无法使用[PFFacebookUtils isLinkedWithUser:[PFUser currentUser]。似乎只有在用户定期登录(即输入用户名和密码)后才能链接帐户,但这确实很不方便。如果用户已经手动创建了一个帐户(通过填写我提供的注册表)
[PFUser currentUser
]为零(因为用户尚未登录),Parse将为该用户创建一个新帐户,因为您无法使用[PFFacebookUtils isLinkedWithUser:[PFUser currentUser]
。似乎只有在用户定期登录(即输入用户名和密码)后才能链接帐户,但这确实很不方便。如果用户已经手动创建了一个帐户(通过填写我提供的注册表),然后决定链接他们的Facebook帐户,该怎么办?那么,还有什么方法可以检查Facebook帐户是否与一般用户链接,而不是检查特定用户的链接呢?好的,这是解决方案。基本上是对每个用户进行迭代,看看Facebook帐户是否与此相关。在此基础上,链接或创建一个新帐户。以下是代码:
PFQuery *userQuery = [PFUser query];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSUInteger count = [objects count];
BOOL linked = NO;
for(NSUInteger i = 0; i < count; i++){
PFUser *checkUser = objects[i];
if([PFFacebookUtils isLinkedWithUser:checkUser]){
linked = YES;
NSLog(@"profile is linked to a user");
break;
}
}
if(linked == YES){
[PFFacebookUtils logInWithPermissions:_permissions block:^(PFUser *user, NSError *error) {
if(!user){
NSLog(@"facebook cancelled");
}
else{
_type = @"twitter";
[self performSegueWithIdentifier:@"showMain" sender:self]; }
}
];
}
else{
CCAlertView *ask = [[CCAlertView alloc]initWithTitle:@"Are you already registered" message:nil];
[ask addButtonWithTitle:@"No" block:^{
[PFFacebookUtils logInWithPermissions:_permissions block:^(PFUser *user, NSError *error) {
if(!user){
NSLog(@"Facebook cancelled");
}
else if(user.isNew){
_type = @"facebook";
[self performSegueWithIdentifier:@"showMain" sender:self]; }
else{
[self performSegueWithIdentifier:@"showMain" sender:self]; }
}];
}];
[ask addButtonWithTitle:@"Yes" block:^{
CCAlertView *log = [[CCAlertView alloc]initWithTitle:@"Enter username and password" message:nil];
[log setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
UITextField *un = [log textFieldAtIndex:0];
UITextField *pw = [log textFieldAtIndex:1];
[log addButtonWithTitle:@"Cancel" block:nil];
[log addButtonWithTitle:@"Enter" block:^{
[PFUser logInWithUsernameInBackground:[un text] password:[pw text] block:^(PFUser *user, NSError *error) {
if(user){
[PFFacebookUtils linkUser:user permissions:_permissions block:^(BOOL succeeded, NSError *error) {
if(succeeded){
NSLog(@"linked");
[self performSegueWithIdentifier:@"showMain" sender:self]; }
else{
NSLog(@"couldnt link");
}
}];
}
else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Oops!" message:[error userInfo] delegate:self cancelButtonTitle:nil otherButtonTitles:@"okay", nil];
[alert show];
}
}];
}];
[log show];
}];
[ask show];
}
}];
PFQuery*userQuery=[PFUser query];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误){
NSU整数计数=[对象计数];
BOOL-linked=NO;
对于(整数i=0;i
我的理解是,如果有人已经将登录链接到Facebook,如果他们在另一台设备上使用Facebook登录,例如,它将链接到同一个解析用户,因此[PFUser currentUser]
将返回旧用户,而不是新用户。我相信这里概述的方法可以而且应该避免,根据@timothy walters对原始帖子问题的评论