2017-04-06 3 views
0

아무도이 문제를 해결할 수 있습니까?OAuth2 및 UWP Xamarin.Forms

UAP에서 OAuth2를 사용하는 방법을 모르겠다. 예를 들어

는 인증에서 Andriod 코드에 다음과 같다 :

[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)); 
     } 
    } 
} 

너무 용액 안드로이드에있어서

protected override void OnElementChanged(ElementChangedEventArgs<Page> e) 

및 코드 FO이 행에

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

내 질문은 : 어떻게 UWP에서 동일한 작업을 수행 할 수 있습니까? 또는 어떻게 UWP에서 작동하게 할 수 있습니까?

답변

0

감사합니다! 나는 UWP 플랫폼을위한 나의 목적을위한 해결책을 발견했다.

[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(); 
      } 
     } 
    } 
} 

해결하시기 바랍니다.

0

내 질문은 : 어떻게 UWP에서 동일한 작업을 수행 할 수 있습니까? 또는 어떻게 UWP에서 작동하게 할 수 있습니까?

은 내가 Xamarin.Auth이 UWP 여부를 지원하는지 여부를 잘 모르겠지만, UWP, 우리는, 당신은이 자 마린 아니에요, 공식 WebAuthenticationBroker sample을 확인할 수 있습니다 OAuth를위한 Web authentication broker을 사용할 수 있지만 기본 UWP 프로젝트 사용을 코딩 할 수 있습니다 Xamarin에서 동일한 작업을 수행 할 사용자 지정 렌더러.

0

Xamarin.Auth는 Standard/Traditional 용 UWP를 상당히 오래 지원합니다. Xamarin.Forms 지원이 최근 추가되었으며 완전히 테스트되지 않았습니다 (1.5.0-alpha)

관련 문제