2015-11-02 2 views
5

Я добавил последний SDK Facebook к моему проекту XCode 7.1, написанному для iOS 9.1. К сожалению, все, что я знаю, это Swift, а не Цель C. Facebook's developer site documentation имеет документацию только в Цель C. Каждый поиск в Google показывает документацию, которая слишком старая, потому что все изменилось так же, как и за последние 6 месяцев. Так что я потерял.Как я могу выполнить вход в Facebook с помощью Swift 2.0 и iOS 9.1?

Я сделал все легкие вещи с файлом plist.

Я был в состоянии использовать:

import FBSDKCoreKit 
import FBSDKLoginKit 

Я также добавил:

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

и

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

К моему AppDelegate.swift файл. Все это работает и строится успешно. Очевидно, что у меня есть правильные рамки. За этим я остановился, потому что не знаю синтаксиса для добавления кнопки входа в систему, для захвата того, что я предполагаю, будут возвращены строки json с токенами и другие данные профиля, которые я могу использовать для хранения в учетной записи пользователя и т. Д. .

ответ

8

Вы на правильном пути.

Have you set up your pList yet?

Ты должен добавить к вашему VC добавить кнопку входа в систему, иметь дело с делегатом, а затем иметь дело с FB информации. Нечто подобное (но не точно) это:

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

Ты должен играть вокруг с returnData() части, чтобы получить это право, но этот код вы должны получить 90% пути.

Я включил широкий диапазон разрешений (возраст пользователя, заинтересованность и т. Д.), Но вам придется самостоятельно их настроить. Честно говоря, эта часть (сложная часть) действительно похожа на ее экземпляр класса C, который намного лучше документирован. Просто загрузите несколько проектов, где он работает, и попробуйте разобрать их вместе во что-то, что вам нравится.

Это может быть трудно заставить все это работать, но дайте ему идти и держитесь!

+2

Это работает! Я, наверное, выясню остальное. Благодаря! –

+1

Чувак это здорово, что returnUserData() бит действительно помогает много. Спасибо, что выбрали лишнюю милю. Это сделало мой день очень легким. –

+0

Ahha не проблема. Все это выяснилось, это был чистый ад для меня. Думал, что я сдержу кого-то слезы/кровь. – MQLN

4

Если вы хотите выполнить вход с Facebook по щелчку пользовательской кнопки, это поможет:

@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

Чтобы напечатать первое имя , если пусть firstName = result.valueForKeyPath ("first_name") как? Строка { печать ("имя: \ (firstName)") } –

 Смежные вопросы

  • Нет связанных вопросов^_^