(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/