Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.forms 从平台特定(UWP)页面渲染器导航并返回PCL页面 我有一个PCL主页,然后导航到特定平台 登录按钮上的登录页面单击事件 登录页是从中继承的 特定于平台的页面渲染器,因为它需要特定于平台的页面渲染器 对社交提供商(Facebook、Google、Twitter、, 微软等) 我正在使用Xamarin.Auth进行身份验证 在LoginPage的OnElementChanged事件中,它实例化 OAuth2Authenticator对象 成功实例化后(基于 在提供程序和应用程序详细信息上),它需要调用特定应用程序的UI 提供者 为此,我调用auth所在的auth.GetUI Xamarin.Auth.OAuth2Authenticator对象_Xamarin.forms_Xamarin.auth_Xamarin.uwp - Fatal编程技术网

Xamarin.forms 从平台特定(UWP)页面渲染器导航并返回PCL页面 我有一个PCL主页,然后导航到特定平台 登录按钮上的登录页面单击事件 登录页是从中继承的 特定于平台的页面渲染器,因为它需要特定于平台的页面渲染器 对社交提供商(Facebook、Google、Twitter、, 微软等) 我正在使用Xamarin.Auth进行身份验证 在LoginPage的OnElementChanged事件中,它实例化 OAuth2Authenticator对象 成功实例化后(基于 在提供程序和应用程序详细信息上),它需要调用特定应用程序的UI 提供者 为此,我调用auth所在的auth.GetUI Xamarin.Auth.OAuth2Authenticator对象

Xamarin.forms 从平台特定(UWP)页面渲染器导航并返回PCL页面 我有一个PCL主页,然后导航到特定平台 登录按钮上的登录页面单击事件 登录页是从中继承的 特定于平台的页面渲染器,因为它需要特定于平台的页面渲染器 对社交提供商(Facebook、Google、Twitter、, 微软等) 我正在使用Xamarin.Auth进行身份验证 在LoginPage的OnElementChanged事件中,它实例化 OAuth2Authenticator对象 成功实例化后(基于 在提供程序和应用程序详细信息上),它需要调用特定应用程序的UI 提供者 为此,我调用auth所在的auth.GetUI Xamarin.Auth.OAuth2Authenticator对象,xamarin.forms,xamarin.auth,xamarin.uwp,Xamarin.forms,Xamarin.auth,Xamarin.uwp,我有两个问题: 在UWP中,如何导航到提供者登录UI?更具体地说,在iOS和Android中,以下代码片段在UWP中的等效性是什么?在iOS中,使用以下代码: PresentViewController(auth.GetUI(),true,null) 其中auth是Xamarin.auth.OAuth2Authenticator对象。 在安卓系统中,使用了以下内容: activity.StartActivity(auth.GetUI(activity)) 我正在寻找UWP中的等效代码。请记住,这

