首页 > 解决方案 > 带有 firebase 用户注册错误的 Xamarin 表单

问题描述

我正在开发一个应用程序,使用 xamarin 表单和带有 xamarin.firebase.auth 和 xamarin.firebase.core 的 firebase 身份验证,当我想创建一个新用户时,代码工作正常,但它给了我例外

Java.Lang.IllegalStateException:'任务尚未完成'

当我逐行跟踪代码时,一切正常,我没有收到任何错误,但是在创建用户后运行应用程序时,它给了我异常。

这是我的代码:

pcl中的接口:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace XamarinFirebaseAuth
{
    public interface IAuth
    {
        Task<string> LoginWithEmailPassword(string email, string password);
        bool SignUpWithEmailPassword(string email, string password);

    }
}

安卓实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Foundation;
using UIKit;
using XamarinFirebaseAuth;
using XamarinFirebaseAuth.iOS;
using Firebase.Auth;
using System.Threading.Tasks;
using Xamarin.Forms;

[assembly: Dependency(typeof(AuthIOS))]
namespace XamarinFirebaseAuth.iOS
{
    public class AuthIOS : IAuth
    {
        public async Task<string> LoginWithEmailPassword(string email, string password)
        {
            try
            {
                var user = await Auth.DefaultInstance.SignInWithPasswordAsync(email, password);
                var token = user.User.GetIdTokenAsync();
                return token.ToString();
            }
            catch(Exception e)
            {
                return "";
            }
        }
        public  bool SignUpWithEmailPassword(string email, string password)
        {
            try
            {
                var signUpTask = Auth.DefaultInstance.CreateUserAsync(email, password);
                return true;
            }
            catch (Exception e)
            {
                throw;
                //return false;
            }

        }
    }
}

这是我的注册页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace XamarinFirebaseAuth
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class SignUpPage : ContentPage
    {
        IAuth auth;
        public SignUpPage()
        {
            InitializeComponent();
            auth = DependencyService.Get<IAuth>();
        }

        private async void btnRegister_Clicked(object sender, EventArgs e)
        {
            try
            {
                bool created = auth.SignUpWithEmailPassword(EmailInput.Text, PasswordInput.Text);
                if (created)
                {
                    await DisplayAlert("Success", "Your account created successfully", "OK");
                    await Navigation.PopAsync();
                }
                else
                {
                    await DisplayAlert("Error", "Something went wrong. Try again later!", "OK");
                }
            }
            catch
            {
                throw;
            }

        }
    }
}

标签: c#androidfirebasexamarinfirebase-authentication

解决方案


我认为您应该等待CreateUserAsync方法来了解帐户是否创建成功:

AuthDataResult signUpTask = await Auth.DefaultInstance.CreateUserAsync(email, password);

然后您可以获取用户信息:

await signUpTask.User.GetIdTokenAsync();

推荐阅读