在 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 + XCode 7 + iOS 9 获取和解析 JSON [重复]
Swift 2.0 和 Parse - 'init()' 不可用:使用 'init(domain:code:userInfo:)'