2016-04-03 60 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

你好,我如何观察用户注册之前或没有?例如是用户新的一个,我应该设置一些信息。一,我只需要去另一个视图控制器 –