Как я могу перемещаться по странице в формах Prism, когда я получил одно push-уведомление сигнала? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть приложение, которое разрешает push-уведомления, и я использую один сигнал с xamarin sdk.

Мое приложение использует prism.forms 7.2 и xamarin.forms 4.3.x

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

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

не перейдет на нужную страницу.

Вот мой код app.cs

  protected override async void OnInitialized()
        {
            InitializeComponent();

            XF.Material.Forms.Material.Init(this);

            if (Helpers.AppConstants.DebugMode)
            {
                // Handle Xamarin Form Logging events such as Binding Errors
                Log.Listeners.Add(new Services.TraceLogListener());
            }

            InitAkavache();

            InitGoogleAnalytics();

            OneSignal.Current.StartInit(Helpers.AppConstants.OneSignalKey)
               .Settings(new Dictionary<string, bool>()
               {
                    {IOSSettings.kOSSettingsKeyAutoPrompt, false },
                    {IOSSettings.kOSSettingsKeyInAppLaunchURL, true },
               })
               .InFocusDisplaying(OSInFocusDisplayOption.Notification)
               .UnsubscribeWhenNotificationsAreDisabled(true)
               .HandleNotificationReceived((result) => HandleNotificationReceived(result))
               .HandleNotificationOpened((result) => HandleNotificationOpened(result))
               .EndInit();

            if (!IsNotification)
            {
                await NavigationService.NavigateAsync(Screens.SplashScreenPage);
            }
            else
            {
                IsNotification = false;
            }
        }
   private void HandleNotificationOpened(OSNotificationOpenedResult result)
        {
            IsNotification = true;
            OSNotificationPayload payload = result.notification.payload;
            Dictionary<string, object> additionalData = payload.additionalData;

            if (additionalData.ContainsKey("type") && additionalData.ContainsKey("product"))
            {
                var productId = Convert.ToString(additionalData["product"]);
                var id = Convert.ToInt64(productId);

                NavigationService.NavigateAsync($"myapp:///{Screens.NavigationPage}/{Screens.MainTabbedPage}?{Prism.Navigation.KnownNavigationParameters.SelectedTab}={Screens.MainPage}", ("productId", id)).GetAwaiter().GetResult();
                return;
            }
            else if (additionalData.ContainsKey("type") && additionalData.ContainsKey("category"))
            {
                var categoryId = Convert.ToString(additionalData["category"]);
                var id = Convert.ToInt32(categoryId);
                NavigationService.NavigateAsync($"myapp:///{Screens.NavigationPage}/{Screens.MainTabbedPage}?{Prism.Navigation.KnownNavigationParameters.SelectedTab}={Screens.MainPage}", ("categoryId", id)).GetAwaiter().GetResult();
                return;
            }
            else if (additionalData.ContainsKey("type") && Convert.ToString(additionalData["type"]) == "open")
            {
                NavigationService.NavigateAsync($"myapp:///{Screens.NavigationPage}/{Screens.MainTabbedPage}?{KnownNavigationParameters.SelectedTab}={Screens.MainPage}").GetAwaiter().GetResult();

                return;
            }
            else if (additionalData.ContainsKey("type") && additionalData.ContainsKey("coupon"))
            {
                IsNotification = false;

                var coupon = Convert.ToString(additionalData["coupon"]);

                if (!string.IsNullOrWhiteSpace(coupon))
                {
                    Xamarin.Essentials.Clipboard.SetTextAsync(coupon).GetAwaiter().GetResult();
                }

                return;
            }
        }

        private void HandleNotificationReceived(OSNotification notification)
        {
            OSNotificationPayload payload = notification.payload;
            string message = payload.body;
            Dictionary<string, object> additionalData = payload.additionalData;

            if (additionalData != null && additionalData.ContainsKey("type"))
            {
                var item = new Data.Entity.Notification
                {
                    Title = notification.payload.title,
                    SubTitle = notification.payload.subtitle,
                    Body = notification.payload.body,
                    AdditionalData = additionalData.Select(s => new Data.Entity.AdditionalData
                    {
                        Type = s.Key,
                        Value = Convert.ToString(s.Value)
                    }).ToList()
                };

                if (additionalData.ContainsKey("product"))
                {
                    item.Type = Enums.NotificationType.Product;
                }
                else if (additionalData.ContainsKey("category"))
                {
                    item.Type = Enums.NotificationType.Category;
                }
                else if (Convert.ToString(additionalData["type"]) == "open")
                {
                    item.Type = Enums.NotificationType.Open;
                }
                else if (additionalData.ContainsKey("coupon"))
                {
                    item.Type = Enums.NotificationType.Coupon;
                }
                else
                {
                    item.Type = Enums.NotificationType.Unknown;
                }

                using (var notificationService = new NotificationLiteDbService())
                {
                    notificationService.CreateItem(item);
                }


            }
        }

РЕДАКТ. 1:

Если приложение работает на переднем плане илифон, я могу получать уведомления и перемещаться. Но если приложение закрывается, я могу получить уведомление, но не могу ориентироваться.

...