是否可以将参数传递给通过选项卡访问的FB应用程序的回调URL?

时间:2011-01-08 13:36:39

标签: facebook

我有这个Facebook应用程序,它为粉丝页面添加了一个自定义选项卡。您可以通过以下URL访问该选项卡:

http://www.facebook.com/pages/PAGE-NAME-HERE/PAGE-ID?v=APP-ID

我希望能够为该URL添加一些额外的get参数,但似乎它们没有正确传递,因为facebook正在过滤它们。有没有办法传递这些参数?即使不是通过GET而是其他一些技术。

5 个答案:

答案 0 :(得分:10)

如果你想通过app_data参数传递多个查询字符串参数,你可以 urlencode it

需要通过Facebook标签传播的所有查询字符串参数应在app_data var中进行URL编码。

换句话说,“&”并且“=”需要进行url编码(特别是如果传递多个参数)。

实施例

GOOD TAB URL(通过所有3个参数):

https://www.facebook.com/pages/yourpagename/56789?sk=app_12345&app_data=var1%3D123456789%26anothervar%3Drawr%26athird%3Dmeow

在此签名请求的app_data中,我得到了这个值: var1 = 123456789& anothervar = rawr& athird = meow

BAD TAB URL(这只通过signed_request传递第一个参数):

https://www.facebook.com/pages/yourpagename/12345?sk=app_56789&app_data=var1=123456789&anothervar=rawr&athird=meow

在这个签名请求的app_data中,我只获得了这个值: var1 = 123456789 (Facebook放弃了其余的)

您甚至可以向媒体团队提供这样的说明=)

  

媒体团队,

     

这是一个在线实用程序,用于对您想要的查询数据进行urlencode   嵌入app_data参数:http://meyerweb.com/eric/tools/dencoder/

     

基本网址:https://www.facebook.com/pages/yourpagename/12345?sk=app_56789&app_data=

     

步骤:

     
      
  1. 转到http://meyerweb.com/eric/tools/dencoder/
  2.   
  3. 类型var1 = 123456789& anothervar = rawr& athird =盒子里的喵喵
  4.   
  5. 点击编码按钮
  6.   
  7. 你将得到var1%3D123456789%26anothervar%3Drawr%26athird%3Dmeow成为你的app_data参数。将其附加到上面提到的baseUrl,如下所示:   https://www.facebook.com/pages/yourpagename/12345?sk=app_56789&app_data=var1%3D123456789%26anothervar%3Drawr%26athird%3Dmeow(这是[横幅广告] [在线媒体] [等]的跟踪参数的网址
  8.   

P.S。非标签页中的查询字符串参数处理得很好(https://apps.facebook.com/yourappname/Canvas.aspx?var1=123456789&anothervar=rawr&athird=meow不会删除qs参数,例如Tab中发生的情况)。

答案 1 :(得分:0)

您必须在网址中传递app_data参数:

http://facebook.com/pages/:page_id/:page_name?sk=app_:app_id&app_data=my_data

然后,您将通过signed_request参数访问它。例如Ruby和RestGraph:

user = RestGraph.new.parse_signed_request(params[:signed_request)
data = user['app_data'] # => "my_data"

答案 2 :(得分:0)

追加app_data对我有用。

http://www.facebook.com/pages/MyPage/11111111111111?sk=app_22222222229&app_data=foo_bar

然后使用PHP SDK(在我的情况下)检索签名的请求。然后app中的app_data可用。数组返回。

答案 3 :(得分:0)

我想知道同样的情况,就我而言,我需要传递一个参数“ from”,以识别用户是使用移动表单还是Web表单登录。我的应用程序使用Spring Security。我能够做到这一点的方法是创建自己的SocialAuthenticationFilter:

1)在您的登录表单中添加一个(在我的情况下是隐藏的)参数(在此示例中为“ from”)。

2)获取正确的SocialAuthenticationFilter.java源码(根据您的Spring版本)。

3)使用它创建您的MySocialAuthenticationFilter。

4)在方法中:     SELECT users.id, users.name, COALESCE(task_reg.payment, 0) AS payment FROM users LEFT JOIN task_reg ON users.id = task_reg.use_id LEFT JOIN topics ON topics.id = task_reg.top_id AND topics.id = 1 是您可以使用的地方 抓取您的参数:

getRequestedProviderId(HttpServletRequest request)

仅此而已。这样,在成功通过身份验证之后,您将能够从会话中恢复您的参数。 请注意,在OAuth交换期间会多次调用此方法,并且从身份验证提供程序(例如Facebook)调用此方法时,该参数将为null。这就是在保存会话之前检查该值的原因,以避免删除您的正确值。

答案 4 :(得分:-2)

我回答说这是不可能的。