2011-11-09 38 views
2

我正在尝试处理来自其用户的Facebook帐户的实时Feed更新的网站。我有基本的东西:应用程序订阅“饲料”,并且用户的登录请求read_stream和offline_access(以防万一)权限。我的测试用户已登录到FB并授予这些权限,并且当其中一个用户添加(或删除)状态更新时,我的站点订阅中指定的回调将被ping通。到目前为止,一切都很好。您如何处理实时Feed更新?

现在 - 据我了解 - 我的回调函数必须调用Facebook来获取用户的提要,以便回调函数可以执行任何与它有关的操​​作。这就是我遇到的问题 - 寻找合适的访问令牌来获取饲料:

  • 我试着与应用程序的访问令牌这样做。此令牌能够检索朋友信息(也包括在应用程序的订阅和用户权限中),但它不会让我获得订阅。

  • 我试过各种方式从回调中获取用户的访问令牌,但没有任何工作。我猜这是因为它没有像浏览器中的用户那样“登录到Facebook”,但无论如何。底线是我没有找到一种方法来获得这个令牌。

(顺便说一句,如果我骗 - 获取从图形API资源管理器,它硬编码到回调的用户的访问令牌,回调正常工作这是没有真正的解决方案,当然,但它至少证明我的代码的其余部分正在工作。)

那么这是如何工作的?应用程序访问令牌能够以某种方式工作吗?实际上是否有一种回调方式来获取任意授权用户的访问令牌?有一种方法可以做到这一点,否则实时馈送通知就没有意义。有任何线索吗?这是严重踢我的屁股...谢谢!

回答

1

我找到了一个解决方案,可能是:当用户登录时,我拦截了启用offline_access的访问令牌,并将其与用户数据的其余部分一起保存在应用程序中。然后,当我收到有关用户提要的更新的通知时,我可以从数据库中提取令牌并将其作为/ feed ...调用的令牌部分传递给FB。而且,它的工作原理。毫无疑问,一些错误处理是可以完成的,但是我现在反复地认为(a)这是处理这个问题的正确方法,以及(b)仅仅是要求麻烦的可怕攻击。我想我会看看其中哪些是这种情况...

+0

是的,如果你有一个access_token,它通常会在1-2小时内到期,我想。如果需要更长时间使用该令牌,则需要offline_access。 – Drizzt321

1

询问offline_access(和您一样)并存储访问令牌。这就是为什么offline_access和访问令牌存在,以便以该用户的名义向Facebook发出请求的原因。 (a)是正确的路要走。 (a)是我这样做的方式。 祝你好运

0

当用户通过OAuth认证的Facebook返回一个访问令牌,但它是有效的几个小时。该令牌的有效性与它一起作为令牌到期。 但是,此令牌可以与约60天有效的新扩展令牌交换。用户将下面的代码,以获得新令牌:

网址URL =新的URL( “https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id= ”+的appid +“ & client_secret = ”+ clientSecretId +“ & fb_exchange_token =” + fb_exchange_token;

的InputStream的IStream = url.openConnection ().getInputStream();

的BufferedReader BR =新的BufferedReader(新的InputStreamReader(IStream的));

字符串new_token = br.readLine();

希望它有帮助!