【问题标题】:No POST from facebook using real-time updates in Rails, Heroku and Koala没有使用 Rails、Heroku 和 Koala 中的实时更新从 facebook 发布
【发布时间】:2011-12-02 12:38:43
【问题描述】:

这个问题是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"}

控制器(模拟版,仅用于测试它是否工作):

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}]

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

  • 也许我没有触发正确的变化事件?
  • 如何查看我的应用的用户列表? (现在它是一个测试应用,唯一的用户就是我)
  • 有人遇到过这种问题吗?
  • 代码有问题吗?
  • 脸书挂了?这是互联网的终结吗?

感谢您的帮助:)

【问题讨论】:

    标签: ruby-on-rails-3 facebook heroku real-time


    【解决方案1】:

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

    路线:

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

    控制器:

      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 请求。在发送有关其用户的机密信息之前,他们使用它来验证他们正在联系正确的服务器。

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

    【讨论】:

      【解决方案2】:

      不确定您是否会遇到这种情况,但请确保您有权访问对象 - 用户、权限、页面属性(位置、电子邮件等)

      在我的情况下,我试图在我的应用不需要 user_location 权限的情况下获取有关 location 属性更改的通知。对于 user 对象,请查看此页面中的“字段”部分https://developers.facebook.com/docs/reference/api/user/

      【讨论】:

        【解决方案3】:

        Facebook 知道您的应用程序在哪里吗?它有可以解析的 URL 吗?

        【讨论】:

        • 是的,第一个 GET 请求(测试 hub.challenge 的地方)正常完成(显示在日志中,从而创建了正确的订阅)。此外,如果我向订阅回调的 URL 发出手动 POST 请求(使用 curl),我可以在日志中看到它。
        • 如果您没有看到来自 Facebook 的任何内容,那么要么它没有发布到正确的 URL,要么发布到它无法解析的 URL,或者没有像您期望的 Facebook 那样工作。跨度>
        猜你喜欢
        • 2016-05-15
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2012-08-08
        • 1970-01-01
        • 2012-05-02
        • 2014-01-27
        • 1970-01-01
        相关资源
        最近更新 更多