Избирането на „Не сега“ при приемане на приложението причинява грешка com.facebook.sdk2

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

Когато избирам да не разреша „Свързване“ към приложение на Facebook, оставам с това, че Facebook извежда „com.facebook.sdk error2“. грешки при мен, дори след повторно инсталиране на приложението ми.

Стъпки за възпроизвеждане:

  1. Изберете да се свържете с Facebook
  2. Изберете „Не сега“ в UIAlertView, което изскача

=> Не мога да избера да се свържа отново.

Единственият начин потребителят да се свърже отново е да премахне своя Facebook акаунт от Настройки и да го добави отново.

Това бъг във Facebook SDK ли е или пропускам нещо?

Очевидно следвах урока за упълномощаване и всичко работи добре (удостоверяване, публикуване на неща), когато избрах да се свържа.


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 framework, когато акаунт е добавен в настройката, но поправих това, като използвах следния код:

доколкото знам "com.facebook.sdk error2." идва, когато има добавен акаунт в iphone.

appdelegate.h

@свойство (силен, неатомичен) 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