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

Xamarin.Auth: Using Facebook oauth, how to redirect to my app?

我刚开始使用 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,而是想再次将他重定向回我的应用程序。非常感谢任何帮助!

最好的, 萨沙

只需在 OnAuthenticationCompleted 方法中调用 DismissViewController (true, null)。或者使用异步等价物:

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

    }
}

您可以 "redirect back" 再次访问您的应用,只需调用您自己的方法来显示您想要向用户显示的应用页面。

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 来显示页面,这可能与您的应用程序不同,但概念是相同的。