【发布时间】:2016-06-19 19:20:15
【问题描述】:
我花了很长时间试图弄清楚为什么下载我的应用程序的用户中有 5% 无法成功登录 Facebook。
在 95% 的情况下,它按预期执行,一切正常。
但是对于另外 5% 的应用程序在第一个 ViewController 页面上崩溃。然后当他们重新启动应用程序时,将成功发送到第二页以检查它们是否已存在于数据库中,但 Facebook id 为 nil 并显示错误对话框。
我无法调试它,因为我的设备以及绝大多数设备似乎都没有此错误。
如果有人能提出问题可能出在哪里,我将永远感激不尽!
第一页视图控制器:
import UIKit
class ViewController: UIViewController {
@IBAction func btnFBLoginPressed(sender: AnyObject) {
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager .logInWithReadPermissions(["email"], fromViewController: self, handler: { (result, error) -> Void in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result
if result.isCancelled {
return
}
if(fbloginresult.grantedPermissions.contains("email"))
{
self.getFBUserData()
//fbLoginManager.logOut()
}
}
})
}
func getFBUserData(){
if((FBSDKAccessToken.currentAccessToken()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email, gender, age_range, locale"]).startWithCompletionHandler({ (connection, result, error) -> Void in
if (error == nil){
let userName : NSString = result.valueForKey("name") as! NSString
let facebookID : NSString = result.valueForKey("id") as! NSString
let firstName : NSString = result.valueForKey("first_name") as! NSString
let lastName : NSString = result.valueForKey("last_name") as! NSString
let email : NSString = result.valueForKey("email") as! NSString
let gender : NSString = result.valueForKey("gender") as! NSString
let locale : NSString = result.valueForKey("locale") as! NSString
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("\(userName)", forKey: "userName")
defaults.setObject("\(facebookID)", forKey: "facebookID")
defaults.setObject("\(firstName)", forKey: "firstName")
defaults.setObject("\(lastName)", forKey: "lastName")
defaults.setObject("\(email)", forKey: "email")
defaults.setObject("\(gender)", forKey: "gender")
defaults.setObject("\(locale)", forKey: "locale")
}
})
}
}
override func viewDidAppear(animated: Bool) {
if((FBSDKAccessToken.currentAccessToken()) != nil){
print("logged in")
self.performSegueWithIdentifier("login",sender:self)
}else{
print("Not logged in")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
// fbLoginManager.logOut()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
登录后的第二页:
import Foundation
import UIKit
import Parse
import Bolts
class loginViewController: UIViewController {
override func viewDidAppear(animated: Bool)
{
let defaults = NSUserDefaults.standardUserDefaults()
if let facebookID = defaults.stringForKey("facebookID"){
let firstName = defaults.stringForKey("firstName")
let lastName = defaults.stringForKey("lastName")
let email = defaults.stringForKey("email")
let gender = defaults.stringForKey("gender")
// Lots of code that queries database
} else{
let alert = UIAlertView()
alert.title = "Error"
alert.message = "Error Code: 01"
alert.addButtonWithTitle("OK")
alert.show()
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logOut()
self.performSegueWithIdentifier("backToLoginScreen", sender: nil)
}
}
}
【问题讨论】: