Вход в Facebook без FBSDKLoginButton в Swift

78
13

Я пытаюсь добавить facebook login для своего приложения. Я использую FBSDKLoginButton, который поставляется с собственной кнопкой, и как только вы входите в систему, он переходит на выход. Я не хочу этого. Мне просто нужно добавить свою собственную кнопку в виде. И в этой кнопке @IBAction я хочу зарегистрироваться в facebook. Код, который я сейчас использую,

class ViewController: UIViewController,FBSDKLoginButtonDelegate {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

if (FBSDKAccessToken.currentAccessToken() != nil)
{
// User is already logged in, do work such as go to next view controller.
}
else
{
let loginView : FBSDKLoginButton = FBSDKLoginButton()
self.view.addSubview(loginView)
loginView.center = self.view.center
loginView.readPermissions = ["public_profile", "email", "user_friends"]
loginView.delegate = self
}

}

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
println("User Logged In")

if ((error) != nil)
{
// Process error
}
else if result.isCancelled {
// Handle cancellations
}
else {
returnUserData()
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email")
{
// Do work
}
}
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
}

func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else
{
println("fetched user: \(result)")
let userName : NSString = result.valueForKey("name") as! NSString
println("User Name is: \(userName)")
let userEmail : NSString = result.valueForKey("email") as! NSString
println("User Email is: \(userEmail)")
}
})

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

Как настроить и добиться того, что мне нужно. Заранее спасибо.

спросил(а) 2015-07-02T10:31:00+03:00 5 лет, 11 месяцев назад
1
Решение
89

FBSDKLoginManager можно использовать, если FB Login обрабатывается с помощью настраиваемой кнопки.

Для получения дополнительной информации, вы можете проверить это.

ответил(а) 2015-08-31T14:14:00+03:00 5 лет, 9 месяцев назад
117

Вы можете проверить последнюю версию FacebookSDK, вот что у меня есть:

@IBAction func connectWithFacebook(){

if FBSDKAccessToken.currentAccessToken() != nil {
FBSDKLoginManager().logOut()
return
}

let login:FBSDKLoginManager = FBSDKLoginManager()
login.logInWithReadPermissions(["email"], handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
if(error != nil){
FBSDKLoginManager().logOut()
}else if(result.isCancelled){
FBSDKLoginManager().logOut()
}else{
//Handle login success
}
})
}

В противном случае с более старым SDK вы можете сделать следующее:

    Добавьте FBSDKLoginButton к вашему представлению и установите его невидимым Добавьте свою собственную кнопку На вашей пользовательской кнопке IBAction выполните щелчок по FBSDKLoginButton с помощью метода sendActionsForControlEvents

ответил(а) 2015-07-02T10:57:00+03:00 5 лет, 11 месяцев назад
45

Установить текущий доступ равен нулю.

Это вызывает [FBSDKAccessToken setCurrentAccessToken: nil] и [FBSDKProfile setCurrentProfile: nil].

FBSDKAccessToken.setCurrentAccessToken (ноль)

Для выхода в Facebook.

ответил(а) 2018-03-15T16:40:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема