Пользовательская кнопка входа в систему Facebook - после интеграции

Я пытаюсь настроить кнопку входа в систему Facebook после выполнения данного руководства. Все правильно интегрировано, я могу войти в Facebook и выйти из системы без заминки.

Теперь моя следующая цель - сделать экран похожим на мой макет, это включает правильное размещение кнопки входа в систему раскадровки, но единственная проблема заключается в том, что она не отображается на доске объявлений, она просто появляется, когда Я запускаю симуляцию. Я смотрел на другие ответы переполнения, но они не были действительно полезными, поскольку они были направлены на более ранние версии swift/Xcode и не работали с тем, что говорили комментарии. Мой код точно такой же, как и руководство, так как это первый экран, который я пытаюсь реализовать.

Помощь будет очень оценена.

Ответ 1

Если вы хотите использовать пользовательскую кнопку SDK для facebook, вы можете создать любую настраиваемую кнопку в раскадровке и обеспечить действие в viewcontroller, подобном этому

Импорт вверх

import FBSDKCoreKit
import FBSDKLoginKit

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

Старая версия Swift:

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



Если вам нужна кнопка default facebook login, вы можете взять UIView и установить поле Class * в разделе Custom Class ** в Identity Inspector, мы должны установить FBLoginValue

Ссылка: по умолчанию кнопка входа в систему SDK: http://www.appcoda.com/ios-programming-facebook-login-sdk/

Ссылка: пользовательская кнопка входа в SDK для параметров и дополнительная информация: https://developers.facebook.com/docs/facebook-login/ios

Ответ 2

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("??")
        }
    }
}
}

Info.plist

Info.plist → щелкните правой кнопкой мыши → OpenAs → Исходный код → Добавить <dict> .. </dict>

<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>

Ответ 3

Добро пожаловать в StackOverflow, Shika! В этом учебнике показано, как добавить кнопку, которую Facebook предоставляет как часть своего SDK. В учебном пособии показано, что центр находится в центре экрана устройства. Facebook позволяет вам создать свою собственную кнопку, если хотите. На мой взгляд, мне это нравится, потому что вы можете играть с ним в раскадровке, в отличие от кнопки, созданной программно в Swift. Вы можете использовать документы здесь и прокрутите вниз до "Пользовательская кнопка входа". Ваш код изменится, но не сильно! Если вы решите пойти по этому маршруту, обязательно удалите код, который вы скопировали и вставили, чтобы добавить кнопку, расположенную в viewDidLoad. Кроме того, вы можете удалить FBSDKLoginButtonDelegate, который вы добавили в верхней части файла Swift.