iOS Facebook和Google登录

前言


      最近在对接完Google和Facebook登录之后准备对这部分内容做一个小小的总结,方便以后有需要的时候查看。

      具体的Google账号申请和Facebook账号的申请在这里就不做介绍了,这部分内容大多也都是产品在操作,我们主要关注的还是我们的代码以及项目配置问题。(下面是项目中的截图)

 

Google


 

      一、Cocopads导入项目

#Google
pod 'GoogleSignIn'

      二、配置项目

      1、导入GoogleService-Info.plist文件

      我还是建议大家直接导入这个文件的,因为你一旦使用其他谷歌服务,还是需要这个文件的,我们一旦介入谷歌登录,后面肯定还是需要其他服务的,比如Firebase数据统计等等。

 

       2、配置URL Types

 

      Google这里我们配置的是前面Plist文件中的REVERSED_CLIENT_ID字段

      三、我们接下来看看具体的代码

      1、导入头文件

/// Google登录
#import <GoogleSignIn/GoogleSignIn.h>

     2、具体的登录代码如下

    /// google登录
    /// - Parameters:
    ///   - controller: controller description
    ///   - loginSuccess: loginSuccess description
    ///   - loginFail: loginFail description
    func loginWithGoogle(_ controller:BaseViewController,loginSuccess:@escaping RequestSuccess, loginFail:@escaping RequestFail) {
        
        let signInConfig = GIDConfiguration(clientID: String.SDKId.googleClientId)
        GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: controller) { result, error in
            
            guard error == nil else {
                
                let error = ErrorRespond()
                error.msg = "The google authorization information failed"
                loginFail(error)
                return
            }
            
            let idToken = result?.authentication.idToken
            if (idToken != nil) {
                
                debugPrint(result?.profile?.email ?? "Email")
                debugPrint(result?.userID ?? "userID")
                debugPrint(idToken ?? "idToken")
                
                /// 组装需要的数据  处理自己的后续逻辑
            }
        }
    }

      3、退出登录方法

/// Google退出登录
func loginOutWithGoogle() {
        
   GIDSignIn.sharedInstance.signOut()
}

 

Facebook


 

      1、Facebook关于URL Types的配置前面的截图已经有保存、我们就不在重复说,fb后面的是你的应用ID。

      2、导入头文件   

/// Facebook
import FBSDKLoginKit

      3、具体的实现代码

    /// Facebook登录
    /// - Parameters:
    ///   - controller: controller description
    ///   - loginSuccess: loginSuccess description
    ///   - loginFail: loginFail description
    func loginWithFaceBook(_ controller:BaseViewController,loginSuccess:@escaping RequestSuccess, loginFail:@escaping RequestFail) {
        
        let loginManager = LoginManager()        
        loginManager.logIn(permissions: ["public_profile","email"], from: controller) { result, error in
            
            if error != nil{
    
                let error = ErrorRespond()
                error.msg = "The facebook authorization information failed"
                loginFail(error)
            }else{
                
                debugPrint("----------token----------------")
                debugPrint(result?.token?.tokenString ?? "")
                /// 判断token是否获取到 -没有就走错误
                if let tokenString = result?.token?.tokenString  {
                    /// 获取个人资料
                    Profile.loadCurrentProfile { profile, error in
                        
                        debugPrint(profile?.userID ?? "")
                        debugPrint(profile?.firstName ?? "")
                        debugPrint(profile?.lastName ?? "")
                        debugPrint(profile?.email ?? "")
                        debugPrint(profile?.imageURL ?? "")
                        debugPrint("--------------------------")
                        debugPrint(result?.token?.userID ?? "")
 
                        /// 获取个人信息是否成功
                        guard error == nil else {
                            
                            let error = ErrorRespond()
                            error.msg = "The facebook authorization information failed"
                            loginFail(error)
                            return
                        }
                        
                        /// 组装需要的数据 处理自己的后续逻辑
                    }
                }else{
                    
                    let error = ErrorRespond()
                    error.msg = "The facebook authorization information failed"
                    loginFail(error)
                }
            }
        }
    }

      4、退出登录

/// Facebook退出登录
func loginOutWithFacebook() {
        
     let loginManager = LoginManager()
     loginManager.logOut()
}

 

posted @ 2022-12-06 16:25  MrRisingSun  阅读(506)  评论(0编辑  收藏  举报