我有两个问题:

  • 在UWP中,如何导航到提供者登录UI?更具体地说,在iOS和Android中,以下代码片段在UWP中的等效性是什么?在iOS中,使用以下代码:
    PresentViewController(auth.GetUI(),true,null)
    其中auth是Xamarin.auth.OAuth2Authenticator对象。
    在安卓系统中,使用了以下内容:
    
    activity.StartActivity(auth.GetUI(activity))
  • 我正在寻找UWP中的等效代码。请记住,这些调用是从特定于平台的PageRenderer派生的LoginPage进行的

  • 成功身份验证后,如何导航回主页(位于PCL中)
  • 该代码基于以下来源的示例:

    以下是我的登录页面代码:

    using System;
    using Valufy;
    using Xamarin.Forms.Platform.UWP;
    using System.ComponentModel;
    using Valufy.UWP;
    using Valufy.AuthConfiguration;
    using Xamarin.Forms;
    [assembly: ExportRenderer(typeof(ProviderLoginPage), typeof(LoginRenderer))]
    
    namespace Valufy.UWP
    {
    class LoginRenderer: PageRenderer
    {
    protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.Page> e)
    {
        base.OnElementChanged(e);
    
        //Get and Assign ProviderName from ProviderLoginPage
        ProviderLoginPage loginPage = (ProviderLoginPage)Element;
        string providername = loginPage.ProviderName;
    
            //Create OauthProviderSetting class with Oauth Implementation .Refer Step 6
            OAuthProviderSetting oauth = new OAuthProviderSetting();
    
                Xamarin.Auth.OAuth2Authenticator auth = oauth.LoginWithProvider(providername);  
    
                // After facebook,google and all identity provider login completed 
                auth.Completed += Auth_Completed;
    
                Type page_type = auth.GetUI();
    //////THIS IS WHERE I AM STUCK...HOW DO I GO TO THE PROVIDER AUTH UI ////////////
    
    //this.Frame.Navigate(page_type, auth);
    //parentPage.Navigation.PushModalAsync(auth.GetUI());
    
                }
    
        }
    
        private void Auth_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
        {
            if (e.IsAuthenticated)
            {
                OAuthConfig.User = new UserDetails();
                // Get and Save User Details 
                OAuthConfig.User.Token = e.Account.Properties["oauth_token"];
                OAuthConfig.User.TokenSecret = e.Account.Properties["oauth_token_secret"];
                OAuthConfig.User.TwitterId = e.Account.Properties["user_id"];
            OAuthConfig.User.ScreenName = e.Account.Properties["screen_name"];
    
    /////NOW, HOW GO I GO BACK TO THE CALLING PAGE IN PCL ///////////////////
    
        }
        else
        {
            // The user cancelled
    /////NOW, HOW GO I GO BACK TO THE CALLING PAGE IN PCL ///////////////////
    }
    }
    }
    }                
    
    使用系统;
    使用Valufy;
    使用Xamarin.Forms.Platform.UWP;
    使用系统组件模型;
    使用Valufy.UWP;
    使用Valufy.AuthConfiguration;
    使用Xamarin.Forms;
    [程序集:ExportRenderer(typeof(ProviderLoginPage)、typeof(LoginRenderer))]
    命名空间Valufy.UWP
    {
    类LoginRenderer:PageRenderer
    {
    受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
    {
    基础。一个要素发生变化(e);
    //从ProviderLoginPage获取并分配ProviderName
    ProviderLoginPage loginPage=(ProviderLoginPage)元素;
    字符串providername=loginPage.providername;
    //使用Oauth实现创建OauthProviderSetting类。请参阅步骤6
    OAuthProviderSetting oauth=新的OAuthProviderSetting();
    Xamarin.Auth.OAuth2Authenticator Auth=oauth.LoginWithProvider(providername);
    //facebook、google和所有身份提供商登录完成后
    验证已完成+=验证已完成;
    键入page_Type=auth.GetUI();
    //////这就是我被卡住的地方…我如何进入提供者身份验证UI////////////
    //此.Frame.Navigate(页面类型,auth);
    //parentPage.Navigation.PushModalAsync(auth.GetUI());
    }
    }
    私有无效身份验证已完成(对象发送方,Xamarin.Auth.AuthenticatorCompletedEventArgs e)
    {
    如果(如未经认证)
    {
    OAuthConfig.User=newuserdetails();
    //获取并保存用户详细信息
    OAuthConfig.User.Token=e.Account.Properties[“oauth_Token”];
    OAuthConfig.User.TokenSecret=e.Account.Properties[“oauth_-token_-secret”];
    OAuthConfig.User.TwitterId=e.Account.Properties[“User_id”];
    OAuthConfig.User.ScreenName=e.Account.Properties[“screen_name”];
    /////现在,我如何回到PCL中的呼叫页面///////////////////
    }
    其他的
    {
    //用户取消了
    /////现在,我如何回到PCL中的呼叫页面///////////////////
    }
    }
    }
    }                
    
    1-在UWP中,如何导航到提供商登录UI

    您需要创建一个UWP页面对象,用于在渲染器中显示的同一对象就是用于导航的对象

    Type page_type = auth.GetUI();
    
    page = new MyUWPLoginPage();
    
    page.Frame.Navigate(page_type, auth);
    
    2-在成功进行身份验证后,我如何导航回我的主页(在PCL中)

    有很多方法可以做到这一点,最简单的方法是在
    ProviderLoginPage
    类中创建一个公共方法,并从渲染器类调用此方法并传入参数

    public class ProviderLoginPage: ContentPage
    {
        ......
    
        public void AuthenticationCompleted(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
        {
            // Do your logic
        }
    
    }
    
    在渲染器中使用元素:

    private void Auth_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
    {
        var xamElement = Element as ProviderLogin;
    
        xamElement?.AuthenticationCompleted(sender, e);
    }
    
    将所有逻辑移到PCL类,这样就不必在每个渲染器上重复它


    这应该会有所帮助。

    以下是导航到UWP提供商登录的代码: WindowsPage WindowsPage=新建WindowsPage()

    要在成功验证后导航回我的页面,请执行以下代码:

    private async void Auth_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
        {
            if (e.IsAuthenticated)
            {
    
                var request = new OAuth2Request("GET", new Uri("https://login.microsoftonline.com/common/oauth2/V2.0/token?oauth2_access_token=" + e.Account.Properties["access_token"]), null, e.Account);
                try
                {
                    string response = await MSGetUserInfo(e.Account);
    
    
                }
                catch (System.OperationCanceledException)
                {
                                    }
                catch (Exception ex)
                {
                                    }
                this.Element.Navigation.PushModalAsync(new MainPage());
    
    
            }
            else
            {
                // The user cancelled
            }
        }
    

    感谢您的回复@apineda。我的ProviderLoginPage是一个Xamarin.Forms.Page对象,它不公开Frame属性。此外,由于我已经在ProviderLoginPage中,我是否会使用“this”而不是创建一个新对象。在任何情况下,我都会遇到同样的问题,即Frame属性没有公开。您误解了。对于导航,您需要创建一个UWP页面,而不是Xamarin页面。您将在
    LoginRenderer
    类中创建此对象。我在UWP项目中创建了一个新的UWP页面。我按照你的建议实例化了它。这里是:Type page_Type=auth.GetUI();UWPLoginPage=新的UWPLoginPage();页面.框架.导航(页面类型,身份验证);我得到的页面类型是+page_type{Name=“WebAuthenticatorPage”FullName=“Xamarin.Auth.WebAuthenticatorPage”}System.type{System.RuntimeType}Auth对象如下:{Xamarin.Auth.OAuth2Authenticator}但我得到如下异常:“对象引用未设置为对象的实例。”这个问题得到了很好的讨论,解决方案发布并发布。感谢您的回复@apineda。虽然你的答案不完整,但它确实帮助我朝着正确的方向思考。
    private async void Auth_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
        {
            if (e.IsAuthenticated)
            {
    
                var request = new OAuth2Request("GET", new Uri("https://login.microsoftonline.com/common/oauth2/V2.0/token?oauth2_access_token=" + e.Account.Properties["access_token"]), null, e.Account);
                try
                {
                    string response = await MSGetUserInfo(e.Account);
    
    
                }
                catch (System.OperationCanceledException)
                {
                                    }
                catch (Exception ex)
                {
                                    }
                this.Element.Navigation.PushModalAsync(new MainPage());
    
    
            }
            else
            {
                // The user cancelled
            }
        }