Войти через facebook на iPhone без перенаправления в веб-браузер?

Я использовал вход в систему через Facebook в своем приложении, и он работает хорошо. Я использую Facebook sdk 3.10, но он просто перенаправляет меня в веб-браузер и открывает страницу входа в Facebook с разрешением pr, если сеанс уже существует, но я не хочу таким образом, я хочу, чтобы всплывающее окно входа в Facebook, как в предыдущих SDK, должно было открыться, и там я заполняю учетные данные, мой код ниже, пожалуйста, что я могу изменить в этом, чтобы сделать то же самое.

NSArray *permissions =[NSArray arrayWithObjects:@"email",@"user_location",@"user_about_me",@"user_photos",@"xmpp_login", nil];
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
    [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
[FBSession openActiveSessionWithReadPermissions:permissions
                                   allowLoginUI:YES
                              completionHandler:^(FBSession *session,
                                                  FBSessionState status,
                                                  NSError *error)
 {
     // if login fails for any reason, we alert
     if (error) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                         message:error.localizedDescription
                                                        delegate:nil
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil];
         [alert show];
     }
     else if (FB_ISSESSIONOPENWITHSTATE(status))
     {
         FBRequest *me = [[FBRequest alloc] initWithSession:session
                                                  graphPath:@"me?fields=id,picture.type(large),first_name,last_name,email,gender,birthday,username,hometown"];
         [me startWithCompletionHandler:^(FBRequestConnection *connection,
                                          NSDictionary<FBGraphUser> *aUser,
                                          NSError *error)
         {
             fbDetails = [[NSDictionary alloc]init];
             fbDetails=[aUser copy];
             facebookDetail = [appParser getUserFbDetail:fbDetails];

         }];
     }
 }];

person iGagan Kumar    schedule 20.12.2013    source источник


Ответы (1)


Используйте следующий метод, чтобы открыть всплывающее окно FBLogin

-(void)openFacebookAuthentication
{
    NSArray *permission = [NSArray arrayWithObjects:kFBEmailPermission,kFBUserPhotosPermission, nil];

    FBSession *session = [[FBSession alloc] initWithPermissions:permission];

    [FBSession setActiveSession: [[FBSession alloc] initWithPermissions:permission] ];

    [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {

        switch (status) {
            case FBSessionStateOpen:
                [self getMyData];
                break;
            case FBSessionStateClosedLoginFailed: {
                // prefer to keep decls near to their use
                // unpack the error code and reason in order to compute cancel bool
                NSString *errorCode = [[error userInfo] objectForKey:FBErrorLoginFailedOriginalErrorCode];
                NSString *errorReason = [[error userInfo] objectForKey:FBErrorLoginFailedReason];
                BOOL userDidCancel = !errorCode && (!errorReason || [errorReason isEqualToString:FBErrorLoginFailedReasonInlineCancelledValue]);


                if(error.code == 2 && ![errorReason isEqualToString:kFBSdkUserLoginFail]) {
                    UIAlertView *errorMessage = [[UIAlertView alloc] initWithTitle:kFBAlertTitle
                                                                           message:kFBAuthenticationErrorMessage
                                                                           delegate:nil
                                                                           cancelButtonTitle:kOk
                                                                           otherButtonTitles:nil];
                    [errorMessage performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
                    errorMessage = nil;
                    }
                }
                break;
                // presently extension, log-out and invalidation are being implemented in the Facebook class
            default:
                break; // so we do nothing in response to those state transitions
        }
    }];
    permission = nil;
}
person Rigel Networks    schedule 20.12.2013
comment
Большое спасибо @Divya Bhalodiya, это сработало, и еще одно, нет возможности закрыть всплывающее окно, если я хочу отменить вход в систему, есть ли какой-либо вариант для того же - person iGagan Kumar; 20.12.2013
comment
@GaganKumar есть проблема с загрузкой, коснитесь левого верхнего угла, есть кнопка закрытия, но, к сожалению, некоторое время она скрывается. - person Nitin Gohel; 20.12.2013
comment
Да, может быть проблема с загрузкой, потому что у меня она работает без сбоев. Если этот ответ решил вашу проблему, примите мой ответ. - person Rigel Networks; 20.12.2013