0

私はFBAPIの使用にまったく慣れておらず、Asp.netアプリケーションからFacebookウォールに投稿しようとしています。

FBからAppkeyと秘密鍵を取得し、コードに従ってFBウォールに投稿しようとしています。

リンク: http: //kennetham.com/2010/07/21/facebook-api-asp-net/

私が現在直面している問題は、ConnectAuthenticationクラスでは、HttpContext.Current.Request.Cookies[fullCookie]が常にNULLであるということです。そのため、ページロードで「if(ConnectAuthentication.isConnected())」を使用してFB接続を確認すると、常にfalseが返され、条件内でコードが実行されません。

何故ですか?私は何かが足りないのですか?

ConnectAuthenticationクラス

public class ConnectAuthentication
{
    public ConnectAuthentication()
    {

    }

    public static bool isConnected()
    {
        return (SessionKey != null && UserID != -1);
    }

    public static string ApiKey
    {
        get
        {
            return ConfigurationManager.AppSettings["APIKey"];
        }
    }

    public static string SecretKey
    {
        get
        {
            return ConfigurationManager.AppSettings["Secret"];
        }
    }

    public static string SessionKey
    {
        get
        {
            return GetFacebookCookie("session_key");
        }
    }

    public static long UserID
    {
        get
        {
            long userID = -1;
            long.TryParse(GetFacebookCookie("user"), out userID);
            return userID;
        }
    } 
    private static string GetFacebookCookie(string cookieName)
    {
        string retString = null;
        string fullCookie = ApiKey + "_" + cookieName; 

        if (HttpContext.Current.Request.Cookies[fullCookie] != null)
            retString = HttpContext.Current.Request.Cookies[fullCookie].Value;

        return retString;
    }
}

これが私のページロードでConnectAuthenticationクラスがどのように使用されるかです:

    if (ConnectAuthentication.isConnected())
                {
                    Facebook.Session.ConnectSession session = new Facebook.Session.ConnectSession(ConnectAuthentication.ApiKey, ConnectAuthentication.SecretKey);

                    _connectSession = new ConnectSession(ConnectAuthentication.ApiKey, ConnectAuthentication.SecretKey);

                    Api _facebookAPI = new Api(_connectSession);

                    _connectSession.UserId = ConnectAuthentication.UserID;
                    Facebook.Rest.Api api = new Facebook.Rest.Api(_connectSession);

                    //Display user data captured from the Facebook API.

                    Facebook.Schema.user user = api.Users.GetInfo();
                    string fullName = user.first_name + " " + user.last_name;
                    Panel1.Visible = true;
                    Label1.Text = fullName;

                }
                else
                {
                    //Facebook Connect not authenticated, proceed as usual.
                }
           }
4

1 に答える 1

0

このコードは完全に機能しました...

<input type="button" id="fblogin" value="Login to Facebook" disabled="disabled" style="display:none"/>
        <fb:login-button v="2" length="long" onlogin="window.location = 'Default.aspx'">Login to Facebook</fb:login-button>

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function () {
        FB.init({
            appId: '<%: Facebook.FacebookApplication.Current.AppId %>',
            cookie: true,
            xfbml: true,
            oauth: true
        });

        function facebooklogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    // user authorized
                    // make sure to set the top.location instead of using window.location.reload()
                    top.location = '<%= this.ResolveCanvasPageUrl("~/") %>';
                } else {
                    // user cancelled
                }
            }, { scope: '<%: string.Join(",", ExtendedPermissions) %>' });
        };

        $(function () {
            // make the button is only enabled after the facebook js sdk has been loaded.
            $('#fblogin').attr('disabled', false).click(facebooklogin);
        });
    };
    (function () {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
</script>
于 2012-08-22T03:36:54.320 に答える