Разбор Facebook логин InBackgroundWithReadPermissions (Swift)
Я успешно установил SDK Parse (1.7.1) и SDK Facebook (v4), установил заголовочные файлы моста и AppDelegate.swift. Теперь в моем ViewController я пытаюсь создать учетную запись Facebook и пытаюсь использовать код, указанный в разделе "Анализ документации iOS - регистрация и вход в Facebook".
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, {
(user: PFUser!, error: NSError!) -> Void in
if let user = user {
if user.isNew {
println("User signed up and logged in through Facebook!")
} else {
println("User logged in through Facebook!")
}
} else {
println("Uh oh. The user cancelled the Facebook login.")
}
})
Однако, когда я вставляю его в свой ViewController.swift > ViewDidLoad, я получаю эту ошибку:
- Extra argument in call // for { at the first line
Кто-нибудь может помочь мне разобраться с этим?
Изменить: данный сценарий работал для меня с точки зрения синтаксиса, однако, теперь я продолжаю получать "Uh нет. Пользователь отменил логин Facebook". еще до того, как он попросит разрешения; пока страница в фейсбуке все еще загружается.. И пользователь, которого я пытаюсь использовать, уже принят для этого конкретного приложения. Посмотрите: http://imgur.com/5yDs1s1
3 ответа
Я нашел обходной путь, добавив этот код в ViewDidLoad:
if PFUser.currentUser() != nil {
self.performSegueWithIdentifier("loginSegue", sender: self)
}
вместе как размещение в кнопке:
@IBAction func Facebook(sender: AnyObject) {
var permissions = ["public_profile"]
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user: PFUser?, error: NSError?) -> Void in
if let user = user {
if user.isNew {
println("User signed up and logged in through Facebook!")
self.facebookButton.alpha = 0
self.performSegueWithIdentifier("signUp", sender: self)
} else {
println("User logged in through Facebook!")
self.facebookButton.alpha = 0
let currentUser = PFUser.currentUser()
self.performSegueWithIdentifier("loginSegue", sender: self)
}
} else {
println("Uh oh. The user cancelled the Facebook login.")
println("User cancelled")
}
}
Также в App Delegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
Parse.setApplicationId("###",
clientKey: "###")
PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)
PFUser.enableRevocableSessionInBackground()
return true
}
А также
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
Заголовок моста:
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <ParseFacebookUtilsV4/PFFacebookUtils.h>
#import <Parse/Parse.h>
#import <Bolts/Bolts.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
Я не знаю, насколько это правда, но это решило мою проблему
Та же проблема для меня, когда я обновился до Swift 1.2. Похоже, что это связано с какой-то более строгой проверкой синтаксиса с новым компилятором. Это изменение работает для меня:
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) {
(user: PFUser?, error: NSError?) -> Void in
if let user = user {
if user.isNew {
println("User signed up and logged in through Facebook!")
} else {
println("User logged in through Facebook!")
}
} else {
println("Uh oh. The user cancelled the Facebook login.")
}
}
У меня возникла та же проблема, но код сработал для меня после изменения в:
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user: PFUser?, error: NSError?) -> Void in