gpt4 book ai didi

ruby-on-rails-3 - 在 Rails、Heroku 和 Koala 中没有使用实时更新的来自 Facebook 的 POST

转载 作者:行者123 更新时间:2023-11-30 05:23:33 25 4
gpt4 key购买 nike

这个问题是Facebook Real-time updated does not call our servers的扩展版,那似乎已经死了。另外,Realtime updates internal server error on Heroku using Koala没有帮助,因为我按照 pjaspers 的建议从 heroku 控制台订阅。

我有一个应用程序(ruby 1.9.2p290Rails 3.1.3)连接到 facebook 以从当前用户获取数据。使用 koala gem (v1.2.1) 一切正常,但每次用户登录时我都会轮询 fb 服务器。我想使用 facebook 实时更新,并且我已阅读以下内容:

我已将系统设置为测试模式并成功部署到 heroku。我可以订阅用户对象,并向我的服务器发送 GET 请求,但是没有从 facebook 收到包含更新信息的 POST。如果我手动向我的服务器发出 POST,一切正常。

更多信息:路线.rb

  get '/realtime' => 'realtime#verify'
post '/realtime' => 'realtime#change'

生成

      realtime GET  /realtime(.:format) {:controller=>"realtime", :action=>"verify"}
POST /realtime(.:format) {:controller=>"realtime", :action=>"change"}

Controller (模拟版,仅用于测试是否正常工作):

class RealtimeController < ApplicationController
def verify
render :text => params["hub.challenge"]
end

def change
puts params.inspect
render :nothing => true
end
end

来自 heroku 控制台的订阅:

irb(main):004:0> @updates = Koala::Facebook::RealtimeUpdates.new(:app_id => ENV['FACEBOOK_APP_ID'], :secret => ENV['FACEBOOK_APP_SECRET'])
=> #<Koala::Facebook::RealtimeUpdates:0x00000004f5bca8 @app_id="XXXXXXX", @app_access_token="XXXXXXX", @secret="XXXXXXX", @graph_api=#<Koala::Facebook::API:0x00000004a8d7a8 @access_token="XXXXXXX">>

irb(main):005:0> @updates.list_subscriptions
=> [{"object"=>"user", "callback_url"=>"http://blah-blah-0000.herokuapp.com/realtime", "fields"=>["education", "email", "friends", "name", "website", "work"], "active"=>true}]

我不知道接下来要做什么......

  • 也许我没有触发正确的变化事件?
  • 如何查看我的应用程序的用户列表? (现在它是一个测试应用程序,唯一的用户就是我)
  • 有人遇到过此类问题吗?
  • 代码有问题吗?
  • Facebook 宕机了吗?这是互联网的末日吗?

谢谢你的帮助:)

最佳答案

您需要使用质询响应来响应 GET 请求。我对 POST 和 GET 请求使用相同的路由,并使用以下代码:

路线:

match "facebook/subscription", :controller => :facebook, :action => :subscription, :as => 'facebook_subscription', :via => [:get,:post]

Controller :

  def realtime_request?(request)
((request.method == "GET" && params['hub.mode'].present?) ||
(request.method == "POST" && request.headers['X-Hub-Signature'].present?))
end

def subscription
if(realtime_request?(request))
case request.method
when "GET"
challenge = Koala::Facebook::RealtimeUpdates.meet_challenge(params,'SOME_TOKEN_HERE')
if(challenge)
render :text => challenge
else
render :text => 'Failed to authorize facebook challenge request'
end
when "POST"
case params['object']
# Do logic here...
render :text => 'Thanks for the update.'
end
end
end

这应该让你继续做事......请注意,我正在使用这个进行订阅:

@access_token ||= Koala::Facebook::OAuth.new(FACEBOOK_API_KEY,FACEBOOK_API_SECRET).get_app_access_token
@realtime = Koala::Facebook::RealtimeUpdates.new(:app_id => FACEBOOK_API_KEY, :app_access_token => @access_token)
@realtime.subscribe('user', 'first_name,uid,etc...', facebook_subscription_url,'SOME_TOKEN_HERE')

我认为关键是您正确响应来自 Facebook 的 GET 请求。在发送有关其用户的 secret 信息之前,他们使用它来验证他们是否联系了正确的服务器。

另外——我已经有一段时间没看过这个了,但如果我没记错的话,我似乎记得回调 URL 中除了默认协议(protocol)端口规范之外还有其他问题。例如:http://www.something.com:8080/subscription没有用——它必须是http://www.something.com/subscription

关于ruby-on-rails-3 - 在 Rails、Heroku 和 Koala 中没有使用实时更新的来自 Facebook 的 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8356450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com