2017-01-18 2 views
0

Я использую центр уведомлений для приложения UWP после этого учебника: Getting started with Notification Hubs for Windows Universal Platform Apps.Узлы уведомлений Azure UWP, уведомления о тостах UWP не запускают приложение

Если я проверить отправить с 8 уведомления Windows, как:

<?xml version="1.0" encoding="utf-8"?> 
<toast> 
<visual><binding template="ToastText01"> 
<text id="1">Test message</text> 
</binding> 
</visual> 
</toast> 

Он работает и если я нажимаю на уведомление, это открыть приложение с помощью метода OnLaunched(). Но если я отправить конкретное уведомление UWP как:

<toast launch="app-defined-string"> 
<visual> 
<binding template="ToastGeneric"> 
    <text>Microsoft Company Store</text> 
    <text>New Halo game is back in stock!</text> 
</binding> 
</visual> 
<actions> 
<action activationType="foreground" content="See more details" arguments="details"/> 
<action activationType="background" content="Remind me later" arguments="later"/> 
</actions> 
</toast> 

тоста работает, но если я нажимаю на него, это открыть приложение и OnLaunched() никогда не называли так что приложение застрял на spashscreen.

Заранее спасибо за вашу помощь,

С уважением

ответ

0

Для тех, кто есть та же проблема, с Dave Smits ответить: juste добавить OnZctivated метод в файл App.xaml.cs и разместить тот же контент, что и метод OnLaunched:

protected override async void OnLaunched(LaunchActivatedEventArgs e) 
    { 
     await OnLaunchedOrActivated(e); 
    } 

protected override async void OnActivated(IActivatedEventArgs e) 
    { 
     await OnLaunchedOrActivated(e); 
    } 

private async Task OnLaunchedOrActivated(IActivatedEventArgs e) 
    { 
     // Initialize things like registering background task before the app is loaded 

     Frame rootFrame = Window.Current.Content as Frame; 

     // Do not repeat app initialization when the Window already has content, 
     // just ensure that the window is active 
     if (rootFrame == null) 
     { 
      // Create a Frame to act as the navigation context and navigate to the first page 
      rootFrame = new Frame(); 

      rootFrame.NavigationFailed += OnNavigationFailed; 

      if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 
      { 
       // TODO: Load state from previously suspended application 
      } 

      // Place the frame in the current Window 
      Window.Current.Content = rootFrame; 
     } 

     // Handle toast activation 
     if (e is ToastNotificationActivatedEventArgs) 
     { 
      var toastActivationArgs = e as ToastNotificationActivatedEventArgs; 

      // If empty args, no specific action (just launch the app) 
      if (toastActivationArgs.Argument.Length == 0) 
      { 
       if (rootFrame.Content == null) 
        rootFrame.Navigate(typeof(MainPage)); 
      } 
      // Otherwise an action is provided 
      else 
      { 
       // Parse the query string 


       // See what action is being requested 

       // If we're loading the app for the first time, place the main page on the back stack 
       // so that user can go back after they've been navigated to the specific page 
       if (rootFrame.BackStack.Count == 0) 
        rootFrame.BackStack.Add(new PageStackEntry(typeof(MainPage), null, null)); 
      } 
     } 

     // Handle launch activation 
     else if (e is LaunchActivatedEventArgs) 
     { 
      var launchActivationArgs = e as LaunchActivatedEventArgs; 

      // If launched with arguments (not a normal primary tile/applist launch) 
      if (launchActivationArgs.Arguments.Length > 0) 
      { 
       // TODO: Handle arguments for cases like launching from secondary Tile, so we navigate to the correct page 
       throw new NotImplementedException(); 
      } 

      // Otherwise if launched normally 
      else 
      { 
       // If we're currently not on a page, navigate to the main page 
       if (rootFrame.Content == null) 
        rootFrame.Navigate(typeof(MainPage)); 
      } 
     } 

     else 
     { 
      // TODO: Handle other types of activation 
      throw new NotImplementedException(); 
     } 


     // Ensure the current window is active 
     Window.Current.Activate(); 
    }