Firebase Auth Anonymous Login

16,649

Solution 1

So, in my case I wanted to show a login screen with signup but also the option to Skip login. If the user skips the login multiple times, I was doing signInAnonymous which I though it was reusing the user, but no.

So I solved it like this:

componentDidMount() {

    this.unsubscriber = firebase.auth().onAuthStateChanged((user) => {
      this.setState({ user: user, loadingUser: false}, () => {
        if (this.state.user != null && this.state.user.isAnonymous == false)
          this.startApp();
      });
    });

  }




skip = () => {
    this.setState({loading: true}, () => {
      if (this.state.user != null && this.state.user.isAnonymous == true)
        this.startApp();
      else {
        firebase.auth().signInAnonymouslyAndRetrieveData().then((result) => {
          this.setState({user: result.user}, () => {
            this.startApp()
          })
        })
        .catch(err => {
          this.setState({loading: false});
          alert(err)
        });
      }

    });

  }

Code is React Native but it should help you see the logic. I wait for the auth state and store the user temporarly. If it is not anonymous I start the home screen. If it is anonymous I give the user the option to register. If it still wants to skip, then I just start the app so I can re use the ID.

Solution 2

You can use the Custom Auth System. Since the "Play as Guest" will only be specified for a special device. You can use Device ID as the CustomToken and then call Firebase Authentication Method:

auth.SignInWithCustomTokenAsync(custom_token).ContinueWith{.......

You can provide "custom_token" as the Device ID. You can get Device ID by:

string deviceID = SystemInfo.deviceUniqueIdentifier;

Hope this helps...

Solution 3

When you call SignOut, your guest will signout forever. If you want to keep your guest, don't call SignOut method.

Share:
16,649
user7431543
Author by

user7431543

Updated on June 06, 2022

Comments

  • user7431543
    user7431543 about 2 years

    When using Firebase Auth Anonymous Account it occasionally creates a new UserID in the system and sometimes it uses the same UserID. I really want this to create the same UserID everytime so the anonymous user can still maintain the same progress/data in the app. This is actually the reason I started using Firebase was for this feature. How can I always maintain an anonymous account to keep the same UserID even after relaunching the app, etc.?

    I want the user to always get the same ID everytime they play as a guest. There is apps that I have seen that even persist after uninstall/reinstall. What are the situations in which the user will get a new ID?

    Edit: After implementing firebase Auth as suggested it will maintain the Anonymous UserID unless I completely uninstall the app and reinstall. Then the Anonymous UserID is no longer detected which means the user will no longer have their Guest game data. Also, suppose the user is signed in as a guest and chooses to logout (ie. auth.Signout()) then they will also not be able to access their original Guest game data again. Am I still missing something here or does Firebase Auth not achieve my original intentions?