2015-10-13 46 views
5

我正在构建一个新的通用Windows 10 UWP应用程序,并尝试做Facebook登录。Facebook登录 - Windows 10 UWP - 桌面

在Facebook上,我已经把我的应用程序的Windows应用程序部分有我的应用程序的标识:

的Windows:S-1-15-XXXXXXXXXXXX
的Windows Phone:fef49b712e5a843cbfeb0c9d780423fc(不实际一个)

在包清单文件,我已经添加的协议:

MSFT-fef49b712e5a843cbfeb 0c9d780423fc

这意味着我我redirect_uri参数设置为:

MSFT-fef49b712e5a843cbfeb0c9d780423fc://授权

当手机上运行(与Windows 10移动预览)服务工程很好,它打开了手机上的Facebook应用程序(使用fbconnect://授权?.....),然后进行身份验证,然后打开我的应用程序备份 - 完美!

但是,当在桌面上尝试相同时,它不起作用。在我的Launcher.LaunchUriAsync()被设置为具有标准Facebook网页对话框的回退Uri(https://www.facebook.com/dialog/oauth?....。) - 这是因为没有支持登录的Windows 10的Facebook应用程序。

通过发送相同的redirect_uri到Facebook,它打开网页浏览器(边缘)并要求权限等,一旦授予权限,什么都不会发生。看起来好像协议处理不起作用。

任何想法都会有用。

回答

6

在桌面上,请尝试使用WebAuthenticationBroker而不是作为在这个例子中所描述Launcher.LaunchUriAsynchttp://dotnetbyexample.blogspot.de/2015/06/custom-oauth-login-to-facebook-for.html

private async Task<string> AuthenticateFacebookAsync() 
{ 
    try 
    { 
    var fb = new FacebookClient(); 

    var redirectUri = 
     WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(); 

    var loginUri = fb.GetLoginUrl(new 
            { 
            client_id = AppId, 
            redirect_uri = redirectUri, 
            scope = ExtendedPermissions, 
            display = "popup", 
            response_type = "token" 
            }); 

    var callbackUri = new Uri(redirectUri, UriKind.Absolute); 

    var authenticationResult = 
     await 
     WebAuthenticationBroker.AuthenticateAsync(
     WebAuthenticationOptions.None, 
     loginUri, callbackUri); 

    return ParseAuthenticationResult(fb, authenticationResult); 
    } 
    catch (Exception ex) 
    { 
    return ex.Message; 
    } 
} 
+0

谢谢,但这一般工作。但是,我确实失去了应用程序通用性的灵活性。我希望能够在手机和桌面上都能够使用某些东西 - 用户的最佳体验就是在应用中进行身份验证 - 这意味着我需要Launcher.LaunchUriAsync - 我认为没有办法为此使用WebAuthenticationBroker回退? –

+1

'WebAuthenticationBroker'既适用于手机又适用于桌面,因此这将是一种选择,因为您不需要在手机上安装Fb。最好的体验如下:1)检查Facebook应用程序是否已安装(Win 10中现在有一个API),然后使用Fb登录或Web认证代理。 – sibbl

+0

好的,这很有趣 - 不知道你可以检查是否安装了应用程序 - 你知道那是什么吗?如果我能做到这一点,那么你是正确的,'WebAuthenticationBroker'是 –