xamarin push-уведомление Навигация по страницам ios не работает при нажатии кнопки push-уведомления

#ios #xamarin.forms #push-notification

Вопрос:

У меня есть push-уведомление azure в формах Xamarin. когда получено push-уведомление, мне нужно открыть страницу в своем приложении. Он отлично работает в Android. В iOS он не работает, когда приложение открыто. Когда приложение находится в фоновом режиме, оно работает в iOS.

Это мой код делегата приложения

 public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo,
   Action<UIBackgroundFetchResult> completionHandler)
    {

        try
        {
            UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
            NSError error;
            NSData notification = NSJsonSerialization.Serialize(userInfo["action"], NSJsonWritingOptions.PrettyPrinted, out error);
            string notificationString = NSString.FromData(notification, NSStringEncoding.UTF8).ToString();

            var NotificationObj = JsonConvert.DeserializeObject<NotificationData>(notificationString);
            NotificationService.pushPageName = NotificationObj.Notification[0].PageName.ToString();
            NotificationService.pushAppName = NotificationObj.AppName.ToString();
            NotificationService.OpenPages = NotificationObj.Notification[0].OpenPage;
            NotificationService.Notification = notificationString;

            if (UIApplication.SharedApplication.ApplicationState.Equals(UIApplicationState.Active))
            {
                //App is in foreground. Act on it.
                var application1 = new App(NotificationService.pushPageName, NotificationService.pushAppName, NotificationService.Notification);
                LoadApplication(application1);
            }
            else
            {
              //  var application1 = new App(NotificationService.pushPageName, NotificationService.pushAppName, NotificationService.Notification);
            //    LoadApplication(application1);
            }
        }
        catch (Exception ex)
        {
            //LogInfo.ReportErrorInfo(ex.Message, ex.StackTrace, "AppDelegate-DidReceiveRemoteNotification");

        }
    }
 

после нажатия кнопки push-уведомления мне нужно снова открыть заставку.

Это код App.cs

      public App(string openPageName, string openAppName,string notification)
    {  
            ServiceContainer.Resolve<IPushNotificationActionService>()
            .ActionTriggered  = NotificationActionTriggered;
            InitMainPage(openPageName, openAppName, notification);
    } 

   private void InitMainPage(string pageName,string appName,string notification)
    {
        ServiceContainer.Resolve<IPushNotificationActionService>()
      .ActionTriggered  = NotificationActionTriggered;
        PushNotificationActionService.PushNotificationPageName = pageName ;
        PushNotificationActionService.PushNotificationAppName = appName;
        PushNotificationActionService.PushNotificationMessage = notification;
        MainPage = new NavigationPage(new Splash(pageName));
     }
 

Все методы вызова и push-уведомления также корректно загружаются в iOS. Но не переход к экрану Spalsh. У кого есть идея решить эту проблему, пожалуйста, помогите.

Комментарии:

1. docs.microsoft.com/en-us/xamarin/ios/platform/…

Ответ №1:

Если приложение запущено, нам не нужно перезагружать приложение LoadApplication , мы можем напрямую отправить сообщение на набор MainPage в App.cs .

iOS

 if (UIApplication.SharedApplication.ApplicationState.Equals(UIApplicationState.Active))
{
     MessagingCenter.Send<object>(this,"Hi");
}
 

Формы

 public App()
{
    InitializeComponent();

    MainPage = new MainPage();

    MessagingCenter.Subscribe<object>(this, "Hi", (obj) => {
       MainPage = new NavigationPage(new Splash(pageName));
    });
}