IOSparsingPFLoginViewController didLoginUser当通过Facebooklogin时没有调用委托,为什么?

这是一个非常奇怪的问题,因为我的Facebooklogin工作之前,我更新到Xcode 6和iOS 8.为了使这更奇怪的Twitter工作出色,但Facebook没有调用didLogincallback。

这是我在我的AppDelegate中做的事情:

@interface AppDelegate : UIResponder <UIApplicationDelegate, NSURLConnectionDataDelegate, UITabBarControllerDelegate, PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate> 

然后,我在application:didFinishLaunchingWithOptions:设置了Facebook和Twitter application:didFinishLaunchingWithOptions:

 [Parse setApplicationId:PARSE_APPLICATION_ID clientKey:PARSE_CLIENT_KEY]; [PFFacebookUtils initializeFacebook]; [PFTwitterUtils initializeWithConsumerKey:TWITTER_CONSUMER_KEY consumerSecret:TWITTER_CONSUMER_SECRET]; 

设置这些之后,我设置我的rootViewController像这样:

 self.welcomeViewController = [[ConfigViewController alloc] init]; self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController]; [self.navController setNavigationBarHidden: NO]; self.window.rootViewController = self.navController; [self.window makeKeyAndVisible]; 

在我的ConfigViewControllerviewDidAppear ,我做了以下检查:

 // Force logout for testing //[(AppDelegate *)[[UIApplication sharedApplication] delegate] logOut]; // If not logged in, present login view controller if (![PFUser currentUser]) { [(AppDelegate *)[[UIApplication sharedApplication] delegate] presentLoginViewControllerAnimated:NO]; return; } // Present UI [(AppDelegate *)[[UIApplication sharedApplication] delegate] presentTabBarController]; 

此时如果用户没有login,在presentLoginViewControllerAnimated发生以下情况:

 // Customize the Log In View Controller loginViewController = [[LoginViewController alloc] init]; loginViewController.delegate = self; loginViewController.facebookPermissions = @[@"email",@"public_profile",@"user_friends"]; loginViewController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsTwitter | PFLogInFieldsFacebook | PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten | PFLogInFieldsLogInButton; // Customize the Sign Up View Controller signUpViewController = [[SignupViewController alloc] init]; signUpViewController.delegate = self; signUpViewController.fields = PFSignUpFieldsDefault; loginViewController.signUpController = signUpViewController; [self.welcomeViewController presentViewController:loginViewController animated:NO completion:nil]; 

这里提供了loginViewController。 如果用户点击Twitterbutton,他将毫无困难地login。 如果点击Facebookbutton,Facebook确认屏幕出现,我点击确定,然后返回到我的loginViewController。 我需要这个被称为:

 - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user 

这样我可以closuresloginViewController并执行任何其他操作。 任何想法为什么这可能发生?

同样,为什么loginViewController:didLogInUser:委托不被Facebook调用?

任何帮助是极大的赞赏!

[编辑]

经过多次testing和许多令人头痛的事情,这是最新的。

如果我搞砸了我的Info.plist中的URL Schemes架构,它的作品。 我将URL Schemes的名称更改为URL Scheme ,出现以下错误:

 FBSDKLog: Cannot use the Facebook app or Safari to authorize, fb6************** is not registered as a URL Scheme 

即使我得到这个错误,我得到一个屏幕popuplogin到FaceBook。 我填写了,我在,它的工作原理,我可以loginFacebook。 这似乎并不方便,但它工作。

其他testing/我尝试的东西是下载Facebook应用程序,并尝试login,没有Facebook应用程序(通过Safari)login,在我的welcomeViewController而不是我的AppDelegate执行委托,并更新Parse / Facebook SDKs。

我认为这个问题可能与开放Facebook或Safari等其他应用程序有关。 我倾向于这个原因是因为Twitter的屏幕是一个模式popup视图,它没有问题。 当Facebook给我这个错误,它不会切换到Safari或Facebook的应用程序,而是显示模式popuplogin,它工作正常。 这导致我相信,这个问题是关于切换应用程序,而不是正确接收callback。

我也有第三个login选项,我忽略了提及。 这个第三个选项只需要在没有社交媒体帐户的情况下注册,这也是可行的。

巨大的感谢,马特唐指着我在正确的方向。

事实certificate,我不小心删除/注释了这3个callback的部分,这是问题的根源。 最后,我的解决scheme是实现application:handleOpenURL:application:openURL:sourceApplication:annotation:

 // Facebook oauth callback - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [FBSession.activeSession handleOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication withSession:[PFFacebookUtils session]]; } 

并取消注释这一行:

 [FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]]; 

我在这个callback里面有这个内容:

 - (void)applicationDidBecomeActive:(UIApplication *)application; 

对我来说,原因是切换到testingFB应用程序,在那里你需要改变appID。 这些请求有不同的令牌,特别是我使用的前一个令牌(不是在FB上创build一个testing应用程序后生成的令牌)。

我的解决scheme是从模拟器中删除应用程序,并再次运行。