1

私はWindows8アプリケーションにFacebookログインを実装しようとしていました。次のURLを使用して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

このURLをリクエストするためにwebviewを使用しています。以下に示すログインページが正しく表示されます。 ここに画像の説明を入力してください

ユーザーがログインクレデンシャルを入力すると、別のページにリダイレクトされ、そこでスタックします。ページに権限が付与されていると思われます。以下に示す画面を添付しています。

ここに画像の説明を入力してください

キャンセルまたはインストールをクリックしても何も起こりません。

リクエストから削除する場合display=touch、すべてが正常に機能しますが、ログインページとアクセス許可ページはWebブラウザのように表示されます。これはタッチ用に最適化されていません。

私はwpfのコントロールで同じことをテストしましたwebbrowser。しかし、問題はまだそこに存在しています。何か案は?

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 に答える