1

我试图在 windows 8 应用程序中实现 Facebook 登录。我正在使用以下网址请求 Facebook 登录

https://www.facebook.com/dialog/oauth?client_id=APP_ID&response_type=token&scope=email%2coffline_access%2cpublish_stream&redirect_uri=http%3a%2f%2fwww.facebook.com%2fconnect%2flogin_success.html&display=touch

我正在使用 webview 来请求这个 url。我得到了正确的登录页面,如下所示。 在此处输入图像描述

用户输入登录凭据后,它会重定向到另一个页面并卡在那里。我猜该页面应该被授予权限。我正在附加一个如下所示的屏幕

在此处输入图像描述

如果我点击取消或安装,什么都不会发生..

如果我display=touch从请求中删除一切都会正常工作。但是登录页面和权限页面会像在 Web 浏览器中一样显示。这不是针对触摸进行优化的 ..

我已经用webbrowserwpf 中的控件进行了相同的测试。但是问题仍然存在。有任何想法吗?

4

1 回答 1

3

在 Windows 8 上,您应该使用WebAuthenticationBroker

这是代码示例:

private async void Authenticate()
    {
        //Facebook Authentication Uri
        var facebookUri = "https://www.facebook.com/dialog/oauth";
        //Standard redirect uri for desktop/non-web based apps
        var redirectUri = "https://www.facebook.com/connect/login_success.html";
        //Place your appa client id here
        var clientId = "";
        //The type of token that can be requested
        var responseType = "token";
        //Response pattern
        var pattern = string.Format("{0}#access_token={1}&expires_in={2}", redirectUri, "(?.+)", "(?.+)");

        try
        {
            String FacebookURL = "https://www.facebook.com/dialog/oauth?client_id=" +
                clientId + "&redirect_uri=" + Uri.EscapeUriString(redirectUri) + "&scope=read_stream&display=touch&response_type=token";

            System.Uri StartUri = new Uri(FacebookURL);
            System.Uri EndUri = new Uri(redirectUri);


            WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
                                                    WebAuthenticationOptions.None,
                                                    StartUri,
                                                    EndUri);
            if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
            {
                var response = WebAuthenticationResult.ResponseData.ToString();
            }
            else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
            {
                //Handle HTTP error
            }
            else
            {
                //Handle error
            }
        }
        catch (Exception ex)
        {
            //Handle error
        }
    }
于 2012-07-06T07:17:04.880 回答