2015-10-13 71 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'是 –