Xamarin.Auth:使用 Facebook oauth,如何重定向到我的应用程序?

Posted

技术标签:

【中文标题】Xamarin.Auth:使用 Facebook oauth,如何重定向到我的应用程序?【英文标题】:Xamarin.Auth: Using Facebook oauth, how to redirect to my app? 【发布时间】:2016-04-30 13:11:29 【问题描述】:

我刚开始使用 Xamarin.Auth,我想通过 oauth 启用 Facebook 登录。

这是我的配置:

public static string ClientId = "client id";
public static string ClientSecret = "client secret";
public static string Scope = "email";
public static string AuthorizeUrl = "https://m.facebook.com/dialog/oauth";
public static string RedirectUrl = "https://www.facebook.com/connect/login_success.html";
public static string AccessTokenUrl = "https://m.facebook.com/dialog/oauth/token";

启动验证的代码:

public class AuthenticationPageRenderer : PageRenderer

    public override void ViewDidAppear(bool animated)
    
        base.ViewDidAppear (animated);

        var auth = new OAuth2Authenticator (
            Constants.ClientId,
            Constants.ClientSecret,
            Constants.Scope,
            new Uri (Constants.AuthorizeUrl),
            new Uri (Constants.RedirectUrl),
            new Uri (Constants.AccessTokenUrl)
        );

        auth.Completed += OnAuthenticationCompleted;
        PresentViewController (auth.GetUI (), true, null);
    

    async void OnAuthenticationCompleted (object sender, AuthenticatorCompletedEventArgs e)
    
        Debug.WriteLine ("AUTH Completed!");
        if (e.IsAuthenticated) 

        
    

似乎工作正常,但我不想将用户重定向到https://www.facebook.com/connect/login_success.html,而是想再次将他重定向回我的应用程序。非常感谢任何帮助!

最好, 萨沙

【问题讨论】:

你为什么提供facebook.com/connect/login_success.html 作为redirectionURL。 redirectionURL 应该是您的应用程序网址。 【参考方案1】:

您可以再次“重定向回”到您的应用,只需调用您自己的方法来显示您希望向用户显示的应用页面。

async void OnAuthenticationCompleted (object sender, AuthenticatorCompletedEventArgs e)

    Debug.WriteLine ("AUTH Completed!");
    if (e.IsAuthenticated) 
        //invoke the method that display the app's page
        //that you want to present to user
        App.SuccessfulLoginAction.Invoke();
    

在您的 App.cs 中

public static Action SuccessfulLoginAction
    
        get
            
            return new Action(() =>
            
                //show your app page
                var masterDetailPage = Application.Current.MainPage as MasterDetailPage;
                masterDetailPage.Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(MainPage)));
                masterDetailPage.IsPresented = false;                    
            );
        
    

假设 MainPage 是您成功登录后要显示的页面。我在我的示例中使用 Xamarin.Forms 和 MasterDetailPage 来显示可能与您的应用不同但概念相同的页面。

【讨论】:

【参考方案2】:

只需在您的 OnAuthenticationCompleted 方法中调用 DismissViewController (true, null)。或者使用异步等效项:

async void OnAuthenticationCompleted(object sender, AuthenticatorCompletedEventArgs e)

    Debug.WriteLine("AUTH Completed!");
    await DismissViewControllerAsync(true);
    if (e.IsAuthenticated)
    

    

【讨论】:

以上是关于Xamarin.Auth:使用 Facebook oauth,如何重定向到我的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Auth:使用身份提供者对用户进行身份验证 [xamarin forms - Android]

Xamarin.Auth 或 IdentityModel + IdentityServer4

如何从Xamarin Auth-Google获得访问令牌

Xamarin.Auth OAuth Google API,用于Android的用户身份验证

尝试在使用OAuth演示者时显示UINavigationController

Java.Lang.ClassNotFoundException WebAuthenticatorActivity