2015-11-02 9 views
5

Ho aggiunto l'ultimo SDK di Facebook al mio progetto XCode 7.1 scritto per iOS 9.1. Purtroppo tutto quello che so è Swift, non Obiettivo C. Facebook's developer site documentation ha solo la documentazione in Obiettivo C. Ogni ricerca su Google rivela documentazione troppo obsoleta perché le cose sono cambiate così tanto negli ultimi 6 mesi. Quindi sono un po 'perso.Come posso accedere a Facebook utilizzando Swift 2.0 e iOS 9.1?

Ho fatto tutte le cose facili con il file plist.

sono stato in grado di utilizzare:

import FBSDKCoreKit 
import FBSDKLoginKit 

ho anche aggiunto:

return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 

e

return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 

Per il mio file AppDelegate.swift. Tutto funziona e si costruisce con successo. Ho anche aggiunto le strutture corrette, ovviamente. Oltre questo punto sono fermo perché non conosco la sintassi per l'aggiunta di un pulsante di login, per catturare quello che presumo verrebbero restituite stringhe json con token e altre informazioni del profilo che posso usare per memorizzare nell'account dell'utente, ecc.

risposta

8

Sei sulla strada giusta.

Have you set up your pList yet?

Dovrai da aggiungere al vostro VC, aggiungere un pulsante di accesso, affrontare delegato, e poi trattare con informazioni FB. Qualcosa di simile (ma non esattamente) questo:

class yourVC: UIViewController, FBSDKLoginButtonDelegate, UITextFieldDelegate 

{ 
var loginView : FBSDKLoginButton = FBSDKLoginButton() 

viewDidLoad() { 
      loginView.frame = CGRectMake(20, 20, theWidth-40, 40) 
      self.view.addSubview(loginView) 
      loginView.readPermissions = ["public_profile", "email", "user_friends","user_birthday"] 
      loginView.delegate = self 

} 

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 
     if ((error) != nil) 
     { 
     //handle error 
     } else { 
       returnUserData() 
     } 
    } 

func returnUserData() 
    { 


    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id,interested_in,gender,birthday,email,age_range,name,picture.width(480).height(480)"]) 
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 

     if ((error) != nil) 
     { 
      // Process error 
      print("Error: \(error)") 
     } 
     else 
     { 
      print("fetched user: \(result)") 
      let id : NSString = result.valueForKey("id") as! String 
      print("User ID is: \(id)") 
      //etc... 
     } 
     }) 
} 

Dovrai giocare con la parte returnData() per farlo bene, ma questo codice dovrebbe farti il ​​90% della strada.

Ho incluso una vasta gamma di permessi (età dell'utente, interessato, ecc.), Ma dovrete configurarli da soli. Onestamente questa parte (la parte difficile) è molto simile alla sua controparte C oggetto, che è molto meglio documentata. Basta scaricare alcuni progetti in cui funziona e cercare di analizzarli insieme in qualcosa che si adatti alle tue fantasie.

Può essere difficile far funzionare tutto, ma provatelo e continuate a farlo!

+2

Questo funziona! Probabilmente capirò il resto. Grazie! –

+1

Questo è fantastico, il bit returnUserData() aiuta molto. Grazie per aver fatto il miglio supplementare su quella parte. Ciò ha reso la mia giornata davvero facile. –

+0

Ahha nessun problema. Tutto questo è stato un inferno per me. Ho pensato di salvare qualcuno delle lacrime/sangue. – MQLN

4

Se si desidera eseguire il login da Facebook sul click del pulsante personalizzato, ciò contribuirà a:

@IBAction func onClickFacebookButton(sender: UIButton){ 
    let login = FBSDKLoginManager() 
    login.loginBehavior = FBSDKLoginBehavior.SystemAccount 
    login.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {(result, error) in 
     if error != nil { 
      print("Error : \(error.description)") 
     } 
     else if result.isCancelled { 

     } 
     else { 
      FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "first_name, last_name, picture.type(large), email, name, id, gender"]).startWithCompletionHandler({(connection, result, error) -> Void in 
       if error != nil{ 
        print("Error : \(error.description)") 
       }else{ 

        print("userInfo is \(result))") 

       } 
      }) 
     } 

    }) 
} 
+2

Per stampare il nome se let firstName = result.valueForKeyPath ("first_name") as? Stringa { stampa ("nome: \ (firstName)") } –

Problemi correlati