在我的应用程序中使用facebook登录时,始终返回错误FBErrorCategoryUserCancelled

时间:2014-01-21 05:13:04

标签: facebook ios7 uialertview

在我的应用程序中,有三种登录方式。其中一个是用facebook登录。但是,当我点击Facebook按钮时,它会询问我是否有权访问权限,点击OK后,它会重新发送错误FBErrorCategoryUserCancelled。并且这不会发生在每个设备上,它发生在某些设备上。这是我的代码 -

if ([[FBSession activeSession]isOpen]) {
    /*
     * if the current session has no publish permission we need to reauthorize
     */
    if ([[[FBSession activeSession]permissions]indexOfObject:@"publish_actions"] == NSNotFound) {

        [[FBSession activeSession] requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends
                                              completionHandler:^(FBSession *session,NSError *error){

                                                  [ProgressHUD dismiss];
                                                  self.view.userInteractionEnabled = YES;

                                              }];

    }else{

        [self fetchUserDetails];
    }

}else{
    /*
     * open a new session with publish permission
     */
    [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                       defaultAudience:FBSessionDefaultAudienceOnlyMe
                                          allowLoginUI:YES
                                     completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                         if (!error && status == FBSessionStateOpen) {

                                             [self fetchUserDetails];

                                         }else{

                                             NSLog(@"error");

                                             if ([FBErrorUtility shouldNotifyUserForError:error]) {
                                                 alertTitle = @"Facebook Error";
                                                 alertMessage = [FBErrorUtility userMessageForError:error];

                                                 // This code will handle session closures that happen outside of the app
                                                 // You can take a look at our error handling guide to know more about it
                                                 // https://developers.facebook.com/docs/ios/errors
                                             } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession) {
                                                 alertTitle = @"Session Error";
                                                 alertMessage = @"Your current session is no longer valid. Please log in again.";

                                                 // If the user has cancelled a login, we will do nothing.
                                                 // You can also choose to show the user a message if cancelling login will result in
                                                 // the user not being able to complete a task they had initiated in your app
                                                 // (like accessing FB-stored information or posting to Facebook)

                                             } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) {
                                                 NSLog(@"user cancelled login");

                                                 alertTitle  = @"Facebook Error";
                                                 alertMessage = @"System login cancelled";

                                                 // For simplicity, this sample handles other errors with a generic message
                                                 // You can checkout our error handling guide for more detailed information
                                                 // https://developers.facebook.com/docs/ios/errors
                                             } else {
                                                 alertTitle  = @"Something went wrong";
                                                 alertMessage = @"Please try again later.";
                                                 NSLog(@"Unexpected error:%@", error);
                                             }

                                                 [[[UIAlertView alloc] initWithTitle:alertTitle
                                                                             message:alertMessage
                                                                            delegate:nil
                                                                   cancelButtonTitle:@"OK"
                                                                   otherButtonTitles:nil] show];

                                             [ProgressHUD dismiss];
                                             self.view.userInteractionEnabled = YES;

                                         }
                                     }];
}

任何帮助都将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在我的情况下,这是因为Facebook应用程序的沙箱模式仍然打开,因此对于不是应用程序的管理员/开发人员/测试人员的任何人都会导致FBErrorCategoryUserCancelled。

要在Facebook上关闭沙盒模式,请转到 https://developers.facebook.com/apps/YOUR_FACEBOOK_APP_ID/review-status/

查看它的位置“你想让这个应用程序及其所有实时功能向公众开放吗?”,使它成为YES。 (您可能需要先插入联系电子邮件才能访问此选项)。

或者,如果您还不想让应用程序公开,请邀请测试人员成为应用程序的管理员/开发人员/测试人员。此人需要先接受您的邀请才能使用。