我有一个iFrame Facebook应用程序 . 我正在使用Facebook C#SDK, Facebook
和 Facebook.Web
库 .
当用户第一次访问我的应用程序时,我在 page_load()
上创建了一个 FacebookApp
对象 . 如果 app.Session
为null,我创建 CavasAuthorizer(app)
然后调用 Authorize()
.
两个问题:
首先,通过调用 Authorize
生成的重定向URL会导致Facebook出错并出现错误的"next"参数 . 表示"next"参数不归应用程序所有 . 它看起来像这样:
next=http://localhost:4002/facebookredirect.axd/mygame_dev/mygame.aspx
我可以编辑 CanvasURLBuilder
中的代码,使下一个看起来像这样:
next=http://localhost:4002/mygame.aspx
此时,如果我剪切并粘贴到浏览器中,则URL会起作用,但它会将我带到第二个问题 .
当代码运行时,向用户呈现大部分空白页面,其中具有中型Facebook图像和链接“go to Facebook” . 当用户点击链接时,它会将用户带到我的应用程序的正确授权页面 .
我感觉这是两个可能相关的问题,但可能是分开的 .
这里的任何帮助将不胜感激 .
-Andy
3 回答
对于第一个问题
确保应用配置页面中的网站Url设置为http://apps.facebook.com/ [your_app] /
对于第二个问题 .
当您未获得授权时,您将被重定向到登录网址,但您无法从iframe执行此操作,因为它将重定向iframe,您将在Facebook内部获得Facebook . 您应该使用
window.top.location = ...
重定向父窗口 .EDIT
Facebook C#SDK在使用SDK的Mvc部分时已经为您做到了这一点 . 由于您使用的是webforms,因此您应该使用与此等效的代码 .
要在本地测试,请确保您在Facebook中的站点URL和Canvas URL类似于http://localhost:8181/yourpage . 然后确保在VS中设置项目属性\ Web下的设置,以便不动态生成端口,您可以使用8181(或任何您喜欢的端口,只要它与FB中的相同) .
我认为你的web配置中的回调网址指向localhost . 你不能这样做,因为代码实际上是在Facebooks IFrame内部运行的 . Localhost是facebook web服务器的localhost . 您必须在web.config中的Callback键中提供有效的URL . 如果您没有域名,可以映射到您的IP,然后查看任何免费的动态DNS客户端 . No-ip是一个例子(我亲自使用) .