Как подписаться на обновления в реальном времени для пользователей моего приложения, используя Koala Gem Rails - PullRequest
0 голосов
/ 11 июля 2019

Возникли проблемы с получением обновлений в реальном времени от Facebook, работающих с использованием камня Koala ...

https://github.com/arsduo/koala/wiki/Realtime-Updates

Я следовал руководству в вики.Я настроил URL обратного вызова со следующим в моем файле маршрутов:

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

Затем, когда Facebook делает запрос на получение, я попробовал оба следующих в моем контроллере, чтобы «встретитьвызов », как требуется в их документах (https://developers.facebook.com/docs/graph-api/webhooks/getting-started#verification-requests):

class FacebooksController < ApplicationController

  def subscribe
    verify_token = "VERIFY_TOKEN"
    if params["hub.mode"] == "subscribe" && params["hub.verify_token"] == verify_token
      params["hub.challenge"]
    else
      false
    end
  end
end

Я также пытался (с измененным маршрутом к нужному действию):

class FacebooksController < ApplicationController
 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"
        p params['object']
        render :text => 'Thanks for the update.'
      end
    end
  end
end

Результатом каждый раз являетсяследующая ошибка на их панели управления при попытке подписаться:

The URL couldn't be validated. Response does not match challenge, expected value="2090763306", received="\u003C!DOCTYPE html>\n\u003Chtm..."

И следующее при попытке запустить это в консоли:

Console cmd: @updates.subscribe("user", "feed", "https://www.bettrplay.com/facebook/subscription" , "YOUR_VERIFY_TOKEN")

Ответ консоли: Koala::Facebook::ClientError: type: OAuthException, code: 2201, message: (#2201) response does not match challenge, expected value="773833772", received="\u003C!DOCTYPE html>\n\u003Ch...", x-fb-trace-id: GbtUB+FcLJS [HTTP 400]

Я не уверен, в чем проблема, поскольку я не вижу, что возвращается в Facebook, и я все еще немного не уверен в том, что мне следует использоватькак VERIFY_TOKEN.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 июля 2019

ОК, после долгих испытаний и проверки я обнаружил проблему.

Сначала проблема заключалась в том, чтобы придумать попытку аутентификации и, таким образом, ответить HTML-сообщением об ошибке.

Затем я использовал кусоккод здесь, чтобы ответить на запрос, который был хорошим, но старым.

На всякий случай, если кто-то пропустил его, render_text: теперь render_plain: Что использовать вместо `render: text`(и `render nothing: true`) в rails 5.1 и более поздних версиях?

Теперь я подписан на обновления от пользователей моего приложения, и если вы хотите сделать то же самое, вы можете использовать приведенный выше код, простоне забудьте пропустить аутентификацию в FacebooksController и использовать render_plain вместо render_text!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...