Xamarin Firebase Auth iOS - PullRequest
       0

Xamarin Firebase Auth iOS

1 голос
/ 14 марта 2020

Я изо всех сил пытаюсь получить 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 "";
            }
        }
    }
}

** Еще раз спасибо за любое руководство **

1 Ответ

0 голосов
/ 15 марта 2020

Я понял это. Просто хочу поделиться с теми, кто сталкивается с той же проблемой (ами)! это была пара проблем.

  1. Убедитесь, что ваша учетная запись разработчика Apple настроена, и введите ее в Visual Studio в разделе Инструменты: Параметры: Xamarin: Учетные записи Apple.
  2. Убедитесь, что в меню Visual Studio в раскрывающемся меню «Отладка» нажмите на гаечный ключ внизу под названием «[имя вашего решения]. iOS». Убедитесь, что Automati c Provisioning настроен и что вы выбираете КОМАНДУ из выпадающего списка, созданного разработчиком Apple, который вы сделали в шаге № 1.
  3. Наконец, я изменил свой код, чтобы сконцентрироваться на получении и возврат идентификатора пользователя.

Вот окончательный код, добавив также уровень Android:

проект уровень - 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)
        {
            var token = await auth.LoginWithEmailPassword(Email.Text, Password.Text);
            await DisplayAlert("Logged in: ", "Token: " + token, "OK");
                if (token != "")
            {
                ShowSuccess(token);
            }
            else
            {
                ShowError();
            }
        }

        public async void ShowSuccess(string Token)
        {
            await DisplayAlert("Success!", Token, "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

using PelletPirate.Interfaces;
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

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)
        {
            var token = await auth.SignUpWithEmailPassword(Email.Text, Password.Text);
            await DisplayAlert("Token: ", token, "OK");
            if (token != "")
            {
                ShowSuccess(token);
            }
            else
            {
                ShowError();
            }
        }

        public async void ShowSuccess(string Token)
        {
            await DisplayAlert("Success!", Token, "OK");
            await Shell.Current.GoToAsync("//main");
        }

        private async void ShowError()
        {
            await DisplayAlert("Registration Failed", "Could not register to Pellet Pirate", "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.Threading.Tasks;
using Xamarin.Forms;

[assembly: Dependency(typeof(AuthIOS))]
namespace PelletPirate.iOS
{
    class AuthIOS : IAuth
    {
        public async Task<string> LoginWithEmailPassword(string email, string password)
        {
            var authDataResult = await Auth.DefaultInstance.SignInWithPasswordAsync(email, password);
            System.Diagnostics.Debug.WriteLine("In AuthIOS right after var authDataResult " + authDataResult.User.Uid + " <<-- user uid here?");
            return await authDataResult.User.GetIdTokenAsync();
        }

        public async Task<string> SignUpWithEmailPassword(string email, string password)
        {
            var authDataResult = await Auth.DefaultInstance.CreateUserAsync(email, password);
            System.Diagnostics.Debug.WriteLine("In AuthIOS right after var authDataResult " + authDataResult.User.Uid + " <<-- user uid here?");
            return await authDataResult.User.GetIdTokenAsync();
        }

    }

}

Android уровень - AuthDroid.cs

using Firebase.Auth;
using PelletPirate.Droid;
using PelletPirate.Interfaces;
using System.Threading.Tasks;
using Xamarin.Forms;

[assembly: Dependency(typeof(AuthDroid))]
namespace PelletPirate.Droid
{
    public class AuthDroid : IAuth
    {

        public async Task<string> LoginWithEmailPassword(string email, string password)
        {
            var user = await FirebaseAuth.Instance.SignInWithEmailAndPasswordAsync(email, password);
            var token = await user.User.GetIdTokenAsync(false);
            return token.Token;
        }

        public async Task<string> SignUpWithEmailPassword(string email, string password)
        {
            var user = await FirebaseAuth.Instance.CreateUserWithEmailAndPasswordAsync(email, password);
            var token = await user.User.GetIdTokenAsync(false);
            return token.Token;
        }

    }
}

НАСЛАЖДАЙТЕСЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...