Всегда возвращать ошибку FBErrorCategoryUserCancelled при входе в facebook в моем приложении - программирование
Подтвердить что ты не робот

Всегда возвращать ошибку FBErrorCategoryUserCancelled при входе в facebook в моем приложении

В моем приложении есть три способа входа. одним из них является логин с 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;

                                         }
                                     }];
}

Любая помощь будет оценена. Спасибо.

4b9b3361

Ответ 1

В моем случае это было связано с тем, что режим песочницы для приложения facebook по-прежнему включен, и, следовательно, результат FBErrorCategoryUserCancelled для всех, кто не является администратором/разработчиком/тестером приложения.

Чтобы отключить режим песочницы на facebook, перейдите к https://developers.facebook.com/apps/YOUR_FACEBOOK_APP_ID/review-status/

Посмотрите, где написано: "Вы хотите сделать это приложение и все его живые функции доступными для широкой публики?", сделайте это "ДА". (Возможно, вам придется вставить контактное письмо, прежде чем вы сможете получить доступ к этой опции).

Или, если вы не хотите, чтобы приложение стало общедоступным, попросите тестера быть администратором/разработчиком/тестером приложения. Человек должен принять ваше приглашение, прежде чем он сможет его использовать.