我想将用户从电子邮件链接重定向到特定的应用页面。 我没有后续网站,我的应用程序是独立的。 我已经尝试了意图过滤器,它确实将我带到了应用程序的主要活动,但是如何将用户导航到特定活动是我的主要障碍。 对应用程序链接不感兴趣,我只需要深度链接。 我想知道如何直接从链接本身导航到特定活动。
我在mainactivity.cs中尝试了意图过滤器以及datascheme。 在我的实现中,当我在电子邮件中发送链接并单击OS时,问我该如何进行 1.通过app或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")]
答案 0 :(得分:0)
假设您点击的网址是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。在App中定义一个公共方法,例如:
public void MoveToPage(string pageName)
{
if (pageName == "a")
{
MainPage = new SecondPage();
// or (MainPage as NavigationPage).PushAsync(new SecondPage());
}
}
然后在MainActivity中的Intent.Data != null
时调用它:
var formsApp = new App();
LoadApplication(formsApp);
if (Intent.Data != null)
{
var host = Intent.Data.EncodedAuthority;
var parameter = Intent.Data.GetQueryParameter("destination");
formsApp.MovePage(parameter);
}