Выбор «Не сейчас» при принятии приложения вызывает ошибку com.facebook.sdk2

Использование Facebook iOS SDK 3.1.

Когда я решил не разрешать «Подключение» к приложению Facebook, я застрял в том, что Facebook выдает «com.facebook.sdk error2». ошибки у меня, даже после переустановки моего приложения.

Действия по воспроизведению:

  1. Выберите подключение к Facebook
  2. Выберите «Не сейчас» во всплывающем окне UIAlertView.

=> Я не могу снова подключиться.

Единственный способ для пользователя снова подключиться — это удалить свою учетную запись Facebook из настроек и снова добавить ее.

Является ли это ошибкой в ​​SDK Facebook или я что-то упустил?

Я, очевидно, следовал руководству по авторизации, и все работает нормально (авторизация, публикация материалов) при выборе подключения.


person Kristofer Sommestad    schedule 27.09.2012    source источник


Ответы (2)


Итак, я понял, что здесь происходит. При отклонении авторизации приложения это сохраняется как настройка в учетной записи Facebook вашего устройства (Настройки > Facebook).

Перейдя в «Настройки» и повторно включив соответствующее приложение, вы можете попытаться снова подключиться. Не очень понятно для пользователей, но вы можете поймать эту ошибку и показать пользователю какую-то информацию.

Вот как я это реализовал (по сравнению с обработкой ошибок Facebook по умолчанию):

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState)state
                      error:(NSError *)error {
....

if (error) {
        NSString *errorTitle = NSLocalizedString(@"Error", @"Facebook connect");
        NSString *errorMessage = [error localizedDescription];
        if (error.code == FBErrorLoginFailedOrCancelled) {
            errorTitle = NSLocalizedString(@"Facebook Login Failed", @"Facebook Connect");
            errorMessage = NSLocalizedString(@"Make sure you've allowed My App to use Facebook in Settings > Facebook.", @"Facebook connect");
        }

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorTitle
                                                            message:errorMessage
                                                           delegate:nil
                                                  cancelButtonTitle:NSLocalizedString(@"OK", @"Facebook Connect")
                                                  otherButtonTitles:nil];
        [alertView show];
    }

}

person Kristofer Sommestad    schedule 27.09.2012
comment
Вы также проверили, что произойдет, если вы деавторизуете свое приложение Facebook через настройки конфиденциальности Facebook на facebook.com? Вы получаете ту же ошибку или другую и как это влияет на настройки Facebook на устройстве? - person borisdiakur; 27.09.2012
comment
Нет, но, глядя только на код ошибки, я предполагаю, что это будет та же ошибка. - person Kristofer Sommestad; 27.09.2012
comment
+1. Хорошее решение. Сообщение об ошибке Facebook по умолчанию должно быть более описательным, как ваше. - person hughesdan; 30.09.2012
comment
Джейсон Кларк (похоже, инженер facebook) дал недавний ответ на этот вопрос, предлагающий способ решения проблемы без перенаправления пользователя к настройкам устройства. Вот ветка: stackoverflow.com/questions/12601191/ - person borisdiakur; 30.09.2012
comment
может быть вопрос n00b, но где вы добавили в этой обработке ошибок? - person ohayon; 30.01.2013
comment
@ohwutup В методе -sessionStateChanged:state:error. Дополнительные сведения см. в шаге 4 (Реализация процесса входа) в руководстве Facebook: developers.facebook.com/docs/howtos/. - person Kristofer Sommestad; 31.01.2013
comment
@KristoferSommestad В настройках - мое приложение ВКЛЮЧЕНО. Но он все еще показывает эту ошибку. - person sathiamoorthy; 20.02.2013
comment
@sathiamoorthy Да, я тоже это видел. Иногда он ведет себя странно; Мне пришлось переключать его между вкл-выкл-вкл, чтобы заставить его работать. А в некоторых случаях мне даже приходилось переустанавливать приложение, чтобы оно заработало. - person Kristofer Sommestad; 20.02.2013
comment
@KristoferSommestad Мне следует переустановить приложение. это единственный способ преодолеть эту проблему?. - person sathiamoorthy; 21.02.2013
comment
@sathiamoorthy Для меня это всегда решало проблему. Тем не менее, я думаю, что иногда это решалось путем переключения переключателя включения / выключения вперед и назад, но я не могу вспомнить, всегда ли это помогало (или действительно ли это была переустановка, которая действительно помогла) ... - person Kristofer Sommestad; 21.02.2013

У меня была такая же проблема, когда я пытался войти в Facebook с помощью платформы Facebook, когда учетная запись добавляется в настройки, но я исправил это, используя следующий код:

насколько я знаю "com.facebook.sdk error2". приходит, когда в iphone добавляется учетная запись.

appdelegate.h

@property (сильное, неатомарное) FBSession *mysession;

просто добавьте метод в appdelegate.m

-(void)openSessionWithAllowLoginUI:(BOOL)allowLoginUI{

    if (!self.mysession.isOpen) {
        // create a fresh session object
        self.mysession = [[FBSession alloc] initWithPermissions:permissions];
    }

        [self.mysession openWithCompletionHandler:^(FBSession *session,
                                                    FBSessionState stat,
                                                    NSError *error){
            [self sessionStateChanged:session
                                state:stat
                                error:error];
         NSLog(@"Session Staet is = %u",stat);

            switch (stat){
                case FBSessionStateClosed:
                    break;
                case FBSessionStateOpen:{
                        NSString *strAccessToken1 = [mysession accessToken];
                        NSLog(@"AccessToken = %@",strAccessToken1);
                        NSString  *urlstring1 = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@",strAccessToken1];

                        NSURL *url1 = [NSURL URLWithString:[urlstring1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
                        NSString  *jsonRes = [NSString stringWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];
                        NSDictionary *facebookData = [jsonRes JSONValue];
                        NSLog(@"FBSessionStateOpen = %@",facebookData);

                        NSString *strFBID = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@",[facebookData objectForKey:@"id"]]];

                        NSString *strName = [[NSString alloc]initWithString:[facebookData objectForKey:@"name"]];

                        NSLog(@"FBSessionStateOpen = %@",strName);

                        NSString *ProfileImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture",strFBID];

                        NSLog(@"Profile image URL is = %@",ProfileImageURL);

                        NSString *strImageURl = [[NSString alloc]initWithString:ProfileImageURL];

                        strAccessToken = [[NSString alloc]initWithString:strAccessToken1];
                        strAppUserName = [[NSString alloc]initWithString:strName];
                        strFacebookUsername = [[NSString alloc]initWithString:strName];
                        strAppUserProfileImage = [[NSString alloc]initWithString:strImageURl];
                        strFacebookUserId = [[NSString alloc]initWithString:strFBID];

                    break;
                }
                default:
                    break;
            }
      }];
}

это в моем методе действия

-(IBAction)Facebook_Btn_Clicked:(id)sender{
        [appDelegate openSessionWithAllowLoginUI:YES];

      }
person Vinod Singh    schedule 25.10.2012