Невозможно создать нового пользователя с помощью Firebase (Xamarin. Android) - PullRequest
0 голосов
/ 29 апреля 2020

Всякий раз, когда я пытаюсь зарегистрировать пользователя через приложение, оно всегда терпит неудачу, даже если все требования соблюдены. Я включил в манифест, но это ничего не исправило. Также включен метод входа по электронной почте / паролю.

Я действительно заблудился относительно того, что делать, потому что я впервые использую xamarin, и мне кажется, что когда дело доходит до форм xamarin и vs, оказывается больше помощи xamarin android.

    public class registerActivity : AppCompatActivity
    {
        TextInputLayout fullNameText;
        TextInputLayout phoneText;
        TextInputLayout emailtext;
        TextInputLayout passwordText;
        Button registerButton;

        FirebaseAuth firebaseAuth;
        FirebaseDatabase userCredentials;

        taskCompletetionListener taskCompletetionListener = new taskCompletetionListener();
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.registerPage);

            Typeface tf = Typeface.CreateFromAsset(Assets, "Tw_Cen_MT.TTF");

            var signUpTxt = FindViewById<TextView>(Resource.Id.signUpTxt);
            signUpTxt.SetTypeface(tf, TypefaceStyle.Bold);

            var signUpLink = FindViewById<TextView>(Resource.Id.signInLink);
            signUpLink.SetTypeface(tf, TypefaceStyle.Bold);

            var alreadyMemberTxt = FindViewById<TextView>(Resource.Id.haveAccTxt);
            signUpTxt.SetTypeface(tf, TypefaceStyle.Bold);

            Button signUpBtn = (Button)FindViewById(Resource.Id.registerBtn);
            signUpBtn.SetTypeface(tf, TypefaceStyle.Bold);

            InitializedFirebase();
            firebaseAuth = FirebaseAuth.Instance;
            ConnectControl();
        }

        void InitializedFirebase()
        {
            var app = FirebaseApp.InitializeApp(this);

            if (app == null)
            {
                var options = new FirebaseOptions.Builder()
                    .SetApplicationId("semoto-4b53b")
                    .SetApiKey("AIzaSyBiGjJQwDewsyWxviBjIimw7pQBHkbHkiA")
                    .SetDatabaseUrl("https://semoto-4b53b.firebaseio.com")
                    .SetStorageBucket("semoto-4b53b.appspot.com")
                    .Build();

                app = FirebaseApp.InitializeApp(this, options);
                userCredentials = FirebaseDatabase.GetInstance(app);
            }

            else
            {
                userCredentials = FirebaseDatabase.GetInstance(app);
            }
        }

        void ConnectControl()
        {
            fullNameText = (TextInputLayout)FindViewById(Resource.Id.nameField);
            emailtext = (TextInputLayout)FindViewById(Resource.Id.emailField);
            phoneText = (TextInputLayout)FindViewById(Resource.Id.phoneNumField);
            passwordText = (TextInputLayout)FindViewById(Resource.Id.passwordField);
            registerButton = (Button)FindViewById(Resource.Id.registerBtn);

            registerButton.Click += RegisterButton_Click;
        }

        private void RegisterButton_Click(object sender, EventArgs e)
        {
            string fullName, phoneNum, email, password;
            fullName = fullNameText.EditText.Text;
            phoneNum = phoneText.EditText.Text;
            email = emailtext.EditText.Text;
            password = passwordText.EditText.Text;

            if(fullName.Length <= 3)
            {
                fullNameText.ErrorEnabled = true;
                fullNameText.Error = "Please enter a valid name";
                return;
            }
            else if (!email.Contains("@"))
            {
                emailtext.ErrorEnabled = true;
                emailtext.Error = "Please enter a valid email";
                return;
            }
            else if(phoneNum.Length < 9)
            {
                phoneText.ErrorEnabled = true;
                phoneText.Error = "Please enter a valid phone number";
                return;
            }
            else if (password.Length < 8)
            {
                passwordText.ErrorEnabled = true;
                passwordText.Error = "Password should be at least 8 characters long";
                return;
            }

            registerUser(fullName, phoneNum, email, password);
        }

        void registerUser(string name, string phone, string email, string password)
        {
            taskCompletetionListener.success += TaskCompletetionListener_success;
            taskCompletetionListener.failure += TaskCompletetionListener_failure;
            firebaseAuth.CreateUserWithEmailAndPassword(email, password)
                .AddOnSuccessListener(this, taskCompletetionListener)
                .AddOnFailureListener(this, taskCompletetionListener);

        }

        private void TaskCompletetionListener_failure(object sender, EventArgs e)
        {
            Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
            alert.SetTitle("Registration Failed!");
            alert.SetMessage("Ensure that you meet all of the requirements. ");
            alert.SetNeutralButton("OK", delegate
            {
                alert.Dispose();
            });
            alert.Show();
        }
        //reishinishite kudasai
        private void TaskCompletetionListener_success(object sender, EventArgs e)
        {
            Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
            alert.SetTitle("Registration Successful");
            alert.SetMessage("Welcome!");
            alert.SetNeutralButton("OK", delegate
            {
                alert.Dispose();
            });
            alert.Show();
        }
    }
}

Я создал класс для слушателя завершения задачи

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

using Android.App;
using Android.Content;
using Android.Gms.Tasks;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace Semoto.eventListeners
{
    public class taskCompletetionListener : Java.Lang.Object, IOnSuccessListener, IOnFailureListener
    {
        public event EventHandler success;
        public event EventHandler failure;
        public void OnFailure(Java.Lang.Exception e)
        {
            failure?.Invoke(this, new EventArgs());
        }

        public void OnSuccess(Java.Lang.Object result)
        {
            success?.Invoke(this, new EventArgs());
        }
    }
}

1 Ответ

1 голос
/ 29 апреля 2020

Это не ответ, просто чтобы вам было легче устранять неполадки.

Первый шаг, вам нужно знать, что вызвало сбой.

Измените OnFailure слушателя следующим образом:

 public void OnFailure(Java.Lang.Exception e)
  {
     failure?.Invoke(e, new EventArgs());
  }

, затем в своей деятельности распечатайте сообщение об ошибке, здесь используйте свой диалог для отображения:

 private void TaskCompletetionListener_failure(object sender, EventArgs e)
    {
        Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
        alert.SetTitle("Registration Failed!");
        alert.SetMessage(((Java.Lang.Exception)sender).Message);
        alert.SetNeutralButton("OK", delegate
        {
            alert.Dispose();
        });
        alert.Show();
    }

тогда вы можете показать свое сообщение об ошибке, что мы можем помочь вам найти решение быстрее. (Ps: я использую ваш код для тестирования с моей учетной записью, он работает хорошо).

...