Xamarin Forms UWP Push Notification Click

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

//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 переменную в качестве аргумента. Как я могу это сделать ? Любая помощь будет оценена.


person Tartar    schedule 20.09.2017    source источник


Ответы (1)


Используйте ServiceLocator или любой другой внедрение зависимостей framework вы должны вызвать службу навигации.

Если вы хотите использовать встроенные формы Xamarin Forms, см. Здесь - 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 или другой, чтобы получить службу навигации по мере необходимости, независимо от того, в собственном коде или нет.

OR

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

Я использовал этот руководство для вашей цели, я надеюсь помочь вам

person Wilson Vargas    schedule 20.09.2017
comment
Моя реализация push-уведомлений находится в проекте UWP. Это решение подходит для этой проблемы? - person Tartar; 21.09.2017
comment
Это решение отлично работает на любой платформе. Для этой цели используйте внедрение зависимостей. Кроме того, вы можете увидеть это руководство для вас. Если это вам помогло, отметьте их как ответ. - person Wilson Vargas; 21.09.2017
comment
Хорошо, я думаю, что интерфейс должен быть на PCL, а класс должен быть в проекте UWP, верно? А что это за ключ страницы и как мне вызвать эти необходимые функции из этого класса в проекте UWP? Извините за мои вопросы о новичках. - person Tartar; 21.09.2017
comment
И как мне передать параметры? - person Tartar; 21.09.2017
comment
Уммм, для этого случая, я думаю, вам следует использовать MessagingCenter Вам нужно передать какие-либо параметры, поэтому вы должны реализовать эту функцию. Дополнительную информацию о MessagingCenter см. В этом руководстве - person Wilson Vargas; 21.09.2017