Вход в учетную запись Google через установленные учетные данные приложения Gmail в iOS - PullRequest
0 голосов
/ 20 ноября 2018

У меня Google Sign In в моем приложении iOS Swift.Он работает нормально, но каждый раз, когда мне нужно ввести email id и password.В то же время параллельно я использую Gmail App в моем iPhone.Как я могу использовать эти учетные данные Gmail из моего приложения и прямой вход?Возможно ли это с помощью Google-SignIn-iOS SDK?

Мне нужно это же для Google, FB, Outlook, Twitter, LinkedIn.

ViewController:

import GoogleSignIn

class ViewController: UIViewController, GIDSignInUIDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        GIDSignIn.sharedInstance().uiDelegate = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func sign(inWillDispatch signIn: GIDSignIn!, error: Error!) {

    }

    func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) {


    }

    func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) {



    }

}

AppDelegate:

import GoogleSignIn
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.


        GIDSignIn.sharedInstance().clientID = "3578***********************.apps.googleusercontent.com"
        GIDSignIn.sharedInstance().delegate = self

        return true
    }

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return GIDSignIn.sharedInstance().handle(url as URL?,
                                                 sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                 annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
              withError error: Error!) {
        if let error = error {
            print("\(error.localizedDescription)")
        } else {
            // Perform any operations on signed in user here.
            let userId = user.userID                  // For client-side use only!
            let idToken = user.authentication.idToken // Safe to send to the server
            let fullName = user.profile.name
            let givenName = user.profile.givenName
            let familyName = user.profile.familyName
            let email = user.profile.email
            // ...

            print("emailemailemail   ", email)
        }
    }

    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!,
              withError error: Error!) {
        // Perform any operations when the user disconnects from app here.
        // ...
    }
}

1 Ответ

0 голосов
/ 21 ноября 2018

следуйте этим шагам

Шаг 1

в вашем appdelegate добавьте идентификатор клиента и цель создания глубоких ссылок добавьте возвращаемое значение в исходное приложение

import GoogleSignIn

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        GIDSignIn.sharedInstance().clientID = "3578***********************.apps.googleusercontent.com"
        return true
    }

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return GIDSignIn.sharedInstance().handle(url as URL?,
                                                 sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                 annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }

для повторного использования Я создал общий класс для входа в Google

import UIKit
import GoogleSignIn

class GoogleSDK: NSObject,GIDSignInDelegate,GIDSignInUIDelegate {
static let shared = GoogleSDK()
//MARK: Internal Properties
var signInBlock: ((GIDGoogleUser) -> Void)?

func googleSignIn()  {
    GIDSignIn.sharedInstance().delegate = self
    //        GIDSignIn.sharedInstance().signOut()
    //        GIDSignIn.sharedInstance().signIn()
    GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/plus.login")
    GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/plus.me")
    if GIDSignIn.sharedInstance().hasAuthInKeychain() == true {
        GIDSignIn.sharedInstance().signInSilently()
    } else {
        GIDSignIn.sharedInstance().signIn()
    }
}

//Google SignIn Delegates
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    if error == nil {
        self.signInBlock?(user)

    } else {
        print("\(error.localizedDescription)")
    }
}

func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
    //  signInBlock(nil)
    //        if signInBlock != nil {
    //            signInBlock!(false, nil, error)
    //        }
}

}

в вашем текущем классе, вызовите вызов NSObject

 import GoogleSignIn

class ViewController: UIViewController, GIDSignInUIDelegate {

 // call the following method where you need
  // MARK: - Google Login
func GoogleLogin(){
    //  getTypeofLogin = getLoginType.Google.getName()
    GIDSignIn.sharedInstance().uiDelegate = self
    GoogleSDK.shared.googleSignIn()
    GoogleSDK.shared.signInBlock =   { (user) in
        if !user.userID.isEmpty{
            print(user)
            //self.handleSocialLogin(UID: user.userID, UName: user.profile.name, UEmail: user.profile.email, loginType:getLoginType.Google.getName())
        }
    }
}

}

для выхода из системы, используйте этот

  GIDSignIn.sharedInstance().signOut()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...