Изменить: Пример проекта, который демонстрирует крах, можно найти здесь: https://github.com/rringham/brokenazurexamforms - вам нужно установить собственный URL-адрес службы поиска Azure в:
- SRC/BrokenAzureForms/Droid/Услуги/Пользователь/DroidUserService.cs
- SRC/BrokenAzureForms/IOS/Услуги/Пользователь/IosUserService.cs
Я вижу Xamarin Forms Navigation.PushAsync()
сбой на Android, когда я пытаюсь использовать его после аутентификации с помощью Azure MobileServiceClient
. Эта авария изолирована от Android - это не происходит на iOS.
Здесь настройка - у меня есть базовая NavigationPage
в качестве моей главной страницы приложения:
MainPage = new NavigationPage(new LoginPage());
В моем LoginPage
я аутентифицируюсь с использованием класса DependencyService
-injected, который выполняет аутентификацию в моем проекте Android:
private async void OnMicrosoftAccountTapped(object sender, EventArgs args)
{
IUserService userService = DependencyService.Get<IUserService>();
bool authenticated = await userService.LoginWithAzureAD();
if (authenticated)
{
await Navigation.PushAsync(new HomePage(), false);
}
}
В моей реализации Android IUserService
я делаю это (в точности, что показывают обучающие программы Azure/Xamarin Forms):
public async Task<bool> LoginWithAzureAD()
{
try
{
_user = await _client.LoginAsync(Xamarin.Forms.Forms.Context, MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory);
}
catch (Exception)
{
return false;
}
return true;
}
Здесь, где вещи разваливаются. Когда LoginWithAzureAD()
выполняется, управление возобновляется в OnMicrosoftAccountTapped()
; мы переходим к вызову Navigation.PushAsync()
, и бум - приложение вылетает с очень небольшим количеством подробностей:
Все, что я могу думать, это то, что Azure MobileServiceClient
делает что-то очень забавное с Xamarin.Forms.Forms.Context
внутренне, потому что, если я удалю вызов await userService.LoginWithAzureAD()
, вызов Navigation.PushAsync()
будет работать без проблем. Что-то в MobileServiceClient либо сломано, либо что-то ломает в Xamarin Forms.
Кто-нибудь видит что-нибудь подобное?