解析 Facebook 登录 Swift 3.0

Posted

技术标签:

【中文标题】解析 Facebook 登录 Swift 3.0【英文标题】:Parse Facebook Login Swift 3.0 【发布时间】:2017-05-09 10:24:25 【问题描述】:

我正在尝试使用 Parse 登录 Facebook 并创建一个新的 Parse 用户。 Parse 没有适当的 Facebook 登录文档。其中一些真的已经过时了

PS 我无法对现有帖子发表评论,因为我刚刚开始讨论 Stack Overflow,而且我的声誉较低。

我在一个按钮中有以下代码。当我点击按钮时,我被重定向到我给予许可的 Facebook,然后它就停留在那里。同时在控制台中“哦哦。用户取消了 Facebook 登录。”打印出当我打印出用户和错误时(PFFacebookUtils.logInInBackground 中两者都为零)

我已经尝试了很多方法,例如更改 App Delegate 中的方法以找到解决此问题的方法。直到现在我都没有成功。

以下是我的Button中的代码

         @IBAction func FacebookLogin(_ sender: Any) 

    //var permissions = [ "public_profile" ]

    PFFacebookUtils.logInInBackground(withReadPermissions: permissions)  (user, error) in            if let user = user 
        if user.isNew 
            print("User signed up and logged in through Facebook!")
         else 
            print("User logged in through Facebook!")
        
     else 
        print("Uh oh. The user cancelled the Facebook login.")
        
        


这是我添加的应用程序委托相关的 FB 功能。要是能看看就好了

func application(application:UIApplication,openURL url: NSURL,sourceApplication:String?,
        annotation:AnyObject) ->Bool

        return FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!, sourceApplication: sourceApplication,annotation: annotation)

    

  func applicationDidBecomeActive(_ application: UIApplication) 
        FBSDKAppEvents.activateApp()
    


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        // Enable storing and querying data from Local Datastore.
        // Remove this line if you don't want to use Local Datastore features or want to use cachePolicy.
        Parse.enableLocalDatastore()

        let parseConfiguration = ParseClientConfiguration(block:  (ParseMutableClientConfiguration) -> Void in
            ParseMutableClientConfiguration.applicationId = “xxxxxx"
            ParseMutableClientConfiguration.clientKey = “xxxxxx"
            ParseMutableClientConfiguration.server = “xxxxxx"
        )

        Parse.initialize(with: parseConfiguration)

        //PFUser.enableAutomaticUser()


        PFFacebookUtils.initializeFacebook(applicationLaunchOptions: launchOptions)

        let defaultACL = PFACL();

        // If you would like all objects to be private by default, remove this line.
        defaultACL.getPublicReadAccess = true

        PFACL.setDefault(defaultACL, withAccessForCurrentUser: true)

        if application.applicationState != UIApplicationState.background 
        return FBSDKApplicationDelegate.sharedInstance().application(application,didFinishLaunchingWithOptions:launchOptions)
      

终于在我的桥接头中

#ifndef ParseStarterProject_Bridging_Header_h
#define ParseStarterProject_Bridging_Header_h
#import <ParseFacebookUtilsV4/PFFacebookUtils.h>
#import <FBSDKCoreKit/FBSDKcoreKit.h>
#endif /* ParseStarterProject_Bridging_Header_h */

【问题讨论】:

你能给我看看你的 Info.plist 的详细信息吗? 【参考方案1】:

替换你的方法:

func application(application:UIApplication,openURL url: NSURL,sourceApplication:String?,
        annotation:AnyObject) ->Bool

通过这个:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)

否则SDK不会调用你的方法

希望我的回答对你有帮助?

【讨论】:

哇。做到了。现在可以登录了。感谢朱利安的所有帮助。

以上是关于解析 Facebook 登录 Swift 3.0的主要内容,如果未能解决你的问题,请参考以下文章

iOS [Swift]:解析 Facebook 登录“使用未解析的标识符‘权限’”

在 Swift 中链接/合并 Facebook 用户和 PFUser(解析)

iOS Facebook 登录按钮与 swift

使用 FBSDKProfileExpressionKit 上传 Facebook 个人资料图片 - swift 3.0

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)

Facebook SDK 3.0 自动登录