Я изо всех сил пытаюсь получить Xamarin Firebase Auth на iOS , возвращать значения, закодированные правильно, чтобы обработать мои успехи / неудачи логи c, работающие как для SignInWithEmailPasswordAsync(email, password)
, так и для CreateUserAsync
. Я уверен, что проблема в моем var user =
и AuthDataResult signUpTask =
коде, потому что методы CreateUser и SignIn фактически работают для добавления / входа пользователей в firebase, потому что я вижу их в консоли ... и если я вручную регистрирую пользователь в firebase, дата входа пуста ... и когда я вхожу в него через мое приложение iOS, я вижу там отметку даты. Если я регистрирую нового пользователя, он появляется в консоли аутентификации Firebase ... все хорошо там. Он просто возвращает статус возврата из моего файла Auth IOS .cs обратно на страницы входа и регистрации вызывающего, чтобы я мог успешно обработать или выполнить ошибку. Любая помощь или будет принята с благодарностью. Вот мой код:
уровень проекта - IAuth.cs
using System.Threading.Tasks;
namespace PelletPirate.Interfaces {
public interface IAuth
{
Task<string> LoginWithEmailPassword(string email, string password);
Task<string> SignUpWithEmailPassword(string email, string password);
} }
уровень проекта - LoginPage.xaml.cs
using PelletPirate.Interfaces;
using System;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace PelletPirate.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
[DesignTimeVisible(true)]
public partial class LoginPage : ContentPage
{
IAuth auth;
public LoginPage()
{
InitializeComponent();
auth = DependencyService.Get<IAuth>();
}
private async void BtnLogin_Clicked(object sender, EventArgs e)
{
string uid = await auth.LoginWithEmailPassword(Email.Text, Password.Text);
await DisplayAlert("Do we have a user? ", uid, "Ok");
if (uid != "")
{
ShowSuccess(uid);
}
else
{
ShowError();
}
}
public async void ShowSuccess(string UID)
{
await DisplayAlert("Success!", UID, "OK");
await Shell.Current.GoToAsync("//loggedin");
}
private async void ShowError()
{
await DisplayAlert("Authentication Failed", "E-mail or password are incorrect. Try again!", "OK");
}
private async void BtnRegister_Clicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//register");
}
private async void BtnGoogleLogin_Clicked(object sender, EventArgs e)
{
await DisplayAlert("Alert", "You need to delete this ADD button stuff", "OK");
}
}
}
уровень проекта - RegistrationPage.xaml.cs
namespace PelletPirate.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class RegisterPage : ContentPage
{
IAuth auth;
public RegisterPage()
{
InitializeComponent();
auth = DependencyService.Get<IAuth>();
}
async void BtnRegister_Clicked(object sender, EventArgs e)
{
string uid = await auth.SignUpWithEmailPassword(Email.Text, Password.Text);
await DisplayAlert("Uid: ", uid, "OK");
if (uid != "")
{
await DisplayAlert("Success", "Welcome to Pellet Pirate!", "OK");
await DisplayAlert("User", uid, "OK");
await Shell.Current.GoToAsync("//main");
}
else
{
await DisplayAlert("Sign Up Failed", "Something went wrong. Try again!", "OK");
}
}
private async void BtnCancel_Clicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//login");
}
}
}
iOS уровень - Auth IOS .cs
using Firebase.Auth;
using PelletPirate.Interfaces;
using PelletPirate.iOS;
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
[assembly: Dependency(typeof(AuthIOS))]
namespace PelletPirate.iOS
{
public class AuthIOS : IAuth
{
public async Task<string> LoginWithEmailPassword(string email, string password)
{
try
{
var user = await Auth.DefaultInstance.SignInWithPasswordAsync(email, password);
return await user.User.GetIdTokenAsync();
}
catch (Exception)
{
return "";
}
}
public async Task<string> SignUpWithEmailPassword(string email, string password)
{
try
{
AuthDataResult signUpTask = await Auth.DefaultInstance.CreateUserAsync(email, password);
return signUpTask.User.Uid;
}
catch (Exception)
{
return "";
}
}
}
}
** Еще раз спасибо за любое руководство **