2015-10-13 19 views
5

Sto creando una nuova app UWP universale Windows 10 e sto tentando di eseguire un accesso Facebook.Login Facebook - UWP Windows 10 - Desktop

Su Facebook, ho impostato la sezione Windows App del mio app per avere l'identificativo della mia app:

di Windows: s-1-15-xxxxxxxxxxxx
Windows Phone: fef49b712e5a843cbfeb0c9d780423fc (non l'attuale uno)

nel file manifesto del pacchetto, ho aggiunto il protocollo di:

msft-fef49b712e5a843cbfeb 0c9d780423fc

Il che significa che ho impostato la mia parametro redirect_uri a:

MSFT-fef49b712e5a843cbfeb0c9d780423fc: // autorizzare

Quando si esegue su un telefono (con Windows 10 Mobile Preview) funziona il servizio bene, apre l'app di Facebook sul telefono (usando fbconnect: // authorize? .....), che a sua volta autentica, e poi riapre la mia app - perfetto !!

Tuttavia, quando si prova lo stesso sul desktop non funziona. Nel mio Launcher.LaunchUriAsync() è impostato un URI di fallback della finestra di dialogo web standard di Facebook (https://www.facebook.com/dialog/oauth?....). Questo perché non è disponibile alcuna app di Facebook per Windows 10 che supporti l'accesso.

Invio dello stesso redirect_uri tramite Facebook, apre il browser Web (Edge) e richiede le autorizzazioni ecc. Una volta fornite le autorizzazioni, non accade nulla. Sembra che la gestione del protocollo non funzioni.

Ogni pensiero sarebbe utile.

risposta

6

Sul desktop, provare a utilizzare il WebAuthenticationBroker invece di Launcher.LaunchUriAsync come descritto in questo esempio: http://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

Grazie, questo in genere funziona. Tuttavia, perdo la flessibilità dell'app essendo universale. Speravo che avrei potuto avere qualcosa che funzionasse sia sul telefono che sul desktop - la migliore esperienza per l'utente sarà quella di autenticarsi nell'app - il che significa che ho bisogno di Launcher.LaunchUriAsync - Suppongo che non ci sia modo di facendo la fallback per quello usi WebAuthenticationBroker? –

+1

'WebAuthenticationBroker' funziona su dispositivi mobili e desktop, quindi questa sarebbe una scelta in quanto non è possibile richiedere l'installazione di Fb anche su dispositivi mobili. La migliore esperienza sarebbe la seguente: 1) verificare se le app di Facebook sono installate (c'è un'API per questo ora in Win 10) e quindi utilizzare il login Fb o il broker di autenticazione web. – sibbl

+0

Ok, è interessante - non sapevo che puoi controllare se è installata un'app - sai di cosa si tratta? Se posso farlo, allora sei corretto, il 'WebAuthenticationBroker' è l'opzione perfetta dopo –

Problemi correlati