2012-08-09 18 views
15

Próbowałem rozwijać aplikację na iOS za pomocą Facebooka i jestem nowy. Próbowałem więc zalogować się za pomocą Facebooka, zalogować się za pomocą Facebooka, wykonać samouczek na Facebooku i spróbować go zaimplementować.Nowa sesja Facebook SDK FBSessionOpenWithPermissions

Ale napotkałem, nie znaleziono [FBSession sessionOpenWithPermissions]. Po uruchomieniu aplikacji wymusi zamknięcie i wypowie komunikat o błędzie. Podczas budowania projektu, pokaże ostrzeżenie

żółty wykrzyknik że sessionOpenWithPermission nie znajduje się w FBSession

Tutorial nieaktualne? Jeśli tak, to jaki jest nowy kod dla nowego zestawu SDK serwisu Facebook dla

sessionOpenWithPermission?

+3

Myślę, że to valid- Mam ten sam problem z przykładu Facebooku . –

+1

Jest to wyraźnie problem niedopasowania dokumentacji. Proponuję zapoznać się z przykładową aplikacją "Scrumptious" dostarczaną z SDK do aktualnej dokumentacji. – Bringo

+4

występuje niedopasowanie w samouczku do dokumentacji i w próbce. Powinieneś użyć '- (BOOL) openSessionWithAllowLoginUI: (BOOL) allowLoginUI;' zamiast tego. –

Odpowiedz

0

Wystarczy kopiowanie @Stas Zhukovskiy odpowiedź w komentarzach do skrzynki odpowiedź:

występuje niezgodność w tutorialu Docs i próbki. Powinieneś użyć - (BOOL) openSessionWithAllowLoginUI: (BOOL) allowLoginUI; zamiast. - Stas Zhukovskiy

1

Możliwy duplikat Facebook iOS SDK 3.0 Login Tutorial Issue with FBSession

//REPLACE 
[FBSession sessionOpenWithPermissions:nil 
        completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { 
         [self sessionStateChanged:session state:state error:error]; 
        }]; 

//WITH 
[FBSession openActiveSessionWithPermissions:nil 
           allowLoginUI:YES 
          completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
           [self sessionStateChanged:session state:state error:error]; 
          }]; 
0

można również użyć Sharekit Jest to bardzo łatwe do wdrożenia, a także wsparcie dla innych sieci społecznych. sharekit

Share kit tutorial

1

Otwiera facebook seesion i ewentualnie pokazuje UX LOGIN

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"email", 
          @"user_likes", 
          nil]; 
    return [FBSession openActiveSessionWithReadPermissions:permissions 
               allowLoginUI:allowLoginUI 
             completionHandler:^(FBSession *session, 
                  FBSessionState state, 
                  NSError *error) { 
              [self sessionStateChanged:session 
                   state:state 
                   error:error]; 
             }];} 
+0

viruss mca. Jakie zmiany wprowadzono w moim kodzie – ArunMak

0

Niektóre kod linii brakuje w ryzach App Delegate.Just że one.after że u sprawdzi otwarte sesja sesyjna i zamknięta w momencie wywoływania metody na Facebooku.

2

Spróbuj ten kod

account = [[ACAccountStore alloc] init]; 
    accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; 
    arrayOfAccounts = [account accountsWithAccountType:accountType]; 


    appDelegate= (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    chk=appDelegate.chk_login; 

    if (!appDelegate.session.isOpen) { 
     // create a fresh session object 
     appDelegate.session = [[FBSession alloc] init]; 
     if (appDelegate.session.state == FBSessionStateCreatedTokenLoaded) { 
      // even though we had a cached token, we need to login to make the session usable 
      [appDelegate.session openWithCompletionHandler:^(FBSession *session, 
                  FBSessionState status, 
                  NSError *error) { 
       // we recurse here, in order to update buttons and labels 

      }]; 
     } 
    } 
+0

Ponieważ 'FBSession' ma statyczną zmienną publiczną' activeSession', nie musisz zapisywać sesji w delegacie aplikacji. – Zorayr

2

Może ten kod pomaga, umieścić go w swojej klasie AppDelegate.m

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: { 
      self.loggedinVCController = [[LoggedinVC alloc] initWithNibName:@"LoggedinVC" bundle:nil]; 
      self.navController = [[UINavigationController alloc]initWithRootViewController:self.loggedinVCController]; 
      self.window.rootViewControlle`enter code here`r = self.navController; 

     } 
      break; 
     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
      // Once the user has logged in, we want them to 
      // be looking at the root view. 
      [self.navController popToRootViewControllerAnimated:NO]; 

      [FBSession.activeSession closeAndClearTokenInformation]; 

      self.viewController = [[SampleViewController alloc] initWithNibName:@"SampleViewController" bundle:nil]; 
      self.window.rootViewController = self.viewController; 

      break; 
     default: 
      break; 
    } 

    if (error) { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Error" 
            message:error.localizedDescription 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 
- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 
- (void)openSession 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
} 
Powiązane problemy