Xamarin.Auth PageRenderer 在用户通过身份验证后重定向到 PCL 中的页面
Xamarin.Auth PageRenderer redirect to Page in PCL after user authenticated
大家好,打开 PageRenderer (Xamarin.Auth) 身份验证,在本地和后端持久化数据我想关闭当前 Activity 并使用来自 Fb、Twitter 的信息打开注册表单或页面或 Gmail。获取此信息很容易,因为它是使用 SQLite 在本地保存的,但我的问题是关闭当前页面并打开新页面 (Activity),因为我的注册页面位于 PCL(视图)中,我使用的是 MVVMLight。
在 Android 上,我使用 MessagingCenter
弹出我用来显示 Xamarin Auth 登录 WebView 的登录页面模式。所以它看起来像这样(请注意,我将 LoginPage
显示为模态):
内容页:
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");
}
}
我的登录页面呈现器中的:
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"
事件,而是从 auth.Completed
.
中调用 DismissViewController(true, null);
大家好,打开 PageRenderer (Xamarin.Auth) 身份验证,在本地和后端持久化数据我想关闭当前 Activity 并使用来自 Fb、Twitter 的信息打开注册表单或页面或 Gmail。获取此信息很容易,因为它是使用 SQLite 在本地保存的,但我的问题是关闭当前页面并打开新页面 (Activity),因为我的注册页面位于 PCL(视图)中,我使用的是 MVVMLight。
在 Android 上,我使用 MessagingCenter
弹出我用来显示 Xamarin Auth 登录 WebView 的登录页面模式。所以它看起来像这样(请注意,我将 LoginPage
显示为模态):
内容页:
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");
}
}
我的登录页面呈现器中的:
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"
事件,而是从 auth.Completed
.
DismissViewController(true, null);