(iOS)Facebook登录按钮
最近,我使用FBSDKLoginKit和Firebase实现了Facebook登录按钮。 但是,两个网站的官方文件还不够完善。 如果您只是遵循这些文档,可能会有一些令人困惑的观点。 在本文中,我将逐步介绍实现过程。
注意:我的Github存储库中提供了本文的示例代码。
转到https://developers.facebook.com/并从页面右上方的“我的应用”按钮添加您的应用。
添加您的应用程序之后,就像对其他任何库一样,通过Cocoapods将必要的依赖项安装到您的应用程序中。 您可以按照此处的说明进行操作。
注意:
您仅需要这两个依赖项即可登录。 转到此页面以获取更多详细信息。
吊舱'FBSDKCoreKit'
pod'FBSDKLoginKit'
您还可以在Firebase上注册您的应用程序。 登录到Firebase控制台并创建一个新项目。 然后从导航栏中转到身份验证->登录方法 ,然后启用Facebook。 您需要“ Facebook App ID ”和“ App Secret ”。 您可以在“开发者facebook”网站上的项目页面上找到这些键(导航栏中的设置->基础 )。
您将需要位于弹出窗口底部的“ OAuth重定向URI” 。 复制并保留它,因为稍后您还需要将其粘贴到您的Facebook应用程序页面上。
假设您仍在Facebook应用程序页面上,请单击导航底部的“ 产品”菜单。 您将看到Facebook提供的服务的缩略图。 单击“ Facebook登录”缩略图上的“ 设置 ”按钮。 然后将询问您使用哪个平台,因此只需选择iOS。
然后,您将看到配置屏幕。
基本上,您可以按照说明进行操作。
4-1。 设置您的开发环境
由于已经安装了Pod,因此可以跳过此部分。
4-2。 添加您的捆绑包标识符
您可以在Xcode上找到您的Bundle ID。 在Xcode上打开您的项目,然后在项目导航器上单击项目名称->在“目标”部分中选择项目名称->常规->身份上的捆绑标识符。
4-3。 为您的应用启用单点登录
说“是”并保存。
4-4。 配置您的info.plist
将XML代码段添加到“ info.plist”以配置信息,然后按照指令说明将标志“ -ObjC”添加到“其他链接器标志”。 XML代码段看起来像这样。
CFBundleURLTypes
CFBundleURLSchemes
fb1111111111111111
FacebookAppID
YourAppIDComesHere
FacebookDisplayName
YourProjectNameComesHere //下面是使用任何Facebook对话框的方法
LSApplicationQueriesSchemes
fbapi
fb-messenger-share-api
fbauth2
fbshareextension
4-5。 连接应用程序代理
此时,您需要添加代码以将您的应用程序与Facebook SDK连接。 可悲的是,代码指令是用Objective-C编写的。 您可以尝试使用Swiftify(从Objective-C到Swift的转换器),也可以将以下代码添加到“ AppDelegate.swift”文件中。
Swiftify:https://objectivec2swift.com/#/converter/
导入FBSDKCoreKit功能应用程序(_应用程序:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?= nil)->布尔{ FBSDKApplicationDelegate.sharedInstance()。application(应用程序,didFinishLaunchingWithOptions:launchOptions)
返回真
} func application(_ app:UIApplication,打开url:URL,选项:[UIApplication.OpenURLOptionsKey:任何] = [:])-> Bool { 让处理:Bool = FBSDKApplicationDelegate.sharedInstance()。application(app,打开:url ,sourceApplication:options [.sourceApplication] as?字符串,注释:options [.annotation]) 返回已处理
}
4-6:添加Facebook登录按钮
在“ ViewController.swift”文件的viewDidLoad()
内部,添加以下代码以编程方式实现Facebook按钮。
导入UIKIt
导入FBSDKCoreKit
导入FBSDKLoginKit类ViewController:UIViewController {
覆盖func viewDidLoad(){
super.viewDidLoad() 让loginButton = FBSDKLoginButton()
//可选:将按钮置于视图中心。
loginButton.center = view.center
view.addSubview(loginButton)
}
}
4-7:添加代码以检查登录状态
您的应用一次只能登录一个人。 在viewDidLoad()
添加以下代码以检查用户的登录状态。
如果(FBSDKAccessToken.current()!= nil){
//用户已登录,请执行诸如下一个视图控制器之类的工作。
}
“ FBSDKAccessToken currentAccessToken”代表登录到您的应用程序的每个人。 在上面的代码中,FBSDKLoginManager使用’current()’设置此令牌,并将该令牌添加到您的缓存密钥链中。
4-8:寻求权限
当您使用诸如Google,Facebook或Twitter之类的服务登录时,通常会要求您提供权限。 为了请求其他读取权限,可以将代码添加到viewDidLoad()
,如下所示。
loginButton.readPermissions = [“ public_profile”,“电子邮件”]
4–9:将“ OAuth重定向URI”添加到您的Facebook应用页面
在导航栏中,单击导航栏上的“ Facebook登录 ”。 然后,转到“设置” 。 在“设置”页面中,找到“ 有效的OAuth重定向URI ”的textField。 然后从Firebase控制台粘贴“ OAuth重定向URI”。
这就是Facebook配置的全部内容。
在Firebase控制台上,单击“项目概述”右侧的设置图标,然后转到“ 项目设置” 。 您应该看到“您的应用”部分。 选择iOS,然后继续进行应用创建过程。 基本上,您只需要按照说明进行操作,
5-1:注册应用
添加应用程序的捆绑包标识符。
5–2:下载GoogleService-info.plist
您将在此处下载“ GoogleService-info.plist ”文件,并将其添加到您的Xcode项目中。
5–3:添加Firebase SDK
系统将提示您添加Pod,以将Firebase SDK安装到您的项目中。 该说明告诉您仅添加pod 'Firebase/Core'
,但是,您将需要pod 'Firebase/Auth'
才能在Firebase中实际验证用户。 因此,只需在Podfile中添加以下代码,而不是仅添加pod’Firebase pod 'Firebase/Core'
。 不要忘记运行 pod install
。
pod“ Firebase / Core”
pod“ Firebase / Auth”
5–4:添加安装代码
在您的AppDelegate中添加以下代码。 不要忘记在顶部添加import Firebase
。
FirebaseApp.configure()
5–5:运行您的应用以验证安装
您仍可以跳过此操作,因为仍有工作要做。
最后,在ViewController.swift文件中添加一些行。 您可以在此处查看Firebase的官方文档,但是不清楚。 loginButton()
和loginButtonDidLogOut()
是符合FBSDKLoginButtonDelegate
所需的函数。
注意:
如果收到错误消息“ 由于模拟器错误而无法从NSUserDefaults加载访问令牌 ”,则需要使用实际设备。 此错误似乎是与Facebook SDK相关的错误。
导入UIKIt
导入Firebase
导入FBSDKCoreKit
导入FBSDKLoginKitclass ViewController:UIViewController, FBSDKLoginButtonDelegate {
覆盖func viewDidLoad(){
super.viewDidLoad()让loginButton = FBSDKLoginButton()
loginButton.delegate =自我
//可选:将按钮置于视图中心。
loginButton.center = view.center
view.addSubview(loginButton)
} func loginButton(_ loginButton:FBSDKLoginButton !, didCompleteWith结果:FBSDKLoginManagerLoginResult !,错误:Error!){
如果让错误=错误{
打印(error.localizedDescription)
返回
} let credential = FacebookAuthProvider.credential(withAccessToken:FBSDKAccessToken.current()。tokenString) Auth.auth()。signInAndRetrieveData(with:credential){(authResult,error)in
如果让错误=错误{
// ...
返回
}
//用户已登录
// ...
}
// ...
} func loginButtonDidLogOut(_ loginButton:FBSDKLoginButton!){
//在用户注销时执行一些操作
打印(“已注销”)
}
}
完成所有步骤后,您的应用程序就可以开始使用了。 生成并运行该应用程序。 尝试使用刚刚实现的按钮登录。 如果您可以顺利进行Facebook身份验证过程,并且可以在Firebase身份验证菜单上找到您的信息,则意味着您现在可以使用Facebook登录按钮。
如果您想通过自己的设计实现按钮,则有一种方法。
步骤1:在情节提要板上创建UIButton对象
从UI库添加UIButton。
步骤2:添加IBAction
在您的ViewController中,像下面的代码一样创建一个IBAction并将其与您刚刚在情节提要板上添加的按钮连接。
@IBAction func facebookLogin(sender:AnyObject){
let LoginManager = FBSDKLoginManager()LoginManager.logIn(withReadPermissions:[“ public_profile”,“ email”],来自: self ){(结果,错误) in, 如果 let error = error {
print(“登录失败:\(error.localizedDescription)”)
返回
} 保护 let accessToken = FBSDKAccessToken.current() 其他 {
打印(“无法获取访问令牌”)
返回
} let credential = FacebookAuthProvider.credential(withAccessToken:accessToken.tokenString) //通过调用Firebase API执行登录
Auth.auth()。signInAndRetrieveData(with:credential){(user,error) in
如果 让错误=错误{
print(“登录错误:\(error.localizedDescription)”)
让 alertController = UIAlertController(标题:“登录错误”,消息:error.localizedDescription,preferredStyle:.alert)
让 okayAction = UIAlertAction(title:“ OK”,样式:.cancel,处理程序: nil )
alertController.addAction(okayAction)
self .present(alertController,动画: true ,完成: nil )
返回
}
// self.performSegue(withIdentifier:self.signInSegue,发送者:nil)
}
}
}
这就是实现自己的Facebook登录按钮并将其连接到Firebase所需的一切。 如果您有任何好的实施方法,请告诉我。 对于任何反馈,我们都表示感谢。
谢谢您阅读此篇!
参考:
使用Firebase在iOS中集成Facebook登录:
应用程序https://www.appcoda.com/firebase-facebook-login/
Firebase Facebook登录官方文件:
https://firebase.google.com/docs/auth/ios/facebook-login
iOS的Facebook登录-快速入门
https://developers.facebook.com/docs/facebook-login/ios
iOS的Facebook登录-高级
https://developers.facebook.com/docs/facebook-login/ios/advanced
Facebook登录(日文)
http://grandbig.github.io/blog/2016/05/14/facebook-login-for-swift/
- 如何在CGGradient中舒服地使用NSArray中的CGColor
- 将UIButton放在UptextView中的文本末尾,该应用程序位于用Swift编写的Xcode中的iOS应用程序中
- 通过UITextView内容大小调整UITableView单元的大小
- Xamarin:错误MT2002:无法parsing“System.Void System.Security.Cryptography.SHA1Cng ::。ctor()”
- iOS 7很慢,用UIPickerView打开UITableViewController
- Swift if语句 – 用逗号分隔多个条件?
- iOS:从前置摄像头捕捉图像
- 键盘隐藏显示的额外空间问题
- 多行属性字符串标签的NSBackgroundColorAttributeName