我有一个iFrame Facebook应用程序。我正在使用Facebook C#SDK,Facebook
和Facebook.Web
库。
当用户第一次访问我的应用程序时,我在FacebookApp
上创建了一个page_load()
对象。如果app.Session
为空,则创建CavasAuthorizer(app)
,然后调用Authorize()
。
两个问题:
首先,通过调用Authorize
生成的重定向URL会导致Facebook出错并显示错误的“下一个”参数。称“next”参数不归应用程序所有。它看起来像这样:
next=http://localhost:4002/facebookredirect.axd/mygame_dev/mygame.aspx
我可以编辑CanvasURLBuilder
中的代码,使下一个看起来像这样:
next=http://localhost:4002/mygame.aspx
此时,如果我剪切并粘贴到浏览器中,则URL会起作用,但是它会让我遇到第二个问题。
当代码运行时,会向用户显示一个大部分为空的页面,其中包含中型Facebook图像和“go to Facebook”链接。当用户点击链接时,它会将用户带到我的应用程序的正确授权页面。
我感觉这是两个可能相关的问题,但可能是分开的。
非常感谢任何帮助。
-Andy
答案 0 :(得分:2)
第一个问题
确保应用配置页面中的网站网址设置为http://apps.facebook.com/ [your_app] /
对于第二个问题。
当您未获得授权时,您将被重定向到登录网址,但您无法从iframe执行此操作,因为它将重定向iframe,您将在Facebook内部获得Facebook。
您应该使用window.top.location = ...
重定向父窗口。
修改强>
Facebook C#SDK在使用SDK的Mvc部分时,已经为您做到了这一点。由于您使用的是webforms,因此您应该使用与此等效的代码。
protected void Page_Load(object sender, EventArgs e)
{
var fb = new FacebookApp();
var auth = new CanvasAuthorizer(fb);
if (!auth.IsAuthorized())
{
var url = auth.GetLoginUrl(new HttpRequestWrapper(Request));
var content = CanvasUrlBuilder.GetCanvasRedirectHtml(url);
Response.ContentType = "text/html";
Response.Write(content);
Response.End();
return;
}
//...Go on if authorized
}
答案 1 :(得分:0)
要在本地测试,请确保您在Facebook中的网站网址和Canvas网址类似于http://localhost:8181/yourpage。然后确保在VS中设置项目属性\ Web下的设置,以便不动态生成端口,您可以使用8181(或任何您喜欢的端口,只要它与FB中的相同)。
答案 2 :(得分:-1)
我认为您的网络配置中的回拨网址指向localhost。你不能这样做,因为代码实际上是在Facebooks IFrame内运行的。 Localhost是facebook web服务器的localhost。您必须在web.config中的Callback键中提供有效的URL。如果您没有域名,可以映射到您的IP,然后查看任何免费的动态DNS客户端。 No-ip是一个例子(我亲自使用的一个)。