用户通过身份验证后,Xamarin.Auth PageRenderer重定向到PCL中的Page

时间:2016-11-07 12:34:50

标签: xamarin.android xamarin.forms xamarin-studio

嘿大家打开PageRenderer(Xamarin.Auth)身份验证,在本地和后端保存数据我想关闭当前的Activity并使用来自Fb,Twitter或Gmail的信息打开注册表单或页面。很容易得到这个信息,因为它是使用SQLite本地保存但我的问题是关闭当前页面并打开新页面(活动),因为我的注册页面在PCL(视图)我使用MVVMLight。enter image description here

1 个答案:

答案 0 :(得分:0)

在Android上,我使用MessagingCenter弹出我用来显示Xamarin Auth登录WebView的Login Page模式。所以它看起来像这样(注意我将LoginPage显示为模态):

ContentPage:

public class LoginPage : ContentPage {

    public LoginPage() { }

    protected override async void OnAppearing() {
        base.OnAppearing();

        MessagingCenter.Unsubscribe<string>(this, "LoginPageDone");
        MessagingCenter.Subscribe<string>(this, "LoginPageDone", async errorMessage => await Navigation.PopModalAsync());
    }

    protected override void OnDisappearing() {
        base.OnDisappearing();
        MessagingCenter.Unsubscribe<string>(this, "LoginPageDone");
    }
}

在我的LoginPage呈现器中:

public class LoginPageRenderer : Xamarin.Forms.Platform.Android.PageRenderer {

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

        if(e.OldElement != null || Element == null) { return; }

        LoginPage page = (LoginPage)Element;

        Xamarin.Auth.OAuth2Authenticator auth = new Xamarin.Auth.OAuth2Authenticator();

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

            //Do some eventArgs.IsAuthenticated stuff

            Xamarin.Forms.MessagingCenter.Send("something", "LoginPageDone"); //Call the event to pop the page
        }
    }
}

为了完整起见,在iOS上,我没有调用"LoginPageDone"事件,而是从DismissViewController(true, null);内拨打auth.Completed