【问题标题】:Xamarin Forms UWP Push Notification ClickXamarin 表单 UWP 推送通知单击
【发布时间】:2018-03-01 09:55:16
【问题描述】:

我已经为我的 Xamarin.Forms UWP 应用程序实现了推送通知功能,并且我能够接收通知,然后弹出 toast。我正在使用下面的代码。

//This method is triggered when a user taps/clicks the notification
private void Toast_Activated(ToastNotification sender, object args)
{
    ToastActivatedEventArgs targs = (ToastActivatedEventArgs)args;
    var xml = sender.Content.GetXml();
    XmlDocument xDoc = new XmlDocument();
    xDoc.LoadXml(xml);

    XmlNodeList txts = xDoc.GetElementsByTagName("text");
    var sitid = txts[0].InnerText;
    var id = sitid.Substring(sitid.LastIndexOf(':') + 1);
    Debug.WriteLine("Id:" + id);
}

当用户单击/点击通知时,我想从我的 PCL 项目中打开一个特定页面并将此 id 变量作为参数传递。我怎样才能做到这一点 ?任何帮助将不胜感激。

【问题讨论】:

    标签: c# xamarin xamarin.forms uwp xamarin.uwp


    【解决方案1】:

    使用 ServiceLocator 或您必须调用导航服务的任何其他 dependency injection 框架。

    如果您想使用内置的 Xamarin 表单,请参阅此处 - http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/

    基本上你然后定义一个接口

    public interface INavigationService
    {
         void NavigateTo(String pageKey);
    }
    

    然后你创建一个新的类

    public class NavigationService: INavigationService
    {
    
        private NavigationPage _navPage;
    
        public void Initialize(NavigationPage navPage)
        {
             _navPage = navPage;
        }
    
        public void NavigateTo(String pageKey)
        {
            // Get Page from pageKey
            _navPage.PushAsync(page);
        }
    }
    

    如果你想看看它是如何在 MVVMLight 中完成的,你可以看这里:http://www.mvvmlight.net/doc/nav1.cshtml

    您可以根据需要使用 ServiceLocator 或其他方式来获取导航服务,无论是否使用本机代码。

    另一种方法是依赖注入另一个服务类型并从表单内部加载另一个类。然后您只需将操作传递给它,它就可以在您在 Forms 中时执行导航。

    我已将此tutorial 用于您的目的,希望对您有所帮助

    【讨论】:

    • 我的推送通知实现在 UWP 项目中。该解决方案适用于这个问题?
    • 此解决方案适用于任何平台。为此目的使用depency injection。此外,您可以查看此tutorial 以指导您。如果这对您有帮助,请将它们标记为答案。
    • 好的,所以我认为界面应该在 PCL 中,类应该在 UWP 项目中,对吧?这个页面键是什么,我应该如何在 UWP 项目的这个类中调用这个必要的函数?对不起,我的菜鸟问题。
    • 我将如何传递参数?
    • 嗯,对于这个porpuse,我认为你应该使用MessagingCenter 你需要传递任何参数,所以你应该实现这个功能。有关 MessagingCenter 的更多信息,请参阅tutorial
    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2018-05-04
    相关资源
    最近更新 更多