private async Task RunAsync()
        {
            // Do the background task activity. First, get the authentication context.
            Debug.WriteLine("Getting event details");

            if (!HotspotAuthenticationContext.TryGetAuthenticationContext(_details.EventToken, out _context))
            {
                // The event is not targetting this application. There is no further processing to do.
                Debug.WriteLine("Failed to get event context");
                return;
            }

            byte[] ssid = _context.WirelessNetworkId;
            Debug.WriteLine("SSID: " + System.Text.UTF8Encoding.UTF8.GetString(ssid, 0, ssid.Length));

            if (ConfigStore.UseNativeWISPr)
            {
                // Following code can be used if using native WISPr implementation. Please note that
                // following HotspotAuthenticationContext properties only work on windows and not on windows phone.
                // On Windows Phone they return un-useful strings
                // Developers are expected to implement their own WISPr implementation on Phone

                Debug.WriteLine("AuthenticationUrl: " + _context.AuthenticationUrl.OriginalString);
                Debug.WriteLine("RedirectMessageUrl: " + _context.RedirectMessageUrl.OriginalString);
                Debug.WriteLine("RedirectMessageXml: " + _context.RedirectMessageXml.GetXml());

                // In this sample, the AuthenticationUrl is always checked in the background task handler
                // to avoid launching the foreground app in case the authentication host is not trusted.
                if (ConfigStore.AuthenticationHost != _context.AuthenticationUrl.Host)
                {
                    // Hotspot is not using the trusted authentication server.
                    // Abort authentication and disconnect.
                    Debug.WriteLine("Authentication server is untrusted");
                    _context.AbortAuthentication(ConfigStore.MarkAsManualConnect);
                    return;
                }
            }

            // Run the appropriate scenario selected by the foreground app.
            if (ConfigStore.AuthenticateThroughBackgroundTask)
            {
                await AuthenticateInBackgroundAsync();
            }
            else
            {
                ContinueAuthenticationInForeground();
            }
            return;
        }
 /// <summary>
 /// This is the click handler for the 'Abort' button.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void AbortButton_Click(object sender, RoutedEventArgs args)
 {
     try
     {
         authenticationContext.AbortAuthentication(ConfigStore.MarkAsManualConnect);
         rootPage.NotifyUser("Authentication aborted", NotifyType.StatusMessage);
     }
     catch (Exception ex)
     {
         rootPage.NotifyUser(ex.ToString(), NotifyType.ErrorMessage);
     }
     ClearAuthenticationToken();
 }
 /// <summary>
 /// This is the click handler for the 'Abort' button.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void AbortButton_Click(object sender, RoutedEventArgs args)
 {
     authenticationContext.AbortAuthentication(ConfigStore.MarkAsManualConnect);
     rootPage.NotifyUser("Authentication aborted", NotifyType.StatusMessage);
     ClearAuthenticationToken();
 }