【问题标题】:Does the Facebook .NET client SDK support universal apps / apps generated via AppStudio?Facebook .NET 客户端 SDK 是否支持通过 AppStudio 生成的通用应用程序/应用程序?
【发布时间】:2014-10-10 20:28:54
【问题描述】:

我通过 Microsoft 的 AppStudio 创建了一个通用应用程序。 我尝试按照“美味教程”(http://facebooksdk.net/docs/phone/tutorial/) 将 Facebook 身份验证添加到应用程序。

当我在手机上运行应用程序时,我永远无法进入 facebook 登录页面,因为以下行:await App.FacebookSessionClient.LoginAsync("user_about_me,read_stream");

总是导致以下异常:

System.NotImplementedException: Not implemented
at Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions options, Uri requestUri, Uri callbackUri) at Facebook.Client.FacebookSessionClient.d__24.MoveNext()

异常的来源是 FacebookSessionClient.csfacebook-client 包)中的这个调用: var result = await WebAuthenticationBroker.AuthenticateAsync(options, startUri, endUri);

这个功能好像没有在手机上实现。我仍然想知道引用完全相同的代码的 turial 怎么可能工作。

【问题讨论】:

    标签: c# .net facebook windows-phone-8.1 facebook-c#-sdk


    【解决方案1】:

    它尚未在 8.1 中实现。如果您想在 8.1 中使用 Facebook 身份验证,可以使用以下方法:

    在您的 App 类中:

    private const string RedirectUrl = "https://www.facebook.com/connect/login_success.html";
    private static readonly IReadOnlyCollection<string> Permissions = new[] { "email", "offline_access" };
    
    protected override void OnActivated(IActivatedEventArgs args)
    {
        base.OnActivated(args);
        var continuationActivatedEventArgs = args as IContinuationActivatedEventArgs;
        if (continuationActivatedEventArgs == null)
            return;
        var webAuthenticationResult = ((WebAuthenticationBrokerContinuationEventArgs)continuationActivatedEventArgs).WebAuthenticationResult;
        if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
        {
            var facebookClient = new FacebookClient();
            var result = facebookClient.ParseOAuthCallbackUrl(new Uri(webAuthenticationResult.ResponseData));
            if (!result.IsSuccess)
            {
                // Process unsuccessful authentication
            }
            else
            {
                // Process successful authentication
                var accessToken = result.AccessToken;
            }
        }
    }
    
    // Authentication method, this method should be invoked when you click Facebook authentication button
    public void AuthenticateAndContinue()
    {
        var loginUrl = GetLoginUrl();
        WebAuthenticationBroker.AuthenticateAndContinue(loginUrl, new Uri(RedirectUrl));
    }
    
    private Uri GetLoginUrl()
    {
        var parameters = new Dictionary<string, object>();
        parameters["client_id"] = "YourFacebookApplicationId";
        parameters["redirect_uri"] = RedirectUrl;
        parameters["response_type"] = "token";
        parameters["display"] = "touch";
        parameters["mobile"] = true;
        parameters["scope"] = String.Join(",", Permissions);
    
        var facebookClient = new FacebookClient();
    
        return facebookClient.GetLoginUrl(parameters);
    }
    

    我把所有东西都放在一个地方只是为了举例,最好把 fb 身份验证逻辑分开。 你可以在这里找到这种方法MSDN Windows Phone 8.1 Web Authentication samples

    【讨论】:

    • 你知道8.1没有实现SDK为什么会调用这个函数吗?这是 Windows Phone API 的最新变化吗?
    • Windows phone sdk 将 WebAuthenticationBroker.AuthenticateAsync 标记为已弃用,并带有注释:“AuthenticateAsync 不适用于从 Windows Phone 8.1 开始的版本。相反,请使用 AuthenticateAndContinue 或 AuthenticateSilentlyAsync”,但 Facebook API 在 FacebookSessionClient.LoginAsync 方法中使用此方法,所以我们从 WebAuthenticationBroker 抛出了 NotImplementedException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多