Должен ли пакет Xamarin.Firebase.Common
быть установлен в общем проекте Xamarin?
Пытаюсь установить, но получаю ошибку:
Ошибка NU1202 Пакет Xamarin.Firebase.Common 120.1.0.1 не является совместим с netstandard2.0 (.NETStandard, Version=v2.0). Упаковка Xamarin.Firebase.Common 120.1.0.1 поддерживает:
- monoandroid12.0 (MonoAndroid, версия = v12.0)
- net6.0-android31.0 (.NETCoreApp, версия = v6.0)
И Target Framework
, и Target Android Version
установлены на Android 13
для проекта Android.
Что я должен установить в общий проект? Я пытаюсь использовать FirebaseNetworkException
в своем коде, но он не распознается. Visual Studio предлагает установить Xamarin.Firebase.Common
, чтобы исправить ошибку. Я уже сделал это для проекта Android. Это невозможно для общего проекта.
Вам не нужно иметь дело с этим в вашем общем проекте, потому что сетевые исключения зависят от платформы. Ваше приложение Xamarin размещается внутри собственного приложения и поэтому не знает особенностей платформы, на которой оно работает. Чего именно вы пытаетесь достичь? Как вы думаете, для чего вам нужен FirebaseNetworkException
?
Просто чтобы доставить соответствующее сообщение пользователю.
Больше контекста, пожалуйста. Для чего вы используете Firebase в своем приложении?
Это аутентификация Firebase. Есть и другие исключения, которые также полезно поймать, например, WeakPassword
. Я тоже использую Plugin.FirebaseAuth
.
Аутентификация Firebase реализована по-разному на Android и iOS, для каждой есть отдельные библиотеки, но есть и кроссплатформенные библиотеки, такие как Plugin.FirebaseAuth
, которые под капотом обрабатывают специфику платформы, но по сути работают одинаково. В любом случае вы не можете перехватывать исключения из кода, специфичного для платформы, из общего контекста. Причина в направлении зависимостей. Код конкретной платформы зависит от общего кода, а не наоборот. Plugin.FirebaseAuth
определяет FirebaseAuthException
с полем ErrorType
, которое вы можете использовать.
Вы должны обновить свой вопрос и объяснить, что вы на самом деле пытаетесь выполнить в вопросе, потому что в настоящее время ответ на ваш текущий вопрос просто: нет, вы не можете установить Xamarin.Firebase.Common в общий проект. Не забудьте включить код, в котором вы пытаетесь перехватить исключение.
Как сказал ewerspej, вам необходимо установить пакет Xamarin.Firebase.Common в Android-части проекта xamarin.forms.
Затем вы можете создать класс в части Android и использовать FirebaseNetworkException
в методе класса. После этого вы можете использовать службу зависимостей для вызова метода в общем проекте Xamarin.
Для получения дополнительной информации вы можете обратиться к официальному документу о Xamarin.Forms DependencyService Introduction .
Я вижу, что у Plugin.FirebaseAuth
есть Error Types
: github.com/f-miyu/… Это не исключения, поэтому их нельзя использовать в блоке try-catch, верно? Хотя как их можно использовать? Вероятно, их можно использовать в общем проекте, поэтому нет необходимости использовать Dependency Service
.
Прежде всего, вы не можете использовать пакет Xamarin.Firebase.Common
, который зависит от Android, в общем проекте вашего приложения Xamarin.Forms.
Во-вторых, вы не можете использовать собственные исключения в общем кроссплатформенном контексте. Поэтому у вас не будет доступа к FirebaseNetworkException
и т. д. в общем проекте.
Вместо этого, поскольку вы уже используете Plugin.FirebaseAuth, вам нужно вместо этого перехватывать FirebaseAuthException
, который упаковывает различные исключения для конкретной платформы и скрывает их за кодами ошибок.
Ваш код должен выглядеть примерно так:
try
{
var provider = new OAuthProvider("google.com");
var result = await CrossFirebaseAuth.Current.Instance.SignInWithProviderAsync(provider);
}
catch (FirebaseAuthException e)
{
switch(e.ErrorType)
{
case ErrorType.NetWork:
//handle network error
break;
case InvalidCredentials:
//handle invalid credentials
break;
//...
default: break;
}
}
Полный список сопоставления перечисления ErrorType
с исключениями Firebase есть в документации.
Поэтому везде, где вам нужно поймать исключение, вы можете проверить ErrorType
и выполнить соответствующую операцию или показать пользователю сообщение об ошибке.
ХОРОШО. Вот как ErrorType
можно использовать в коде. Спасибо, что разъяснили!
Нет, это не так. «Общий» — это не описание общей кроссплатформенной библиотеки, а означает, что она содержит общие классы, совместно используемые несколькими другими nugets для Firebase. Вам нужно установить это в свой проект Android.