c# - 带有 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;
}
}
}
}
解决方案
我认为您应该等待CreateUserAsync
方法来了解帐户是否创建成功:
AuthDataResult signUpTask = await Auth.DefaultInstance.CreateUserAsync(email, password);
然后您可以获取用户信息:
await signUpTask.User.GetIdTokenAsync();
推荐阅读
- visual-studio-2017 - Azure ARM DSC - 安装 VS2017 远程调试器
- google-chrome-extension - 如何使用 chrome.webRequest API 更改 http 方法
- javascript - 如何在角度管道中传递变量
- triggers - Salesforce 比较标准 obj 和自定义对象并分配值
- java - Dependent dynamic dropdown using JSP, Servlet, JQuery and denormalized Mysql table
- java - 单击时尝试获取 JButton 的坐标
- java - Draw jpanel at double position
- batch-file - 当字符串与定界符具有相同字符时如何仅处理特定定界符
- java - How can I display a Youtube video in Android app from desired video ID such that the ID is set from a server so that I can change the ID later?
- swift - 当依赖项名称等于项目名称时,运行“swift build”会因分段错误而崩溃