Ios gidsignin with swift和firebase:检查用户是新用户还是返回用户

Ios gidsignin with swift和firebase:检查用户是新用户还是返回用户,ios,swift,firebase,google-signin,gidsignin,Ios,Swift,Firebase,Google Signin,Gidsignin,我已经编写了一个应用程序,通过使用google signin软件包和firebase来登录用户。我想写一些功能,这将是 if the user has signed into the app using google previously then take them straight to the main ViewController otherwise they must be signing in for the first time then bring to a vie

我已经编写了一个应用程序,通过使用google signin软件包和firebase来登录用户。我想写一些功能,这将是

if the user has signed into the app using google previously
   then take them straight to the main ViewController 
otherwise they must be signing in for the first time
   then bring to a view controller to create a profile
我基本上只想要一个条件,如果用户以前登录过应用程序,则返回true/false,如果是新用户,则返回相反的结果


我的视图控制器

这是我的登录视图控制器,它是我的应用程序中第一个可见的视图。 现在,如果用户从未登录过应用程序,它只设置为打印“新用户”,如果用户是返回用户,则设置为打印“旧用户”

@objc(SignInViewController)
class SignInViewController: UIViewController, GIDSignInUIDelegate{

  @IBOutlet var signInButton: GIDSignInButton!

  var handle: AuthStateDidChangeListenerHandle?

  override func viewDidLoad() {
    super.viewDidLoad()
    GIDSignIn.sharedInstance().uiDelegate = self
    handle = Auth.auth().addStateDidChangeListener() { (auth, user) in
        if user != nil {
            MeasurementHelper.sendLoginEvent()
            dump(UserDefaults.standard)

            //This is the part which I need help with/////////////////////
            if this user has logged in previously
                print("old user")
                self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
            }else{
                print("new user")
                self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
            }
            ////////////////////////////////////////////////////////////

        }
    }
  }

  deinit {
    if let handle = handle {
        Auth.auth().removeStateDidChangeListener(handle)
    }
  }

其他不适合我的解决方案

看起来很有希望,但它只解释了如何使用Facebook而不是谷歌

使用嵌套的if语句
if UserDefaults.standard.string(forKey:“uid”)!=nil&&Auth.Auth().currentUser!=nil{
总是返回false。第一个条件总是返回false,但第二个条件总是返回true。(这发生在我多次登录的帐户和全新帐户上)。当我
转储(UserDefaults.standard)
时,我收到

- <NSUserDefaults: 0x2825dd140> #0
  - super: NSObject
-#0
-超级:NSObject
解决方案包括(newUserRref?.creationDate?.timeIntervalSince1970==newUserRref?.lastsigninade?.timeIntervalSince1970 )对我来说总是返回false,所以它返回没有用户是新用户。在那篇文章中还有一些我不完全理解的解决方案


没有真正解释如何检查这是否是首次登录,我只能看到它说明了如何创建新用户或登录现有用户,但我不知道如何知道何时该做什么。

因此,这一方法起初有效,但随后停止工作,但
newUserRref?.creationDate?.timeintervalence1970
newUserRrefIgnnade?.TimeIntervalences197几乎相同,但它们在小数点后第三位左右不同(一个是可选的(1553623223.055),另一个是可选的(1553623223.057))

我不得不修改发布的第三个链接中的解决方案,以包含对double类型的扩展,我将其直接放在SignenViewController类的底部

extension Double
{
    func truncate(places : Int)-> Double
    {
        return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
    }
}
然后,我用来检查用户是新用户还是旧用户的嵌套if语句

    if newUserRref?.creationDate?.timeIntervalSince1970.truncate(places: 2) == newUserRref?.lastSignInDate?.timeIntervalSince1970.truncate(places: 2){
        print("new user")
        self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
    }else{
        print("old user")
        self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
    }

因此,这在一开始起作用,但后来停止了作用,但
newUserRref?.creationDate?.timeintervalencesince1970
newUserRref?.lastsigninandate?.timeintervalence197
几乎相同,但在小数点后第三位(一个是可选的(1553623223.055),另一个是可选的(1553623223.057))

我不得不修改发布的第三个链接中的解决方案,以包含对double类型的扩展,我将其直接放在SignenViewController类的底部

extension Double
{
    func truncate(places : Int)-> Double
    {
        return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
    }
}
然后,我用来检查用户是新用户还是旧用户的嵌套if语句

    if newUserRref?.creationDate?.timeIntervalSince1970.truncate(places: 2) == newUserRref?.lastSignInDate?.timeIntervalSince1970.truncate(places: 2){
        print("new user")
        self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
    }else{
        print("old user")
        self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
    }