iOS
...
Users
使用Google账户的iOS用户登录实现指南
11 分
使用 google 登录 介绍 如今,应用程序提供多种登录方式已成为常态。因此,对于用户来说,使用他们已经拥有的帐户(例如 google 帐户或 apple id)登录变得更加容易。此外,社交网络(如 facebook)为开发者提供了一个 sdk,以便集成使用其社交网络凭据的登录选项。 我们首先通过集成 google 提供的登录功能来开始本指南。在用户成功使用其 google 凭据登录后,我们使用 google 返回的帐户信息来登录一个新的用户,该用户将与相应的 google 帐户关联。 在 https //github com/templates back4app/ios sign in with google , 我们提供了一个简单的 xcode 模板,您可以在其中测试我们正在实现的不同登录方法。这个项目在 https //www back4app com/docs/ios/parse swift sdk/users/user log in , 您可以重新访问以获取有关该项目的更多详细信息。 先决条件 要完成此快速入门,您需要: xcode 在 back4app 创建的应用程序。 请遵循 https //www back4app com/docs/get started/new parse app 以了解如何在 back4app 上创建 parse 应用程序。 注意: 请遵循 https //www back4app com/docs/ios/parse swift sdk 以创建一个连接到 back4app 的 xcode 项目。 目标 使用 google 的 sdk 和 parseswift 集成用户登录功能。 1 设置 google 的 sdk 一旦我们将 xcode 项目 https //www back4app com/docs/ios/parse swift sdk/install sdk 到 back4app 应用程序,我们继续添加 google 的 sdk,这将允许我们实现登录流程。在这个示例中,我们使用 swift package manager (spm) 来添加 google 登录依赖项。在 xcode 项目中,转到 文件>添加包… ,在搜索栏中,查找 https //github com/google/googlesignin ios 。 一旦 googlesignin ios 选项出现在结果中,点击 添加包 按钮。 接下来,前往你的 https //console cloud google com/home/dashboard 以及 https //console cloud google com/projectcreate 一个新项目。 一旦项目创建完成,下一步是创建一个 oauth 客户端 id。在 https //console cloud google com/ 选择你的新项目并前往凭据页面。这可以从左侧菜单中找到: 在此过程中,你可能需要设置 oauth 同意屏幕,该屏幕将在使用 google 登录表单中出现,并根据相应要求填写相应内容。 要结束这一步,我们必须在应用的 url 方案中添加在创建 oauth 客户端 id 时生成的 url。前往项目配置并选择主应用目标。然后转到 info 部分,并添加来自您的 google 项目的相应 url 方案。 2 使用 parseswift 的 google 登录 在成功将 googlesignin 集成到您的 xcode 项目后,我们继续实现 google 登录功能。在 https //github com/templates back4app/ios sign in with google , logincontroller 负责处理和显示不同的登录选项。然后我们在这个控制器中设置 signinwithapplebutton 的操作: 1 // logincontroller swift file 2 import googlesignin 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithgooglebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "googleicon"), for normal) 11 button imageview? contentmode = scaleaspectfit 12 return button 13 }() 14 15 override func viewdidload() { 16 super viewdidload() 17 // 18 // layout configuration 19 // 20 21 signinwithgooglebutton addtarget(self, action #selector(handlesigninwithgoogle), for touchupinside) 22 } 23 } 24 25 // mark sign in with google section 26 extension logincontroller { 27 @objc fileprivate func handlesigninwithgoogle() { 28 // todo here we will implement the sign in procedure 29 } 30 } 为了显示google的登录表单, googlesignin googlesignin sdk允许我们通过 signin(with\ presenting\ callback) signin(with\ presenting\ callback) 方法进行设置和展示,来自于 gidsignin gidsignin 类。此外,我们必须传递一个通过 client id 创建的 gidconfiguration gidconfiguration 对象,然后是呈现视图控制器和一个回调闭包。在回调闭包中,google返回用户凭据(嵌入在一个 gidgoogleuser gidgoogleuser 对象中)或在身份验证失败时返回错误。 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 5 6 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 7 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } 12 13 // after google returns a successful sign in, we get the users id and idtoken 14 guard let googleuser = googleuser, 15 let userid = googleuser userid, 16 let idtoken = googleuser authentication idtoken 17 else { fatalerror("this should never happen!?") } 18 19 // todo sign in the user in your back4app application 20 } 21 } 22 } 然后我们使用这些凭据在 back4app 平台上登录用户。表示用户的对象是以下结构(请参见 https //www back4app com/docs/ios/parse swift sdk/users/user log in 以获取更多详细信息): 1 import parseswift 2 3 struct user parseuser { 4 5 6 var username string? 7 var email string? 8 var emailverified bool? 9 var password string? 10 11 var age int? 12 } 因此,谷歌返回的凭证包含一个 idtoken idtoken 和用户的 id id ,这将用于完成登录过程。更准确地说,我们实例化一个 parsegoogle\<user> parsegoogle\<user> 对象并调用 login(id\ idtoken\ completion) login(id\ idtoken\ completion) 方法。 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 gidsignin sharedinstance signout() // this should be called when the user logs out from your app for login testing purposes, we are calling it each time the user taps on the 'signinwithgooglebutton' button 5 6 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 7 8 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 9 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 10 if let error = error { 11 self? showmessage(title "error", message error localizeddescription) 12 return 13 } 14 15 // after google returns a successful sign in, we get the users id and idtoken 16 guard let googleuser = googleuser, 17 let userid = googleuser userid, 18 let idtoken = googleuser authentication idtoken 19 else { fatalerror("this should never happen!?") } 20 21 // with the user information returned by google, you need to sign in the user on your back4app application 22 user google login(id userid, idtoken idtoken) { result in 23 // returns the user object asociated to the gidgoogleuser object returned by google 24 switch result { 25 case success(let user) 26 // after the login succeeded, we send the user to the home screen 27 // additionally, you can complete the user information with the data provided by google 28 let homecontroller = homecontroller() 29 homecontroller user = user 30 31 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 32 case failure(let error) 33 // handle the error if the login process failed 34 self? showmessage(title "failed to sign in", message error message) 35 } 36 } 37 } 38 } 39 } 3 验证用户登录和会话创建 为了确保 google 登录成功,您可以查看您的 back4app 应用程序仪表板,查看新的 用户 用户 , 包含 google authdata authdata 参数。 您还可以在仪表板中验证是否创建了有效的会话,包含指向相应的 用户 用户 对象。 4 将现有用户链接到 google 账户 如果您的 ios 应用需要将 google 账户与您在 back4app 平台上的现有用户关联, parsegoogle\<user> parsegoogle\<user> 对象实现了 link(id\ completion ) link(id\ completion ) 方法,您需要传递要链接的 google 账户的 id id : 1 let googleuserid string // the id of the google account to link to 2 3 user google link(id googleuserid) { \[weak self] result in 4 switch result { 5 case success(let user) 6 // linking succeeded, user object now is linked to the corresponding google account 7 case failure(let error) 8 // linking failed, handle the error 9 } 10 } 5 注销 注销过程与调用 user signout() user signout() 方法的标准方式没有区别(在之前的指南中详细说明)。但是,当用户使用 google 账户登录时,为了一致性,您还应该注销当前的 google 用户。我们可以通过调用以下方法来实现这一点,和 user signout() user signout() 一起调用。 1 gidsignin sharedinstance signout () 为了验证当前用户是否有链接的 google 账户,您可以通过查看 user current? authdata user current? authdata 字典来检查。 6 运行应用 您可以访问这个 https //github com/templates back4app/ios sign in with google 并下载示例项目。在运行项目之前,请确保您已将配置文件设置为与您的开发者账户关联的配置文件。 结论 在本指南的最后,您学习了如何在 ios 上使用 google 登录或链接现有的 back4app 用户。在下一个指南中,我们将继续介绍另一种登录方法。