2015-11-02 20 views
5

En son Facebook SDK'yı iOS 9.1 için yazılmış XCode 7.1 projeme ekledim. Ne yazık ki tek bildiğim, Swift, Amaç C. Facebook's developer site documentation yalnızca belgelerin Amaç C belgesine sahiptir. Google'daki her arama, çok eski olan belgeleri gösterir çünkü son 6 ayda işler çok değişti. Yani ben bir tür kayboldum.Swift 2.0 ve iOS 9.1 kullanarak Facebook girişini nasıl yapabilirim?

Tüm kolay şeyleri plist dosyasıyla yaptım.

kullandığım başardı:

import FBSDKCoreKit 
import FBSDKLoginKit 

Ben de ekledi: my AppDelegate.swift dosyası için

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

ve

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

. Bu tüm çalışır ve başarılı bir şekilde inşa edilir. Açıkça benimsenen doğru çerçevelerim var. Bu noktadan sonra durmaktayım çünkü giriş butonu ekleme sözdizimini bilmiyorum, json dizgileri jetonla döndürdüğümüzü ve kullanıcının hesabında saklamak için kullanabileceğim diğer profil bilgilerini, vb.

cevap

8

Doğru yoldasınız. Sen kalacaksın

Have you set up your pList yet?

, senin VC eklediğiniz bir giriş düğmesi eklemek, temsilci ile anlaşma ve sonra FB bilgi ile uğraşmak zorunda. (Ama tam olarak) Böyle bir şey:

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... 
     } 
     }) 
} 

çıkaracaksın doğru olsun returnData() bölümü ile uğraşmak zorunda, ama bu kod size orada yol% 90 almak gerekir.

Çok çeşitli izinler ekledim (kullanıcı yaşı, ilgileniyor, vb.), Ancak bunları kendiniz yapılandırmanız gerekecek. Dürüst olmak gerekirse bu bölüm (zor kısmı) gerçekten çok daha iyi belgelenmiş olan nesne C karşılığı ile benzer. Sadece bazılarını çalıştığı projelere indirin ve bunları kendi zevkinize uygun bir şeye benzetmeye çalışın.

Herşeyi işe almak zor olabilir, ancak bir adım atıp devam edin! Eğer özel düğmeyi tıklamak Facebook'u giriş yapmak istiyorsanız

+2

Bu çalışıyor! Muhtemelen kalanını anlayacağım. Teşekkürler! –

+1

Dude, bu harika, returnUserData() biti gerçekten çok yardımcı olur. Bu bölümdeki ekstra mil için teşekkürler. Bu benim günümü gerçekten kolaylaştırdı. –

+0

Ahha sorun değil. Tüm bunları anladım, benim için cehennem gibiydi. Birisine biraz gözyaşı/kan kurtaracağımı düşündüm. – MQLN

4

, bu yardımcı olacaktır:

@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

İlk ad 'u yazdırmak için firstName = result.valueForKeyPath ("first_name") olarak izin verilsin mi? Dize { print ("ad: \ (firstName)") } –