深入链接到 Facebook 画布应用程序

发布于 2024-12-18 09:53:39 字数 1588 浏览 3 评论 0原文

我将 Facebook 应用程序 https://example.com 嵌入到 Facebook 应用程序画布中,以便可以在 https://apps.facebook.com/EXAMPLE 上使用它。我的应用程序发送通知电子邮件,其中包含 https://example.com/messages/123 等链接,并且应该打开嵌入到 Facebook 画布中的页面。我该如何实现这一目标?我当前的想法:

  1. 用户打开 https://example.com/messages/123
  2. 应用程序检查 signed_request 参数
  3. 应用程序将用户重定向到 https://apps.facebook.com/EXAMPLE/?requested_pa​​ge=/messages/123
  4. 应用程序检查对于 requested_pa​​ge 参数并重定向到此页面
  5. 用户看到 https://example.com/messages/123 URL 并嵌入到画布中

是否有更好的模式可以获取这工作?

我的最终工作解决方案(使用 Ruby on Rails)

  1. 用户打开 https://example.com/messages/123
  2. 应用程序在客户端检查是否嵌入了应用程序在画布中:

    if(窗口==顶部){
        top.location = "https://apps.facebook.com/#{Settings.facebook.app_id}#{request.fullpath}";
    }
    
  3. 用户被重定向到https://apps.facebook.com/EXAMPLE/messages/123

  4. 应用程序中间件将 POST 转换为 GET如果signed_request 存在(代码和想法借自 https://github.com/dekart/facebooker2/blob/master/lib/facebooker2/rack/post_canvas.rb)
  5. 应用程序解析signed_request 与 fb_graph gem

    FbGraph::Auth.new(app_id, app_secret, :signed_request => params[:signed_request])
    

I am embedding a Facebook app https://example.com into the Facebook app canvas so that it is available at https://apps.facebook.com/EXAMPLE . My application sends notification emails that contain links like https://example.com/messages/123 and that should open the page embedded into the Facebook canvas. How do I achieve this? My current thoughts:

  1. User opens https://example.com/messages/123
  2. Application checks for signed_request parameter
  3. Application redirects user to https://apps.facebook.com/EXAMPLE/?requested_page=/messages/123
  4. Application checks for requested_page parameter and redirects to this page
  5. User sees https://example.com/messages/123 URL and is embedded into canvas

Is there a better pattern out there to get this working?

My final working solution (with Ruby on Rails)

  1. User opens https://example.com/messages/123
  2. Application checks on client-side if app is embedded in canvas:

    if(window == top){
        top.location = "https://apps.facebook.com/#{Settings.facebook.app_id}#{request.fullpath}";
    }
    
  3. User is redirected to https://apps.facebook.com/EXAMPLE/messages/123

  4. Application middleware converts POST into GET if signed_request is present (code and idea borrowed from https://github.com/dekart/facebooker2/blob/master/lib/facebooker2/rack/post_canvas.rb)
  5. Application parses signed_request with fb_graph gem

    FbGraph::Auth.new(app_id, app_secret, :signed_request => params[:signed_request])
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烂人 2024-12-25 09:53:39

我只是更新链接以从一开始就指向 http://apps.facebook/example/messages/123

当您检查身份验证时,只需在授权/登录后设置重定向到同一页面。

无缘无故地将用户重定向到多个页面并不是一个好的做法。

I'd just update the link to point to http://apps.facebook/example/messages/123 off the start.

When you check for authentication just set the redirect after authorization/login to the same page.

Redirecting a user around multiple pages for no reason is just not a good practice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文