Swift 和 Parse(以及 xCode)问题
Posted
技术标签:
【中文标题】Swift 和 Parse(以及 xCode)问题【英文标题】:Swift and Parse (and xCode) problems 【发布时间】:2015-01-10 11:27:31 【问题描述】:在使用 Parse 和 Swift 时遇到一些麻烦。 我正在尝试将 Facebook 登录与 Parse 类 PFFacebookUtils 一起使用。 代码如下:
// LOG IN or SIGN UP with FACEBOOK
@IBAction func FacebookLogin()
PFFacebookUtils.logInWithPermissions(permissions, (user: PFUser!, error: NSError!) -> Void in
if error == nil
if user == nil
NSLog("Uh oh. The user cancelled the Facebook login.")
let userCancelledAlert = UIAlertController(title: "Error", message: "You cancelled the Facebook Login", preferredStyle: .Alert)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
userCancelledAlert.addAction(okButton)
let cancelButton = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
userCancelledAlert.addAction(cancelButton)
self.presentViewController(userCancelledAlert, animated: true, completion: nil)
else if user.isNew
NSLog("User signed up and logged in through Facebook!")
FBRequestConnection.startWithGraphpath("me?fields=email", completionHandler: (connection, result, error) -> Void in
if error == nil
let fbGraphicObject = result as FBGraphObject
println(fbGraphicObject)
)
else
NSLog("User logged in through Facebook!")
dispatch_async(dispatch_get_main_queue(), () -> Void in
var homeViewController = self.storyboard?.instantiateViewControllerWithIdentifier("homePage") as HomeViewController
self.presentViewController(homeViewController, animated: true, completion: nil)
)
// end login (success)
else // if login doesnt work
println(error!)
/*
let facebookError = UIAlertController(title: "Error", message: "Cant connect to Facebook, check your connectivity", preferredStyle: .Alert)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
facebookError.addAction(okButton)
let cancelButton = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
facebookError.addAction(cancelButton)
self.presentViewController(facebookError, animated: true, completion: nil)
*/
)
所以现在我的问题是:为什么我在注册时看不到权限? 我的意思是,权限是一个数组。
let permissions = ["email","user_birthday"]
但是当我注册时,消息类似于“[APP-NAME] 想要访问您的基本信息和朋友列表。 为什么不是电子邮件或 user_birthday。 那么,如何将这些信息存储在我的 Parse 数据库中?我的意思是,我看到了 id、用户名、密码(显然,我没有)、authData 等。 我有电子邮件字段,但它是空的。 我猜代码有问题。任何人都可以找到吗? 最后,不知道为什么,但是 Parse 类的 xCode 自动完成功能(我正在使用 Swift)不起作用。我导入了框架(我添加了桥接头),它在几天前就开始工作了。
【问题讨论】:
在进入logInWithPermissions之前,可以println(permissions)
看看里面有什么吗?至于XCode,可能与***.com/questions/24006206/…有关
@BabyAzerty ,权限包含“[email, user_birthday]”,正如我设置的那样。是的,我以前读过那篇文章,但这不是我的问题。我没有任何消息或黑窗。简单地说,xCode 编辑器并没有向我提供任何关于 Parse 框架(类、方法或属性)的建议
【参考方案1】:
我也在做同样的事情,试图让 Parse 将 Facebook 电子邮件存储为用户名,而不是自动生成的 id。由于 Facebook 将 Graph API 更新到 v2.0,似乎没有太多内容可以告诉您如何操作。这就是我所做的:
首先,我设置了从 Facebook 检索电子邮件的适当权限。这是在“didLoginUser”方法中完成的。
func logInViewController(logInController: PFLogInViewController, didLogInUser user: PFUser)
if !PFFacebookUtils.isLinkedWithUser(user)
let facebookLinkSuccess : (succeeded: Bool, error: NSError?) -> Void = succeeded, error in
if(succeeded)
println("PF User linked with facebook")
PFFacebookUtils.linkUserInBackground(user, withReadPermissions: ["public_profile", "email", "user_friends","user_birthday","user_location"], block: facebookLinkSuccess)
...
其次,我找到了这个 ***,它可以帮助您进行 FB Graph API 调用,然后将 Parse PFUser 对象更新为所需的值:Facebook ios SDK & Swift - How do I create dependent batch requests?
我将通话设置如下:
if (FBSDKAccessToken.currentAccessToken() != nil)
var userProfileRequestParams = [ "fields" : "id, name, email"]
let userProfileRequest = FBSDKGraphRequest(graphPath: "me", parameters: userProfileRequestParams)
let graphConnection = FBSDKGraphRequestConnection()
graphConnection.addRequest(userProfileRequest, completionHandler: (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
if(error != nil)
println(error)
else
let fbEmail = result.objectForKey("email") as! String
let fbUserId = result.objectForKey("id") as! String
if(fbEmail != "")
PFUser.currentUser()?.username = fbEmail
PFUser.currentUser()?.saveEventually(nil)
println("Email: \(fbEmail)")
println("FBUserId: \(fbUserId)")
)
graphConnection.start()
我把这段代码放进去 func logInViewController(logInController: PFLogInViewController, didLogInUser user: PFUser) ...
如果您对该部分有任何疑问,请观看此视频,它有类似的想法,但使用的是 Twitter。 https://www.youtube.com/watch?v=lnf7KHHeiO0
希望这对某人有所帮助。我只花了将近 5 个小时。
【讨论】:
以上是关于Swift 和 Parse(以及 xCode)问题的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Swift 在 Xcode 中使用 Parse 1.7.2 和 Facebook SDK 4.1 创建新用户
如果在 Parse 中找到,则输入邮政编码切换视图控制器(Swift 和 XCode)
XCode - Swift - 使用 Parse 进行 Facebook 身份验证
Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)