最初我使用的是.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调用或应该获取应用程序访问令牌时。
谢谢!
答案 0 :(得分:0)
我想你使用了较旧的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)
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获取信息,我在服务器上使用。
我希望这有助于某人。