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

时间:2011-02-16 19:16:37

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

最初我使用的是.net sdk for facebook:

http://facebooktoolkit.codeplex.com/

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

http://facebooksdk.codeplex.com/

即使我已经构建了一些facebook画布应用程序,甚至整合了我们公司的网站以使用facebook connect,我仍然对facebook身份验证/授权更改的细微差别和细节感到困惑。例如,如何将我在旧的(v3.0).NET SDK与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 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获取访问令牌(即,如果用户正在使用我的画布应用程序)或者我应该只使用我的appId来初始化时,也可以给我更详细的解释。 javascript FB对象(即FB.init())在进行客户端api调用或应该获取应用程序访问令牌时。

谢谢!

2 个答案:

答案 0 :(得分: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的情况下相处。但是如果你想创建一个Canvas应用程序,将用户登录到你的网站等,你也需要升级到Facebook C#SDK。)

答案 1 :(得分: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并连接到我的外部网站。我不确定授权人是如何工作的,但我的猜测是它会查看cookie以确定用户是否登录到facebook(因为httpContext被传递到Authorizer中)。然后,假设用户登录到Facebook并授权我的应用程序,我的服务器端代码可以从Authorizer对象获取AccessToken以创建新的FacebookClient,这可以轻松调用图形API。

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

我希望这有助于某人。