我正在尝试从其用户的Facebook帐户处理实时Feed更新的网站。我有基本的东西:应用程序订阅“feed”,用户的登录请求read_stream和offline_access(以防万一)权限。我的测试用户已登录到FB并授予这些权限,并且当其中一个用户添加(或删除)状态更新时,我的站点订阅中指定的回调将被ping。到目前为止,一切都很顺利。
现在 - 正如我所理解的那样 - 我的回调必须调用Facebook来获取用户的提要,这样回调就可以做任何与它有关的事情。这就是我遇到问题的地方 - 找到合适的访问令牌来检索Feed:
我尝试使用应用的访问令牌执行此操作。此令牌能够检索朋友信息(也包含在应用程序的订阅和用户权限中),但它不会为我提供Feed。
我已经尝试了各种方法从回调中获取用户的访问令牌,但没有任何工作。我猜这是因为它不像浏览器中的用户那样“登录Facebook”,但无论如何。最重要的是,我还没有找到获得此令牌的方法。
(顺便说一句,如果我作弊 - 从Graph API资源管理器获取用户的访问令牌并将其硬编码到回调中,回调正常工作。当然,这不是真正的解决方案,但它至少建立了我的其余代码正在运行。)
那么这是如何工作的?应用程序访问令牌可以以某种方式工作吗?事实上,回调是否有办法为任意授权用户获取访问令牌?必须有一种方法可以做到这一点,或者实时的饲料通知没有意义。有什么线索吗?这非常严重地踢我的屁股......谢谢!
答案 0 :(得分:2)
你可能想看看这个。 Facebook现在可以在用户登录时提供短期访问令牌(2小时),而不是获取离线访问权限。这些可以与长期访问令牌(2个月)交换。看看这篇关于如何去做的文章。
https://developers.facebook.com/roadmap/offline-access-removal/
答案 1 :(得分:1)
我找到了一个解决方案,可能是:当用户登录时,我会抓住启用了offline_access的访问令牌,并将其与用户的其余数据一起保存在应用程序中。然后当我收到有关该用户的订阅源更新的通知时,我可以从数据库中提取令牌并将其作为/ feed ...调用的令牌部分传递给FB。而且,它的工作原理。毫无疑问,有些错误处理需要完成,但我目前正在反复思考(a)这是处理这个问题的正确方法,(b)这是一个可怕的黑客攻击。我想我会看到其中的哪一个是这样的......
答案 2 :(得分:1)
请求offline_access(和你一样)并存储访问令牌。这就是为什么有offline_access和访问令牌的原因,以该用户的名义向facebook发出请求。 (a)是正确的方法。 (a)是我这样做的方式。 祝你好运
答案 3 :(得分:0)
当用户通过OAuth进行身份验证时,Facebook会返回一个访问令牌,但它有效几个小时。此令牌的有效性随着令牌到期而出现。 但是,此令牌可以与新的扩展令牌交换,该令牌有效期约为60天。使用以下代码获取新令牌:
网址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 = new BufferedReader(new InputStreamReader(Istream));
String new_token = br.readLine();
希望它有所帮助!!