public static FirebaseUserTokenResult CreateCanceledResult()
    {
        FirebaseUserTokenResult result = new FirebaseUserTokenResult();

        result.IsCanceled = true;
        return(result);
    }
    public static FirebaseUserTokenResult CreateSuccessResult(string accessToken)
    {
        FirebaseUserTokenResult result = new FirebaseUserTokenResult();

        result.AccessToken = accessToken;
        return(result);
    }
    public static FirebaseUserTokenResult CreateFaultedResult(Exception exception)
    {
        FirebaseUserTokenResult result = new FirebaseUserTokenResult();

        result.IsFaulted = true;
        result.Exception = exception;
        return(result);
    }
    public void SignOut()
    {
        if (auth != null)
        {
            auth.SignOut();
        }

        currentUser     = null;
        currentToken    = null;
        stsTokenManager = null;
    }
    public IEnumerator ProcessFirebaseUserTokenTaskRoutine(Task <string> t, Action <FirebaseUserTokenResult> callback)
    {
        while (!t.IsCompleted)
        {
            yield return(null);
        }

        if (callback != null)
        {
            if (t.IsFaulted)
            {
                callback(FirebaseUserTokenResult.CreateFaultedResult(t.Exception));
            }
            else if (t.IsCanceled)
            {
                callback(FirebaseUserTokenResult.CreateCanceledResult());
            }
            else
            {
                currentToken = FirebaseUserTokenResult.CreateSuccessResult(t.Result);
                callback(currentToken);
            }
        }
    }
    public IEnumerator ProcessWebServiceUserRoutine(WWW www, Action <FirebaseUserResult> callback)
    {
        yield return(www);

        if (callback != null)
        {
            if (!string.IsNullOrEmpty(www.error))
            {
                currentUser     = null;
                currentToken    = null;
                stsTokenManager = null;
                callback(FirebaseUserResult.CreateFaultedResult(new Exception(www.error)));
            }
            else
            {
                // Parsing json
                var result = MiniJSON.Json.Deserialize(www.text) as Dictionary <string, object>;
                stsTokenManager = result["stsTokenManager"] as Dictionary <string, object>;
                currentUser     = FirebaseUserResult.CreateSuccessResult(result.GetString("uid"), result.GetString("displayName"), result.GetString("photoURL"), result.GetString("email"), result.GetBool("emailVerified"), result.GetBool("isAnonymous"));
                currentToken    = FirebaseUserTokenResult.CreateSuccessResult(stsTokenManager.GetString("accessToken"));
                callback(currentUser);
            }
        }
    }