Изменить страницу Xamarin.Forms из файла Xamarin.iOS

Я работаю над приложением Xamarin.Forms, которое использует проверку подлинности Firebase. Чтобы заставить Firebase работать, мне нужно создать два разных файла для конкретной платформы (iOS и Android) для обработки задач аутентификации (таких как CreateNewUser и Login). У меня есть страница Xamarin.Forms под названием «Страница оплаты», которая просит пользователя ввести свой адрес электронной почты и пароль, и отправка этой страницы запускает DependencyService для создания учетной записи пользователя. На странице оплаты у меня также есть небольшое окно, которое появится, если что-то пойдет не так с процессом создания учетной записи (конкретно в этом случае, если в базе данных аутентификации уже существует дубликат электронной почты).

Мой вопрос: если один из файлов зависимостей для iOS или Android перехватывает «ERROR_EMAIL_ALREADY_IN_USE», как я могу настроить отображение диалогового окна ошибки на странице оплаты (другими словами, установить для его свойства «isVisible» значение «true»). Я пробовал несколько вещей, но до сих пор не могу ссылаться на элементы в PaymentPage (страница Xamarin.Forms) со страницы проверки подлинности Xamarin.iOS.

Мой код зависимости выглядит следующим образом:

public void CreateNewUser(string email, string password, System.Collections.Specialized.NameValueCollection userData) 
{ 
    Auth.DefaultInstance.CreateUser(email, password, HandleAuthDataResultHandler); 
}

async void HandleAuthDataResultHandler(AuthDataResult authResult, Foundation.NSError error) 
{ 
     if (error.UserInfo["error_name"].ToString() == "ERROR_EMAIL_ALREADY_IN_USE") 
    { 
       //What goes here to modify the Xamarin.Forms page?? 
   }
 else { }
}

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

Johann Pérez 30.01.2019 21:09

Если это поможет, вот мой метод CreateNewUser в моей зависимости iOS: } async void HandleAuthDataResultHandler(AuthDataResult authResult, ошибка Foundation.NSError) { if (error.UserInfo["error_name"].ToString() == "ERROR_EMAIL_ALREADY_IN_USE") { //Что здесь происходит?? } еще { }}

Russ J 30.01.2019 21:11

О, теперь ваши вопросы имеют больше смысла. MessagingCenter может быть хорошим вариантом docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundament‌​als/…

Johann Pérez 30.01.2019 21:16
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
3
108
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

в вашем коде XAML позади

try {
  // call your dependency service
} catch (Exception ex)
{
  // update the UI
}

то в вашем методе DependencyService он должен генерировать исключение при возникновении ошибки

Ответ принят как подходящий

MessagingCenter может быть хорошим вариантом https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

Вы можете подписаться на свою модель представления и опубликовать сообщение от обработчика с результатом.

Какой будет синтаксис? Я разместил следующий код на своей странице оплаты, и он выдает ошибку MessagingCenter.Subscribe < DependencyService.Get<IFirebaseAuthenticator>() >

Russ J 30.01.2019 21:28

DependencyService.Get<IFirebaseAuthenticator>() вернет экземпляр, а не тип, хотя я никогда не пробовал его с использованием интерфейса, я думаю, это MessagingCenter.Subscribe <IFirebaseAuthenticator> должен работать

Johann Pérez 30.01.2019 21:48

Другие вопросы по теме