1

这似乎是一个明显的问题,但我在 facebook 开发者网站上查看了有关画布应用程序和facebook csharp sdk并没有找到我的问题的答案。

我正在使用 facebook-c#-sdk v5.4x 或类似的东西,.net 3.5 使用网络表单。

桌面版画布应用程序将有多个入口点。

https://apps.facebook.com/my_canvas_app/Default.aspx
https://apps.facebook.com/my_canvas_app/Register.aspx?EventID=12345
https://apps.facebook.com/my_canvas_app/SomeOtherPage.aspx

我的第一个问题是,从来自 facebook 的第一个请求开始,我收到了signed_request(由facebook-c#-sdk负责),我有 oauth 令牌,它的有效期约为 2 小时。在尝试发出 oauth 请求(查询图表等)之前,重新更新此 oauth 令牌并确保其有效的正确方法是什么?

现在我所有的链接(比如来自 Default.aspx)看起来像<a href="https://apps.facebook.com/my_canvas_app/SomeOtherPage.aspx" target="_top">Go to Some Other Page</a>,最终会往返于 facebook,得到一个新signed_request的 ,因此是一个更新的 oauth 令牌。

其次,当通过 asp.net 将常规表单回发到我自己的站点时,我确保signed_request表单上带有一个简单的<input type="hidden" name="signed_request" value="<%=Request.Form["signed_request"]%>" />,这似乎适用于应用程序。如果我省略了这个,那么回发没有 oauth 信息,导致事情失败。这是在画布应用程序中执行回发的正确方法吗?从查看 csharp-sdk 的源代码中可以看出,会话中没有存储任何内容来保留请求之间的 oauth 令牌,因此多个页面/回发需要隐藏输入和 target="_top" 链接,我我在这个推论中正确吗?

https://apps.facebook.com/my_canvas_app/MobilePage.aspx第三,在开发移动画布应用程序(没有 iframe)时,如果我的第一个假设是正确的,我页面上的所有链接是否仍然必须转到。

如果有人能对这些主题有所了解,我将不胜感激。

谢谢!

4

2 回答 2

2

现在我所有的链接(比如来自 Default.aspx)看起来像转到其他页面,最终会往返于 facebook,获得一个新的 signed_request,从而获得一个更新的 oauth 令牌。

我建议还将 JavaScript SDK 嵌入到您的页面中——然后调用 FB.getLoginStatus 也应该每次都为您提供有效的访问令牌。您可以做的另一件事是将您在用户登录时获得的短期访问令牌交换为长期访问令牌,请参阅https://developers.facebook.com/roadmap/offline-access-removal/

如果您将访问令牌保存到某种会话中,那么我想您将不得不通过回发将其从页面传输到页面,是的。

(也许你也应该看看https://developers.facebook.com/docs/authentication/access-token-expiration/。)

于 2012-05-31T11:58:12.380 回答
0

我正在做的是signed_request在每页的基础上使用。桌面环境中的所有链接都http://apps.facebook.com/myappnamespace/MyPageName.aspx带有target="_top",这样每次页面更改都会获得更新的 oauth 令牌。移动设备的操作方式不同,因为signed_request它不适用于移动体验。解决方案是改用服务器端身份验证。我不http://apps.facebook.com/myappnamespace用于移动环境,因为它不在 iframe 中。移动设备像任何其他常规网站一样运行。

于 2012-07-27T14:36:23.823 回答