通过Facebook iOS Parse.com登录用户
我正试图在parse.com应用程序中通过facebook登录用户。我已经准备好了所有的id和appdelegate方法 我在故事板中创建了一个视图,并将其设置为facebook登录按钮,然后将其作为iAction连接到我的.h文件 我的代码:通过Facebook iOS Parse.com登录用户,ios,objective-c,facebook,parse-platform,Ios,Objective C,Facebook,Parse Platform,我正试图在parse.com应用程序中通过facebook登录用户。我已经准备好了所有的id和appdelegate方法 我在故事板中创建了一个视图,并将其设置为facebook登录按钮,然后将其作为iAction连接到我的.h文件 我的代码: - (IBAction)fblogin:(FBSDKLoginButton *)sender { [PFFacebookUtils logInInBackgroundWithReadPermissions:@[@"public_profile",
- (IBAction)fblogin:(FBSDKLoginButton *)sender {
[PFFacebookUtils logInInBackgroundWithReadPermissions:@[@"public_profile", @"email"] block:^(PFUser *user, NSError *error) {
if (error) {
// NSLog(@"Uh oh. The user cancelled the Facebook login.");
UIAlertView *alertVeiw = [[UIAlertView alloc] initWithTitle:@"Sorry" message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertVeiw show];
} else if (!user) {
UIAlertView *alertVeiw = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"You cancelled Login, try again!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertVeiw show];
}else {
// NSLog(@"User logged in through Facebook!");
// [self dismissViewControllerAnimated:YES completion:NULL];
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"first_name, last_name, email, public_profile"}];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
if (error)
{
UIAlertView *alertVeiw = [[UIAlertView alloc] initWithTitle:@"Sorry" message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertVeiw show];
} else if ([[error userInfo][@"error"][@"type"] isEqualToString: @"OAuthException"]) { // Since the request failed, we can check if it was due to an invalid session
// NSLog(@"The facebook session was invalidated");
[PFFacebookUtils unlinkUserInBackground:[PFUser currentUser]];
}
else {
NSDictionary *userData = (NSDictionary *)result;
// [self requestFacebookUser:user];
NSString *name = userData[@"name"];
NSString *email = userData[@"email"];
user.username = name;
user.email = email;
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
{
if (error)
{
UIAlertView *alertVeiw = [[UIAlertView alloc] initWithTitle:@"Sorry" message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertVeiw show];
}
else {
// [self dismissViewControllerAnimated:NO completion:nil];
//[self.navigationController popToRootViewControllerAnimated:NO];
[self performSegueWithIdentifier:@"inbox" sender:self];
}
}];
}
}];
}
}];
}
当我按下“登录facebook”按钮,然后我们登录时,faccebook网页就会打开,然后什么也没发生
请帮助我一步一步正确地实现facebook登录
编辑:
应用程序代表:
[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
applicationWillEnterForeGround:
[FBSDKAppEvents activateApp];
#import <ParseFacebookUtils/PFFacebookUtils.h> //fb login for parse
....
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[PFFacebookUtils initializeFacebook]; //fb login for parse
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
....
[FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]]; //fb login for parse
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[PFFacebookUtils session] close];
}
然后:
除了你(Santilee)的回答外,我还有以下方法:
- (void)loginViewFetchedUserInfo:(FBSDKLoginManager *)loginView
user:(FBSDKProfile*)user {
}
-(void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error{
// [self performSegueWithIdentifier:@"inbox" sender:self];
}
-(void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton{
}
-(void)loginButtonClicked{
}
我还得到了这个错误,它的视图不在窗口层次结构中 以下是我是如何做到这一点的,它对我很有用。 首先,将其导入m文件:
#import <ParseFacebookUtils/PFFacebookUtils.h>//fb login for parse
下面是我如何配置应用程序内委托:
[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
applicationWillEnterForeGround:
[FBSDKAppEvents activateApp];
#import <ParseFacebookUtils/PFFacebookUtils.h> //fb login for parse
....
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[PFFacebookUtils initializeFacebook]; //fb login for parse
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
....
[FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]]; //fb login for parse
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[PFFacebookUtils session] close];
}
#导入//fb登录进行解析
....
-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项{
...
[PFFacebookUtils initializeFacebook];//用于解析的fb登录
返回YES;
}
-(无效)应用IDBECOMEACTIVE:(UIApplication*)应用{
....
[FBAppCall HandledIDBecMeactiveWithSession:[PFFacebookUtils session];//fb登录以进行分析
}
-(BOOL)应用程序:(UIApplication*)应用程序
openURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplication
注释:(id)注释{
返回[FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils会话]];
}
-(无效)申请将终止:(UIApplication*)申请{
[[PFFacebookUtils会话]关闭];
}
谢谢您的回答,但我仍然无法回答,请参阅上面的问题了解我的方法和我在应用程序中的权限。一旦用户登录,我们进入收件箱大约2秒钟,然后它返回登录状态@SANITLEEE也没有在后端创建任何用户。我的意思是,实际上要转到“设置”->“Facebook”->“您的姓名”->,然后删除您的帐户并重试。它是用来帮我的。我也得到了这个错误,它的视图不在窗口层次结构中!