2017-04-06 6 views
0

Kann jemand mir mit diesem Problem helfen?OAuth2 und UWP Xamarin.Forms

Ich weiß nicht, wie man OAuth2 mit UWP verwendet.

Zum Beispiel auf Andriod Code der Authentifizierung wie folgt aussieht:

[assembly: ExportRenderer(typeof(LoginPage), typeof(LoginPageRenderer))] 

namespace TestTask.Droid 
{ 
    class LoginPageRenderer : PageRenderer 
    { 
     private static bool _isShown; 
     protected override void OnElementChanged(ElementChangedEventArgs<Page> e) 
     { 
      base.OnElementChanged(e); 

      if (_isShown) return; 
      _isShown = true; 

      var activity = this.Context as Activity; 

      var auth = new OAuth2Authenticator(
       clientId: "someId", 
       scope: "", 
       authorizeUrl: new Uri("https://oauth.vk.com/authorize"), 
       redirectUrl: new Uri("https://oauth.vk.com/blank.html")); 

      auth.Completed += (sender, eventArgs) => { 
       if (eventArgs.IsAuthenticated) 
       { 
        AuthInfo.Token = eventArgs.Account.Properties["access_token"].ToString(); 
        AuthInfo.UserID = eventArgs.Account.Properties["user_id"].ToString(); 
       } 
       else 
       { 
        // The user cancelled 
       } 
      }; 

      activity?.StartActivity((Intent)auth.GetUI(activity)); 
     } 
    } 
} 

so, auf die Lösung Android ist in diesem Verfahren

protected override void OnElementChanged(ElementChangedEventArgs<Page> e) 

und in dieser Zeile fo Code

activity?.StartActivity((Intent)auth.GetUI(activity)); 

Meine Frage ist: Wie kann ich das gleiche in UWP, oder wie kann ich es in UWP arbeiten lassen?

Antwort

0

Vielen Dank! Ich habe eine Lösung für meinen Zweck für die UWP-Plattform gefunden.

[assembly: ExportRenderer(typeof(LoginPage), typeof(LoginPageRenderer))] 

namespace TestTask.UWP 
{ 
    public class LoginPageRenderer : PageRenderer 
    { 
     private Windows.UI.Xaml.Controls.Frame _frame; 
     private bool _isShown; 

     protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Page> e) 
     { 
      base.OnElementChanged(e); 

      if (_isShown) return; 
      _isShown = true; 

      if (Control == null) 
      { 
       WindowsPage windowsPage = new WindowsPage(); 

       var auth = new OAuth2Authenticator(
        clientId: "someID", 
        scope: "", 
        authorizeUrl: new Uri("https://oauth.vk.com/authorize"), 
        redirectUrl: new Uri("https://oauth.vk.com/blank.html")); 

       _frame = windowsPage.Frame; 
       if (_frame == null) 
       { 
        _frame = new Frame(); 
        //_frame.Language = global::Windows.Globalization.ApplicationLanguages.Languages[0]; 

        windowsPage.Content = _frame; 
        SetNativeControl(windowsPage); 
       } 

       auth.Completed += (sender, eventArgs) => { 

        if (eventArgs.IsAuthenticated) 
        { 
         AuthInfo.Token = eventArgs.Account.Properties["access_token"].ToString(); 
         AuthInfo.UserID = eventArgs.Account.Properties["user_id"].ToString(); 
        } 
        else 
        { 
         // The user cancelled 
        } 
       }; 

       Type pageType = auth.GetUI(); 
       _frame.Navigate(pageType, auth); 
       Window.Current.Activate(); 
      } 
     } 
    } 
} 

Bitte markieren Sie es gelöst!

0

Meine Frage ist: Wie kann ich dasselbe in UWP tun, oder wie ich es in UWP arbeiten lassen kann?

Ich bin nicht sicher, ob die Xamarin.Auth unterstützt UWP oder nicht, aber für UWP, können wir Web authentication broker für OAuth verwenden, können Sie die offizielle WebAuthenticationBroker sample überprüfen, es ist nicht Xamarin, aber man kann es in nativer UWP Projekt und verwenden Sie Code Custom Renderer, um dasselbe in Xamarin zu tun.

0

Xamarin.Auth unterstützt UWP für Standard/Traditional ziemlich lang. Xamarin.Forms Unterstützung wurde kürzlich hinzugefügt und wird nicht gründlich getestet (1.5.0-alpha)

Verwandte Themen