从旧版(v3.0)Facebook .Net SDK 迁移到最新版(v5.0)的方法

3

最初,我使用的是这里找到的Facebook .NET SDK:

http://facebooktoolkit.codeplex.com/

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

http://facebooksdk.codeplex.com/

虽然我已经构建了一些Facebook画布应用程序,甚至将我们公司的网站集成到了Facebook Connect中,但我仍然对Facebook身份验证/授权更改的细微差别和详细信息感到有些困惑。例如,我如何将下面的.NET服务器端代码从旧版(v3.0).NET SDK集成与Facebook迁移到新的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 APIs 从我们的服务器执行的,当迁移到新的 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来获取访问令牌(例如,如果用户正在使用我的画布应用程序),或者在进行客户端API调用时应该什么时候简单地使用我的appId来初始化JavaScript FB对象(即FB.init()),或者应该获取应用程序访问令牌。
谢谢!
2个回答

0

经过一些调查和试错,这是我用来集成最新的 .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并连接到我的外部网站。我不确定Authorizer的工作原理,但我的猜测是它查看cookie以确定用户是否已登录Facebook(因为httpContext被传递到Authorizer中)。然后,假设用户已登录Facebook并授权了我的应用程序,我的服务器端代码可以从Authorizer对象获取AccessToken来创建一个新的FacebookClient,该客户端可以轻松调用Graph API。

此外,在我的情况下,我使用FB JS SDK弹出对话框,以便将用户登录到Facebook,然后我的服务器端代码只需检查用户是否已登录,然后调用Graph API获取信息,我在服务器上使用这些信息。

希望这能帮助某些人。


0

不幸的是,由于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。但是,如果您想创建画布应用程序、将用户登录到您的网站等,则还需要升级到Facebook C# SDK。


大部分情况下,我能够在我们的网站上使用JavaScript SDK(调用FB.ui()以显示权限对话框等),但是我们网站上有一些功能过去依赖于能够通过REST API调用Facebook来检索信息。现在,我的任务是集成新的.NET Facebook SDK,但我不确定如何使用.NET SDK获取有效会话并获取有关用户的信息(即用户已授权给我的Facebook启用网站的哪些权限)。 - Deven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接