В настоящее время я разрабатываю приложение, в котором у нас есть функция, называемая «подсказками», которые по сути являются микроблогами.В этих блогах, основанных на html, вы можете ссылаться на другой «Контент», который существует в нашем приложении, через обычные гиперссылки.
Приложение настроено на открытие схемы URL этих ссылок, и все платформы имеют свой собственный коднаправить новый URI в приложение форм xamarin через MessagingCenter, у которого есть подписчик внутри класса App, например:
MessagingCenter.Subscribe(Current, DoshiMessages.NewUri, async (Application app, string uri) =>
{
var result = await HandleUriNavAsync(uri);
if (!result)
await Container.Resolve<IUserDialogs>().AlertAsync("Link was invalid");
});
, который вызывает:
private async Task<bool> HandleUriNavAsync(string uri)
{
if (uri == null)
return false;
await NavigationService.NavigateAsync(new Uri(uri, UriKind.Absolute));
return true;
}
Теперь это работает нормальнос абсолютным URI, но если я изменю его на
//Example: uri = www.example.com/main/nav/test?userid=0
private async Task<bool> HandleUriNavAsync(string uri)
{
if (uri == null)
return false;
//Example: relative = test?userid=0
var relative = uri.Split('/').Last();
await NavigationService.NavigateAsync(new Uri(relative, UriKind.Relative));
return true;
}
Навигация никогда не срабатывает, но не выдается никаких исключений, и задача успешно завершается (я проверил).Обратите внимание, что приведенный выше код выполняется, когда приложение уже запущено и уже имеет активные модели представления.
Есть ли что-то очевидное, что я делаю неправильно, и есть ли лучший способ добиться этого?
Cheers!