2015-09-15 9 views
5

stavo usando questo codice di login FB:Come si utilizza l'accesso in Facebook SDK 4.6 per iOS?

@IBAction func fbloginbtn(sender: AnyObject) { 

    FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email","user_location","user_about_me", "user_photos", "user_website"], handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in 
     if (error == nil){ 
      let fbloginresult : FBSDKLoginManagerLoginResult = result 
      if(fbloginresult.grantedPermissions.contains("email")) 
      { 
       if((FBSDKAccessToken.currentAccessToken()) != nil){ 
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in 
         if (error == nil){ 
          //do sth 
         } 
        }) 
       } 
      } 
     } 
    }) 
} 

Ma loginwithreadpermissions è deprecato in SDK 4.6

Come dovrei cambiare questo codice?

+0

Giusto per assicurarsi, 4.6 è la versione ** SDK di Facebook **, giusto? Non la versione ** SDK di iOS **? (Sarebbe troppo vecchio). –

+1

oh scusa si è Facebook SDK per iOS –

+0

Forse è ovvio per qualcuno che abbia familiarità con l'SDK di Facebook, ma per tutti gli altri potrebbe essere leggermente confuso. Grazie per averlo risolto –

risposta

13

Se guardi la documentazione, vedrai anche la menzione di api alternative. Dalla documentazione di FBSDKLoginManager, si dice:

- (void)logInWithReadPermissions:(NSArray *)permissions 
         handler:(FBSDKLoginManagerRequestTokenHandler)handler 
__attribute__((deprecated("use logInWithReadPermissions: fromViewController:handler: instead"))); 

Quindi c'è un nuovo metodo, che prende un parametro aggiuntivo di UIViewController pure, per determinare da dove è stata avviata la sequenza di login. Come documentazione dice:

- (void)logInWithReadPermissions:(NSArray *)permissions 
       fromViewController:(UIViewController *)fromViewController 
       handler:(FBSDKLoginManagerRequestTokenHandler)handler; 

e la spiegazione per i parametri dice:

fromViewController - L'unità di controllo al fine di presentare da. Se nulla, il controller di visualizzazione in primo piano verrà determinato automaticamente come possibile come .

Poiché c'è un solo parametro aggiuntivo, è possibile aggiungere alla implementazione esistente in questo modo:

FBSDKLoginManager().logInWithReadPermissions(["public_profile", "others"], 
          fromViewController:self //<=== new addition, self is the view controller where you're calling this method. 
          handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in 
}) 

L'ultima Xcode dovrebbe anche suggerire quando si scrive, logInWithReadPermissions con tutte le opzioni disponibili.

+1

Un esempio in swift sarebbe perfetto per me da principiante a capire. –

+0

Vedi la mia modifica, ho aggiunto un semplice codice per swift. –

+0

@AdilSoomro Ho usato per verificare se il mio token era valido per determinare se l'utente aveva bisogno di accedere nuovamente. Hai qualcosa su questo? Questo era il mio codice: "if ([FBSession activeSession] .state == FBSessionStateOpen)". – Felipe