我使用我的应用程序使用FB创建了社交登录。在与FB签约后,它会转换回登录屏幕,然后转到我的应用程序的主屏幕。如何在登录FB后直接进入主屏幕,而不是在主屏幕之前首先登录屏幕。
显示连接到FB的代码:
let parameters = ["fields":"id, email, first_name, last_name"]
let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: parameters, HTTPMethod: "GET")
graphRequest.startWithCompletionHandler({(connection, result, error) -> Void in
if error != nil {
print("Facebook Error: \(error.localizedDescription)")
return
}
guard let id = result["id"] as? String else{
print("Error: \(error.localizedDescription)")
return
}
print("FacebookId connecting: \(id)")
//connect to app server
//passes user id and connects to back-end server
self.connectToserver(id)
连接到fb到后端后的功能:
private func connectToserver(id: String) {
let endPoint: String = "*********"
let params = ["id": id]
let url:NSURL? = NSURL(string: endPoint)
let session = NSURLSession.sharedSession()
let request:NSMutableURLRequest = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
do {
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted)
print(params)
}
catch {
print("Error: \(error)")
}
print("Facebook")
let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
guard let data = data where error == nil else {
print("Error connecting: \(error?.localizedDescription)")
return
}
let httpResponse = response as! NSHTTPURLResponse//HTTPURLResponse
let statusCode = httpResponse.statusCode
if statusCode == 200 {
do {
print("FaceBook post to server")
print("Response: \(response)")
// let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
let result = json as? [String: AnyObject]
print("Result: \(result)")
guard let token = result!["token"] else {
print("Error: \(error?.debugDescription)")
return
}
NSUserDefaults.standardUserDefaults().setObject(token, forKey: "token")
//dispatch_async(dispatch_get_main_queue(), {
self.getHome()
//})
}
catch {
print("Error receiving data")
}
}
重定向到主屏幕:
private func getHome() {
let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tableController = storyboard.instantiateViewControllerWithIdentifier("tabController")
let appledDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
//appledDelegate.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
appledDelegate.window?.rootViewController = tableController
}