2016-04-03 33 views
10

我試圖自定義Facebook登錄按鈕後this guide。一切都正確集成,我可以登錄到Facebook,並登出順利。定製的Facebook登錄按鈕 - 集成後

現在我的下一個目標是讓屏幕看起來像我的模擬,這包括在故事板上正確放置登錄按鈕,但唯一的問題是它不會顯示在故事板上,它只是出現當我運行模擬。我查看了其他溢出回答,但它們並沒有真正的幫助,因爲它們是針對早期版本的swift/Xcode的,並沒有根據評論所說的做什麼。我的代碼與指南完全一樣,因爲這是我嘗試實施的第一個屏幕。

幫助將不勝感激。

+0

如果你能夠提供你想要達到的目標它通過'我的模擬'這將是好 – HardikDG

回答

26

如果你想使用定製的Facebook SDK按鈕您可以在故事板創建的任何自定義按鈕,像在頂部

這個

進口

import FBSDKCoreKit 
import FBSDKLoginKit 

斯威夫特3的視圖 - 控制提供行動:

@IBAction func loginFacebookAction(sender: AnyObject) {//action of the custom button in the storyboard 
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
    fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) -> Void in 
     if (error == nil){ 
     let fbloginresult : FBSDKLoginManagerLoginResult = result! 
     // if user cancel the login 
     if (result?.isCancelled)!{ 
       return 
     } 
     if(fbloginresult.grantedPermissions.contains("email")) 
     { 
      self.getFBUserData() 
     } 
     } 
    } 
    } 

    func getFBUserData(){ 
    if((FBSDKAccessToken.current()) != nil){ 
     FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in 
     if (error == nil){ 
      //everything works print the user data 
      print(result) 
     } 
     }) 
    } 
    } 

較早的版本雨燕:

@IBAction func loginFacebookAction(sender: AnyObject) {//action of the custom button in the storyboard 
     let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
     fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self) { (result, error) -> Void in 
      if (error == nil){ 
       let fbloginresult : FBSDKLoginManagerLoginResult = result 
       if(fbloginresult.grantedPermissions.contains("email")) 
       { 
        self.getFBUserData() 
       } 
      } 
     } 
    } 

    func getFBUserData(){ 
     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){ 
        //everything works print the user data 
        print(result) 
       } 
      }) 
     } 
    } 



如果你想默認的Facebook登錄按鈕,你可以採取的UIView,並設置類*在Identity Inspector中的自定義類的領域**部分,我們必須設置FBLoginValue

參考:默認SDK登錄按鈕教程:http://www.appcoda.com/ios-programming-facebook-login-sdk/

參考:參數和更多信息自定義SDK登錄按鈕:https://developers.facebook.com/docs/facebook-login/ios

+0

所以我添加了這個,並試圖將它連接到一個按鈕,但現在我得到了一個未聲明的類型'loginFacebookAction'的錯誤。「任何想法爲什麼這將是? –

+0

所以當你試圖連接IBAction到UIButton ÿ你得到這個錯誤? – HardikDG

+0

是這樣的:http://i.stack.imgur.com/q8X4a.png – HardikDG

0

歡迎來到StackOverflow,Shika!該教程向您展示瞭如何添加Facebook作爲其SDK一部分提供的按鈕。本教程告訴您將按鈕置於設備屏幕的中心。如果您願意,Facebook允許您創建自己的按鈕。在我看來,我更喜歡它,因爲你可以在故事板中使用它,不像在Swift中以編程方式創建的按鈕。您可以使用Facebook文檔here並向下滾動到「自定義登錄按鈕」。你的代碼會改變,但不會太多!如果您選擇走此路線,請確保刪除您複製和粘貼的代碼以添加位於viewDidLoad中的按鈕。另外,您可以刪除您在Swift文件頂部添加的FBSDKLoginButtonDelegate。

+0

唯一的問題是,它在obj-c :(。但是非常感謝你的這個資源,我想我會嘗試轉換它的暴跌。 –

4

POD INSTALL

source 'https://github.com/CocoaPods/Specs.git' 
use_frameworks! 
target 「ProjectName」 do 
    pod 'FacebookCore' 
    pod 'FacebookLogin' 
    pod 'FacebookShare' 
end 

AppDelegate.swift

import FacebookLogin 
import FBSDKLoginKit 
import FacebookCore 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

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

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

ViewController.swift

import UIKit 
import FacebookLogin 
import FBSDKLoginKit 
import FacebookCore 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    if(FBSDKAccessToken.current() == nil){ 
     print("Not logged in ") 
    }else{ 
     print("Logged in already") 
     getFacebookUserInfo() 
    } 
} 

@IBAction func CustomButton_Click(_ sender: Any) { 
    getFacebookUserInfo() 
} 

func getFacebookUserInfo(){ 
    let loginManager = LoginManager() 
    loginManager.logIn([.publicProfile, .email ], viewController: self) { (result) in 
     switch result{ 
     case .cancelled: 
      print("Cancel button click") 
     case .success: 
      let params = ["fields" : "id, name, first_name, last_name, picture.type(large), email "] 
      let graphRequest = FBSDKGraphRequest.init(graphPath: "/me", parameters: params) 
      let Connection = FBSDKGraphRequestConnection() 
      Connection.add(graphRequest) { (Connection, result, error) in 
       let info = result as! [String : AnyObject] 
       print(info["name"] as! String) 
      } 
      Connection.start() 
     default: 
      print("??") 
     } 
    } 
} 
} 

信息。plist中

的Info.plist - >右鍵 - > OpenAs - >源代碼 - >添加<字典> .. < /字典>

<key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>YOUR APP ID</string> 
      </array> 
     </dict> 
    </array> 
    <key>FacebookAppID</key> 
    <string>YOUR APP ID</string> 
    <key>FacebookDisplayName</key> 
    <string>YOUR APP NAME</string> 
+0

你好,我如何觀察用戶註冊之前或沒有?例如是用戶新的一個,我應該設置一些信息。一,我只需要去另一個視圖控制器 –