【问题标题】:Migrating from old (v3.0) Facebook .Net SDK to the latest (v5.0)从旧的 (v3.0) Facebook .Net SDK 迁移到最新的 (v5.0)
【发布时间】:2011-02-16 19:16:37
【问题描述】:

最初我在此处使用 .net sdk for facebook:

http://facebooktoolkit.codeplex.com/

但是现在,我正在尝试迁移到下面托管的最新版本,并实现了最近的许多新的 facebook 功能:

http://facebooksdk.codeplex.com/

尽管我已经构建了一些 facebook canvas 应用程序,甚至集成了我们公司的网站以使用 facebook connect,但我仍然对有关 facebook 身份验证/授权更改的细微差别和细节感到有些困惑。例如,我如何将以下 .NET 服务器端代码移植到新的 v5.0 .NET SDK?

            string perm = "publish_stream"; //or any permission you want to check
            FBConnectAuthentication auth = new FBConnectAuthentication(Settings.FBConnectAPIKey, Settings.FBConnectAPISecret);
            FBConnectSession fbSession = auth.GetSession();
            string userId = fbSession.UserID;
            var session = new Facebook.Session.ConnectSession(Settings.FBConnectAPIKey, Settings.FBConnectAPISecret);
            var api = new Facebook.Rest.Api(session);
            var usr = SessionInfo.CurrentUserOrUserAccountWithLastEmailAddressEntered;
            Facebook.Schema.Enums.ExtendedPermissions perm
                = (Facebook.Schema.Enums.ExtendedPermissions)Enum.Parse(typeof(Facebook.Schema.Enums.ExtendedPermissions), permission);
            hasPermission = api.Users.HasAppPermission(perm);

由于上面的代码是使用 REST api 从我们的服务器执行的,当移植到新的 sdk 时,我应该不用担心使用 OAuth access_token 吗?

在客户端,当最终用户查看我的网站页面时,当我执行以下 javascript 调用时,一切似乎都正常:

FB.Connect.showPermissionDialog('publish_stream, email, user_checkins', publishToWallPermissionGranted);
function publishToWallPermissionGranted() {
    FB.Connect.streamPublish('some share message', null, null, null, false, null);
}

使用上面的客户端代码,我没有存储 access_token 或做类似的事情,但我为什么能够成功地验证、授权和发布到用户的流?

如果我应该使用 Oauth 获取访问令牌(即,如果用户正在使用我的画布应用程序)或者我应该简单地使用我的 appId 来初始化进行客户端 api 调用或我应该获取应用程序访问令牌时的 javascript FB 对象(即 FB.init())。

谢谢!

【问题讨论】:

    标签: .net facebook facebook-c#-sdk


    【解决方案1】:

    不幸的是,随着 Facebook 修改其 API/SDK 产品,旧的 .NET SDK(被微软吹捧)腐烂了。

    我想您使用的是较旧的 Facebook JavaScript SDK (http://developers.facebook.com/docs/reference/oldjavascript/)

    接下来,您很可能希望访问 Facebook Graph API。

    这将需要更新您的客户端 JavaScript SDK 和服务器端 (Facebook C#) .NET SDK。

    如果您的应用程序只是简单地发布到新闻源,那么您可以通过使用 JavaScript 调用在没有服务器端 .NET SDK 的情况下相处。但是如果你想创建一个 Canvas 应用程序,让用户登录你的网站等等,你还需要升级到 Facebook C# SDK。)

    【讨论】:

    • 在大多数情况下,我可以在我们的网站上使用 Javascript SDK(调用 FB.ui() 来显示权限对话框等),但我们网站上的一些功能过去常常用于依靠对 facebook 进行 REST api 调用以检索信息的能力。现在,我的任务是集成新的 .net facebook sdk,我很困惑如何使用 .net sdk 来获取有效会话并获取有关用户的信息(即用户为我的 facebook 授权了哪些权限)网站)。
    【解决方案2】:

    经过一些调查和反复试验,这是我用来集成最新的.net facebook sdk

    var httpContext = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
    var auth = new Facebook.Web.Authorizer(Settings.FBAppId, Settings.FBConnectAPISecret, (System.Web.HttpContextBase) httpContext);
    Facebook.FacebookClient fbApp = null;
    if (auth.Session != null && auth.Session.AccessToken != null) 
    {
       fbApp = new Facebook.FacebookClient(auth.Session.AccessToken);
    }
    isLoggedIntoFacebook = auth.IsAuthorized();
    var me = fbApp.Get("me");
    

    诀窍是我必须使用 Authorizer 类来实际确定用户是否登录到 facebook 并连接到我的外部网站。我不确定授权者是如何工作的,但我的猜测是它会查看 cookie 以了解用户是否登录到 Facebook(因为 httpContext 已传递给授权者)。然后,假设用户已登录 facebook 并授权我的应用程序,我的服务器端代码可以从 Authorizer 对象获取 AccessToken 以创建一个新的 FacebookClient,它可以轻松地调用图形 api。

    另外,在我的情况下,我使用 FB JS SDK 弹出对话框,将用户登录到 facebook,然后我的服务器端代码只是检查以确保用户已登录,然后调用 graphy apis 来获取我的信息在服务器上使用。

    我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 2016-07-23
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多