Глубокие ссылки для приложения xamarin без веб-сайта - PullRequest
0 голосов
/ 05 июня 2019

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

Я пробовал фильтры намерений в mainactivity.cs вместе с datascheme. В моей реализации, когда я отправляю ссылку внутри письма и нажимаю ОС, спрашивает меня, как мне поступить 1. Приложением или 2. Chrome Это нормально. Но когда я нажимаю на приложение, оно открывается из основного действия.

 [IntentFilter(new[] { Android.Content.Intent.ActionView },
                       AutoVerify = true,
                       Categories = new[]
                       {
                            Android.Content.Intent.CategoryDefault,
                            Android.Content.Intent.CategoryBrowsable
                       },
                       DataScheme = "http",
                       DataPathPrefix = "",
                       DataHost = "MyAppName")]

1 Ответ

0 голосов
/ 06 июня 2019

Предположим, что URL, по которому вы щелкаете, - http://myappname?destination=a, вы можете получить данные в действии через:

if (Intent.Data != null)
{
    var host = Intent.Data.EncodedAuthority;
    var parameter = Intent.Data.GetQueryParameter("destination");
}

Поскольку вы используете Xamarin.Forms, вам нужно перейти на указанную страницу в Forms. MessagingCenter - хороший выбор.

Во-первых, зарегистрируйте его в проекте App on Forms:

public App()
{
    InitializeComponent();

    MainPage = new NavigationPage(new MainPage());

    MessagingCenter.Subscribe<object, object>(this, "Navigate", (sender, args) =>
    {
        if ((string)args == "a")
        {
            MainPage = new SecondPage();

            // or (MainPage as NavigationPage).PushAsync(new SecondPage());
        }
    });
}

Запустите этот центр сообщений, когда получите данные:

if (host == "myappname")
{
    MessagingCenter.Send<object, object>(this, "Navigate", parameter);
}

Обновление

Если вы не хотите использовать MessagingCenter.Определите публичный метод в приложении, например:

public void MoveToPage(string pageName)
{
    if (pageName == "a")
    {
        MainPage = new SecondPage();
        // or (MainPage as NavigationPage).PushAsync(new SecondPage());
    }
}

Затем вызовите его, когда Intent.Data != null в MainActivity:

var formsApp = new App();
LoadApplication(formsApp);
if (Intent.Data != null)
{
    var host = Intent.Data.EncodedAuthority;
    var parameter = Intent.Data.GetQueryParameter("destination");

    formsApp.MovePage(parameter);
}
...