使用 Parse iOS 登录 Facebook 和 twitter 只能使用一次
Posted
技术标签:
【中文标题】使用 Parse iOS 登录 Facebook 和 twitter 只能使用一次【英文标题】:Facebook and twitter login with Parse iOS only works once 【发布时间】:2014-12-30 09:41:25 【问题描述】:我在 Parse SDK 中使用 twitter 和 Facebook 登录。对于每个应用程序启动,我可以登录每个服务一次,但是当我使用 [PFUser logOut] 注销时,我无法再次登录。 [PFFacebookUtils logInWithPermissions] 块永远不会被用户或错误调用。
我的 (Facebook) 登录代码是:
- (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]];
但是已经做了很多研究,似乎没有遗漏任何东西......
我在 AppDelegate 中也有这些:
- (void)applicationWillResignActive:(UIApplication *)application
[[PFFacebookUtils session] close];
- (void)applicationWillTerminate:(UIApplication *)application
[[PFFacebookUtils session] close];
- (void)applicationDidBecomeActive:(UIApplication *)application
[FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]];
任何帮助都将非常感激!
【问题讨论】:
您使用的是匿名用户吗? 首先,您在 LOGIN 方法中调用注销用户,这与您要实现的目标相反。此外,每次应用退出活动状态时,您都会关闭会话 - 这发生在屏幕锁定和主页按钮上。你确定你想要那个逻辑吗? @soulshined - 谢谢,我没有使用匿名用户,我将其关闭。 @Ivan - 我的登录按钮是一个切换按钮 - 所以当登录按钮更改为“注销”并且当用户注销时,它将对登录视图控制器执行模态 segue - 谢谢对于关闭会话 cmets,我在疲惫和绝望时将其添加到 applicationWillResignActive! 【参考方案1】:在您的注销方法中,您应该清除 Facebook 会话令牌,如下所示:
[[FBSession activeSession]closeAndClearTokenInformation];
这将清除活动 Facebook 会话的令牌。
【讨论】:
谢谢 - 我已经添加了这一点,但没有区别。我只是尝试使用 ParseUI 而不是我自己的登录视图控制器,但问题完全相同,这让我认为它是外部的东西或 appDelegate 中的东西。【参考方案2】:好的,我终于解决了这个问题。问题是在我在 Twitter 上的应用设置中,权限设置为“只读”,而不是“读写”。
更改此设置解决了 facebook 和 twitter 的问题。
【讨论】:
以上是关于使用 Parse iOS 登录 Facebook 和 twitter 只能使用一次的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)
通过 Facebook iOS Parse.com 登录用户
调用 Parse Facebook 登录时的 SIGABRT 信号
iOS:使用 Parse 获取 Facebook 的用户数据