5

Я создаю новое универсальное приложение для Windows 10 UWP и пытаюсь выполнить вход в Facebook.Facebook Войти - Windows 10 UWP - Рабочий стол

на Facebook, я поставил раздел для Windows App моего приложения, чтобы иметь идентификатор моего приложения:

Windows: s-1-15-ХХХХХХХХХХОГО
Windows Phone: fef49b712e5a843cbfeb0c9d780423fc (Не реально один)

В файле манифеста пакета, я добавил протокол:

MSFT-fef49b712e5a843cbfeb 0c9d780423fc

означает, что я установил мой параметр redirect_uri в:

MSFT-fef49b712e5a843cbfeb0c9d780423fc: // санкционировать

При работе на телефоне (с Windows 10 Mobile Preview) сервисных работ отлично, он открывает приложение Facebook на телефоне (используя fbconnect: // authorize? .....), который, в свою очередь, аутентифицируется, а затем открывает мое приложение обратно - отлично!

Однако, при попытке же на рабочем столе это не работает. В моем Launcher.LaunchUriAsync() установлен резервный Uri стандартного веб-диалога Facebook (https://www.facebook.com/dialog/oauth?.....). Это связано с тем, что для Windows 10 нет приложения для Windows, которое поддерживает вход в систему.

Отправляя то же самое redirect_uri через Facebook, он открывает веб-браузер (Edge) и запрашивает разрешения и т. Д. После предоставления разрешений, ничего не происходит. Кажется, что обработка протокола не работает.

Любые мысли были бы полезны.

ответ

6

На рабочем столе, попробуйте использовать WebAuthenticationBroker вместо Launcher.LaunchUriAsync, как описано в этом примере: 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

Спасибо, это обычно работает. Тем не менее, я теряю гибкость приложения, являющегося универсальным. Я надеялся, что смогу иметь что-то, что работает как на телефоне, так и на рабочем столе - лучший опыт для пользователя будет заключаться в аутентификации в приложении - что означает, что мне нужен Launcher.LaunchUriAsync - я предполагаю, что нет способа что делает резерв для использования WebAuthenticationBroker? –

+1

'WebAuthenticationBroker' работает как на мобильном, так и на рабочем столе, поэтому это будет выбор, так как вы не можете требовать установки Fb на мобильных устройствах. Лучший опыт: 1) проверьте, установлены ли приложения Facebook (в настоящее время в Win 10 есть API), а затем либо используйте Fb login, либо веб-брокер. – sibbl

+0

Хорошо, это интересно - не знал, что вы можете проверить, установлено ли приложение - знаете ли вы, что это такое? Если я могу это сделать, тогда вы правы, 'WebAuthenticationBroker' является идеальным вариантом после –

Смежные вопросы