在 iOS9 和 Swift2 中使用 Parse 登录 Facebook

Posted

技术标签:

【中文标题】在 iOS9 和 Swift2 中使用 Parse 登录 Facebook【英文标题】:Facebook login with Parse in iOS9 and Swift2 【发布时间】:2015-10-29 19:38:20 【问题描述】:

我正在尝试在 ios9 中使用 Parse 登录 Facebook,但应用程序在真实设备中不断打开 Safari 而不是 Facebook 应用程序。甚至在 Safari 中,当我尝试使用键盘输入 Facebook 帐户的电子邮件和密码时,页面会重新加载,因此无法登录并授予应用程序权限。用户应该先打开 Safari 并登录 Facebook,然后打开我的应用程序,然后授予权限。我认为这不是最好的用户体验,因为用户已经拥有 Facebook 应用程序。

我已经按照我将在此处列出的所有步骤进行操作:

    添加 Fraleworks

    链接二进制文件

    更新了 info.plist

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb907580375984874</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>FacebookAppID</key>
    <string>907580375984874</string>
    <key>FacebookDisplayName</key>
    <string>Appname</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fbapi20130214</string>
        <string>fbapi20130410</string>
        <string>fbapi20130702</string>
        <string>fbapi20131010</string>
        <string>fbapi20131219</string>
        <string>fbapi20140410</string>
        <string>fbapi20140116</string>
        <string>fbapi20150313</string>
        <string>fbapi20150629</string>
        <string>fbauth</string>
        <string>fbauth2</string>
        <string>fb-messenger-api20140430</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>akamaihd.net</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
            <key>facebook.com</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
            <key>fbcdn.net</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

      应用代理

       import UIKit
       import Parse
       import FBSDKCoreKit
       import ParseFacebookUtilsV4
      
       @UIApplicationMain
       class AppDelegate: UIResponder, UIApplicationDelegate 
      
      var window: UIWindow?
      
      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
          Parse.setApplicationId("appID", clientKey: "MyKey")
          PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)   
          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)
      
      
      func applicationDidBecomeActive(application: UIApplication)  
          FBSDKAppEvents.activateApp()
      
      

    登录代码:

    @IBAction func loginButtonClicked(sender: AnyObject) 
    
    if let _ = FBSDKAccessToken.currentAccessToken() 
    
       print("connected already")
    
     else 
    
        PFFacebookUtils.logInInBackgroundWithReadPermissions(["public_profile", "email", "user_friends", "user_birthday" , "user_education_history","user_photos"]) 
            (user: PFUser?, error: NSError?) -> Void 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.")
            
        
    
    

【问题讨论】:

【参考方案1】:

使用 webview 登录用户现在是 iOS 9 的 Facebook SDK 的默认行为,据 Facebook 团队称,这种方法可提供更好的用户体验,因为它避免了在应用转换之间显示额外的对话。

在使用最新 SDK(v4.6 和 v3.24)的应用中,我们将显示 使用 Safari 视图控制器 (SVC) 而不是快速应用切换 (FAS),因为额外的对话插页式广告会添加额外的步骤 到 iOS 9 上 FAS 中的登录过程。此外,我们获得的数据 从超过 250 个应用程序中看到的表明这是最好的体验 从长远来看,对于人们来说

Read more on Facebook

【讨论】:

以上是关于在 iOS9 和 Swift2 中使用 Parse 登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

如何使用swift2在ios9中创建jabberd xmpp客户端

Swift 2 Parse 推送通知

如何使用 Swift 2 + XCode 7 + iOS 9 获取和解析 JSON [重复]

Swift 2.0 和 Parse - 'init()' 不可用:使用 'init(domain:code:userInfo:)'

swift 2 解析facebookSDK ios9

swift2.0中带有UIKeyboard的UIStackview